diff options
author | Anthony Liguori <aliguori@us.ibm.com> | 2009-07-10 14:52:56 -0500 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-07-16 08:28:13 -0500 |
commit | e1e8f35a4f59d82ab9a5361c3990c8dadd2e7678 (patch) | |
tree | b6fe3d766a138a1a18067f747b437dbe1d30b014 | |
parent | 84273177f25886b3476138470280890001debcbc (diff) | |
download | qemu-e1e8f35a4f59d82ab9a5361c3990c8dadd2e7678.zip qemu-e1e8f35a4f59d82ab9a5361c3990c8dadd2e7678.tar.gz qemu-e1e8f35a4f59d82ab9a5361c3990c8dadd2e7678.tar.bz2 |
bios: Fix multiple calls into smbios_load_ex
We're marking the used entry bitmap in smbios_load_external() for each
type we check, regardless of whether we loaded anything. This makes
subsequent calls behave as if we've already loaded the tables from qemu
and can result in missing tables (ex. multiple type4 entries on an SMP
guest). Only mark the bitmap if we actually load something.
Signed-off-by: Alex Williamson <alex.williamson@hp.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r-- | pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch | 35 | ||||
-rw-r--r-- | pc-bios/bios-pq/series | 1 | ||||
-rw-r--r-- | pc-bios/bios.bin | bin | 131072 -> 131072 bytes |
3 files changed, 36 insertions, 0 deletions
diff --git a/pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch b/pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch new file mode 100644 index 0000000..cfa4c13 --- /dev/null +++ b/pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch @@ -0,0 +1,35 @@ +bios: Fix multiple calls into smbios_load_ex + +We're marking the used entry bitmap in smbios_load_external() for each +type we check, regardless of whether we loaded anything. This makes +subsequent calls behave as if we've already loaded the tables from qemu +and can result in missing tables (ex. multiple type4 entries on an SMP +guest). Only mark the bitmap if we actually load something. + +Signed-off-by: Alex Williamson <alex.williamson@hp.com> +Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> + +diff --git a/bios/rombios32.c b/bios/rombios32.c +index f861f81..c869798 100644 +--- a/bios/rombios32.c ++++ b/bios/rombios32.c +@@ -2554,13 +2554,14 @@ smbios_load_external(int type, char **p, unsigned *nr_structs, + *max_struct_size = *p - (char *)header; + } + +- /* Mark that we've reported on this type */ +- used_bitmap[(type >> 6) & 0x3] |= (1ULL << (type & 0x3f)); ++ if (start != *p) { ++ /* Mark that we've reported on this type */ ++ used_bitmap[(type >> 6) & 0x3] |= (1ULL << (type & 0x3f)); ++ return 1; ++ } + +- return (start != *p); +-#else /* !BX_QEMU */ ++#endif /* !BX_QEMU */ + return 0; +-#endif + } + + void smbios_init(void) diff --git a/pc-bios/bios-pq/series b/pc-bios/bios-pq/series index 9e909de..695b148 100644 --- a/pc-bios/bios-pq/series +++ b/pc-bios/bios-pq/series @@ -16,3 +16,4 @@ 0016-use-correct-mask-to-size-pci-option-rom-bar.patch 0017-bochs-bios-Move-QEMU_CFG-constants-to-rombios.h.patch 0018-bochs-bios-Make-boot-prompt-optional.patch +0019-bios-fix-multiple-calls.patch diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin Binary files differindex 8c016aa..1c4dca8 100644 --- a/pc-bios/bios.bin +++ b/pc-bios/bios.bin |