Anthony Liguori wrote:
KVM supports more than 2GB of memory for x86_64 hosts.  The following patch
fixes a number of type related issues where int's were being used when they
shouldn't have been.  It also introduces CMOS support so the BIOS can build
the appropriate e820 tables.

> [...]
+    /* above 4giga memory allocation */
+    if (above_4g_mem_size > 0) {
+        ram_addr = qemu_ram_alloc(above_4g_mem_size);
+        cpu_register_physical_memory(0x100000000, above_4g_mem_size, ram_addr);
+    }
+

Why do you need this ? All the RAM can be registered with a single call. I fear you need to do that because of KVM RAM handling limitations.

Index: qemu/osdep.c
===================================================================
--- qemu.orig/osdep.c   2008-01-30 13:47:00.000000000 -0600
+++ qemu/osdep.c        2008-01-30 13:47:31.000000000 -0600
@@ -113,7 +113,7 @@
             int64_t free_space;
             int ram_mb;
- extern int ram_size;
+            extern int64_t ram_size;
             free_space = (int64_t)stfs.f_bavail * stfs.f_bsize;
             if ((ram_size + 8192 * 1024) >= free_space) {
                 ram_mb = (ram_size / (1024 * 1024));
@@ -202,7 +202,7 @@
 #ifdef _BSD
     return valloc(size);
 #else
-    return memalign(4096, size);
+    return memalign(TARGET_PAGE_SIZE, size);
 #endif
 }

No fully correct because it is intended to be the host page size.

+extern int64_t ram_size;

I agree with the fact that ram_size should be 64 bit. Maybe each machine could test the value and emit an error message if it is too big. Maybe an uint64_t would be better though.

Fabrice.


Reply via email to