vmm: Make 60K of low 1M available in e820map.
authorRonald G. Minnich <rminnich@gmail.com>
Wed, 8 Jun 2016 22:01:56 +0000 (15:01 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 9 Jun 2016 02:29:44 +0000 (22:29 -0400)
Linux needs to be able to allocate several pages in low memory.
We had hoped to get around this limit, but it's not possible.

The range 0 to 16M was formerly marked as E820_RESERVED.
Set up 60K of memory (4K->64K) as E820_RAM for guest use.
Continue to leave the 0-4k region as E820_RESERVED, as well
as 64K to 16M.

Change-Id: Icd48bb8b7d6501269d3edb6a8e5b1d7899826a50
Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tests/vmm/vmrunkernel.c

index 6dd66a4..116baed 100644 (file)
@@ -556,11 +556,20 @@ int main(int argc, char **argv)
        memset(bp, 0, 4096);
 
        /* Put the e820 memory region information in the boot_params */
-       bp->e820_entries = 3;
+       bp->e820_entries = 5;
        int e820i = 0;
 
+       /* Give it just a tiny bit of memory -- 60k -- at low memory. */
        bp->e820_map[e820i].addr = 0;
-       bp->e820_map[e820i].size = 16 * 1048576;
+       bp->e820_map[e820i].size = 4 * 1024;
+       bp->e820_map[e820i++].type = E820_RESERVED;
+
+       bp->e820_map[e820i].addr = 4 * 1024;
+       bp->e820_map[e820i].size = 64 * 1024 - 4 * 1024;
+       bp->e820_map[e820i++].type = E820_RAM;
+
+       bp->e820_map[e820i].addr = 64 * 1024;
+       bp->e820_map[e820i].size = 16 * 1048576 - 64 * 1024;
        bp->e820_map[e820i++].type = E820_RESERVED;
 
        bp->e820_map[e820i].addr = 16 * 1048576;