[SeaBIOS] wrong memsize in smbios_init()

Sebastian Herbszt herbszt at gmx.de
Wed Jan 6 21:13:13 CET 2010


src/smbios.c has

u64 memsize = RamSizeOver4G;
if (memsize)
  memsize += 0x100000000ull;
else
  memsize = RamSize;

RamSizeOver4G = "total ram" - "start of pci hole" (e.g. 0xe0000000 in qemu, 0xc0000000 in bochs)
Adding 4GB is wrong. With 33 GB of RAM i end up with 16+16+2 instead of 16+16+1 in smbios tables.
The patch below fixes it for me.

above_4g_mem_size in qemu is a possible misnomer.

- Sebastian

--- a/src/smbios.c
+++ b/src/smbios.c
@@ -405,11 +405,7 @@ smbios_init(void)
     int cpu_num;
     for (cpu_num = 1; cpu_num <= MaxCountCPUs; cpu_num++)
         add_struct(4, p, cpu_num);
-    u64 memsize = RamSizeOver4G;
-    if (memsize)
-        memsize += 0x100000000ull;
-    else
-        memsize = RamSize;
+    u64 memsize = RamSize + RamSizeOver4G;
     memsize = memsize / (1024 * 1024);
     int nr_mem_devs = (memsize + 0x3fff) >> 14;
     add_struct(16, p, memsize, nr_mem_devs);




More information about the SeaBIOS mailing list