]> git.proxmox.com Git - qemu.git/commitdiff
bios: Fix multiple calls into smbios_load_ex
authorAnthony Liguori <aliguori@us.ibm.com>
Fri, 10 Jul 2009 19:52:56 +0000 (14:52 -0500)
committerAnthony Liguori <aliguori@us.ibm.com>
Thu, 16 Jul 2009 13:28:13 +0000 (08:28 -0500)
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>
pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch [new file with mode: 0644]
pc-bios/bios-pq/series
pc-bios/bios.bin

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 (file)
index 0000000..cfa4c13
--- /dev/null
@@ -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)
index 9e909de1dcc7db2882c1b7d10472ad50ebc31247..695b148ad6f2b19d48635af3d4300213a223f0de 100644 (file)
@@ -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
index 8c016aa56a3735d0847efc25434fb8ddf3d7b128..1c4dca8b8743117fb2bfdb7a46ff4351bd744742 100644 (file)
Binary files a/pc-bios/bios.bin and b/pc-bios/bios.bin differ