]> git.proxmox.com Git - mirror_qemu.git/commitdiff
s390x: change mapping base to allow guests > 2GB
authorChristian Borntraeger <borntraeger@de.ibm.com>
Tue, 10 May 2011 12:49:10 +0000 (14:49 +0200)
committerAlexander Graf <agraf@suse.de>
Fri, 20 May 2011 15:35:13 +0000 (17:35 +0200)
the current s390x qemu memory layout is

0x1000000: guest start
0x80000000: qemu binary

which limits the amount of available memory to <2GB.
This patch moves the guest pages to 32GB to not collide with the binary
and to leave some space for the program break of qemu.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
exec.c

diff --git a/exec.c b/exec.c
index a6df2d61398ee33339fac4abac3cbfad36d0006b..3f96d44101478f290358da90c8bd669d9706f456 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -2910,10 +2910,14 @@ ram_addr_t qemu_ram_alloc_from_ptr(DeviceState *dev, const char *name,
 #endif
         } else {
 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
-            /* XXX S390 KVM requires the topmost vma of the RAM to be < 256GB */
-            new_block->host = mmap((void*)0x1000000, size,
+            /* S390 KVM requires the topmost vma of the RAM to be smaller than
+               an system defined value, which is at least 256GB. Larger systems
+               have larger values. We put the guest between the end of data
+               segment (system break) and this value. We use 32GB as a base to
+               have enough room for the system break to grow. */
+            new_block->host = mmap((void*)0x800000000, size,
                                    PROT_EXEC|PROT_READ|PROT_WRITE,
-                                   MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+                                   MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
 #else
             if (xen_mapcache_enabled()) {
                 xen_ram_alloc(new_block->offset, size);