From e1e8f35a4f59d82ab9a5361c3990c8dadd2e7678 Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Fri, 10 Jul 2009 14:52:56 -0500 Subject: [PATCH] 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 Signed-off-by: Anthony Liguori --- pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch | 35 +++++++++++++++++++++ pc-bios/bios-pq/series | 1 + pc-bios/bios.bin | Bin 131072 -> 131072 bytes 3 files changed, 36 insertions(+) create mode 100644 pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch 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 0000000000..cfa4c13093 --- /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 +Signed-off-by: Anthony Liguori + +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 9e909de1dc..695b148ad6 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 index 8c016aa56a3735d0847efc25434fb8ddf3d7b128..1c4dca8b8743117fb2bfdb7a46ff4351bd744742 100644 GIT binary patch delta 1487 zcwS9ZdrVVj6u;+EYSqdu*iOXqP}?H5r4;98eSm_u#79ktuw+x_RMKS`OZI3tvjr); zMSFMCt;^X=h+9S!|1nIRWfi*#1sT=(>cDMmzR+pX4(4kCVR|mqx`)MNy2(bg$sgQ!P+|smeT)V_6#I{)-8vmJ!3+Z$0TN zR}oZBkgq(QSSyoO2C-PIR2p;3l34pRCi`hjjuaEzt<(an3wBI923t=sA;$^6x|e4o zygSBx9UJ&_tUJ#|^D%A+!az|}Q-o_*XS{n!5bwVDUAhz!z(FRvVJC6<%N|)pXVXdMNW`V#BEYjPewTsbe;?tZ zu%y1lJ<7dt9$b^i*5Sj>fXy8XNZ(zhQjgY%wO^?Do;1gN7GXZ`8MrnuBse0Iy9KtF zS6-6XpBzgz%*!t62;zFH_}GS*H`N@s_H)Xo!2d3V+f;@Io4@R#byi-!`%rm(a|PmT^(!=|nSm`P&UrPxxB;O?q?;U(8qv`M4|N zM_7xSryqp%n66e&-H=oeNg1xdBDDq_Xjgk+BSzKFK^KmzwVExGJnTT^u{CMY#HvM$ zCNtYfFcGAT6p2rMEQ;3te@il<5A(2A6M#k>)#O7^v4_nV=18vT`91 ztk2pEuph6?x=v@727l1{0L-{9=Ob_hf6F;Q!x{9=-UzjLWA?Xj40q4@6wab~?prVv z{Az9rKo;)RdFjyv7U;FPza~VHh}$cZ6KS#|yiDhJ-0nz`gjyYsAH`bzE|`N4^{>*h zg;;ASprim` z^;II6JK-|iZG^(g^<{icCl@-B>9eD9k3K?Q~%d*m1bf4DC46vJ`yyg2h1J zzJS{;IpD-EErswpp0=34h4(FYiHt^yPLiOI^&kwPv$ziYI8dBVXD-J_#TD{EI+>2G zxN53Jvs;J_vabnlvnBgwmEr%eI3ME!sFfP(WwmgQDOh_?U^L zZpvg?GZW`1Gs@r}nbA=mYGV38Abr>j53y5F%R|5dlG0E>h89Fw@0OQ8_TKNDd+s^+ zeEZ$&^QnA3m640>FHWbZwh$RCx2}J+FK6KdYCom8n7gj+gHL~JEKPw`*pM;+S>ZX% zD1aXAX?b7@KbrPlYG!@$1S+vWmgP8OSct!5*ujjc>SC*{Y69iC%tll71aN)afk2Ih zSks6VsL3M8Foq@)WW?p_k|O<>t$Pqt@F1p8i3x92>i|l_t(kk_rNeC0aaeSAi+oJ< z9AkI(9=$ZuQS7G0Ug0e40g9rUV{G#gGIJ*dZ|g?Z-$`&Q_$aDflS)ypE8k@$1N<=g zuCOiMVeVwJEPDIhZ|un;tD&IVL}5Q$@We*4D_H%HtNDOS&JW45u(luE<0WrInltn@S(o?-cT#d5tI)6?cPYo^VqBl(!Aea|?hS?Y zalImQ!$5%0-5~Zq_rl8OyF%#Gm^NC1)wl0eWc}+2v-hip9@ZRulK4YPH9jIO5WS~_ zI3vzwqfY_b(joFYxERSGdbbChN8MJ*drETd2riq#1S2NWk#cs4tfdQaDF2y6d4`oV zbJ-StNOCTVka|HTU8H*`N}3m}1Cf^a9c ztpyvpvVBmA7qcIMGgzqAX{!|h)B+Je%^0EyT8xita|&vSO(e&Vb`sO6L-TrAQ0Q0cR;HR~haEVb@G&(5D zM819|jfjs=ii{!XxZ0YcNYR-{97n%#3shsi>1F!-Z1kHf^w4bFZEApLkTGw8PTXoP zfbH03ZiG2#ntlU*N1eq5Cs44gEPD5XEH~YzNN1jbpd;C;2wYSfNMceWu>xU6ZSJ3A z9P|ekDYRcyXkVnzo~XiAGiFY?L>xkgCd5W*p%VfibU@SJSE}%f8D9Eo6`D#K;ZwvC zBe=1RjE~_NGET=->vWK@)T)C4TxvDK54hgCT=m)?L?qYR^?1;lud2ImT((YC72Y-a zaI&o`=lEHL5f9T-lMP&~U8_*BRGa9;HMVN<-0ZU1Nt35-MFiimwdQ2Ze<+RibL9R+ z)096}ghxsX$m5kPEd�*llnO%k7o$3U08QXw517%w7n!xYu3^OEGD;LIdW`{ENs) z%^e^?zjC`FhMQ(J!dkpO%S_)~fV#4}v~^kJ{p-e8%U+yPMyO%;O%l3*-KX$U-sxG= zbgKdf%Jg%&|DCDvG