From 3677520fd9162d7447308ff5580313cca9e64a19 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Wed, 9 Mar 2016 23:22:58 +0800 Subject: arch/x86/smbios: fix length calculation for SMBIOS type 17 Different DIMM modules give different SMBIOS type 17 lengths, so we can't use `meminfo->dimm_cnt*len' for entry struct size, otherwise it'll give a wrong SMBIOS size when two or more different DIMMs are installed on the machine. Change-Id: I0e33853f6aa4b30da547eb433839a397d451a8cf Signed-off-by: Iru Cai Reviewed-on: https://review.coreboot.org/14008 Reviewed-by: Aaron Durbin Tested-by: build bot (Jenkins) --- src/arch/x86/smbios.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/arch/x86') diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c index 8c876353ab..f3800578be 100644 --- a/src/arch/x86/smbios.c +++ b/src/arch/x86/smbios.c @@ -473,6 +473,7 @@ static int smbios_write_type11(unsigned long *current, int *handle) static int smbios_write_type17(unsigned long *current, int *handle) { int len = sizeof(struct smbios_type17); + int totallen = 0; int i; struct memory_info *meminfo; @@ -486,8 +487,9 @@ static int smbios_write_type17(unsigned long *current, int *handle) dimm = &meminfo->dimm[i]; len = create_smbios_type17_for_dimm(dimm, current, handle); *current += len; + totallen += len; } - return meminfo->dimm_cnt * len; + return totallen; } static int smbios_write_type32(unsigned long *current, int handle) -- cgit v1.2.3