diff options
author | Iru Cai <mytbk920423@gmail.com> | 2016-03-09 23:22:58 +0800 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2016-03-11 16:53:39 +0100 |
commit | 3677520fd9162d7447308ff5580313cca9e64a19 (patch) | |
tree | 2d2e3fcd78d05f1fa5bcdc39d31bcf4a1e14a1de | |
parent | f2e0461d8970d4690297dc9e40ee4f6d91e5a0c6 (diff) | |
download | coreboot-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.c | 4 |
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) |