summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2016-03-09 23:22:58 +0800
committerMartin Roth <martinroth@google.com>2016-03-11 16:53:39 +0100
commit3677520fd9162d7447308ff5580313cca9e64a19 (patch)
tree2d2e3fcd78d05f1fa5bcdc39d31bcf4a1e14a1de
parentf2e0461d8970d4690297dc9e40ee4f6d91e5a0c6 (diff)
downloadcoreboot-3677520fd9162d7447308ff5580313cca9e64a19.tar.xz
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 <mytbk920423@gmail.com> Reviewed-on: https://review.coreboot.org/14008 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins)
-rw-r--r--src/arch/x86/smbios.c4
1 files changed, 3 insertions, 1 deletions
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)