aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2009-12-05 12:44:25 +0100
committerAurelien Jarno <aurelien@aurel32.net>2009-12-05 17:36:02 +0100
commit6b02494d64a15476e26a6e8468623d01c4c75c58 (patch)
treefcf98539249e0ee86f8854e076cd4415c4f25025
parent0e60a699d22be754c63392e5c5a275bff27726b7 (diff)
downloadqemu-6b02494d64a15476e26a6e8468623d01c4c75c58.zip
qemu-6b02494d64a15476e26a6e8468623d01c4c75c58.tar.gz
qemu-6b02494d64a15476e26a6e8468623d01c4c75c58.tar.bz2
Allocate physical memory in low virtual address space
KVM on S390x requires the virtual address space of the guest's RAM to be within the first 256GB. The general direction I'd like to see KVM on S390 move is that this requirement is losened, but for now that's what we're stuck with. So let's just hack up qemu_ram_alloc until KVM behaves nicely :-). Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
-rw-r--r--exec.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/exec.c b/exec.c
index eb1ee51..7b7fb5b 100644
--- a/exec.c
+++ b/exec.c
@@ -2411,7 +2411,13 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size)
size = TARGET_PAGE_ALIGN(size);
new_block = qemu_malloc(sizeof(*new_block));
+#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, PROT_EXEC|PROT_READ|PROT_WRITE,
+ MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+#else
new_block->host = qemu_vmalloc(size);
+#endif
#ifdef MADV_MERGEABLE
madvise(new_block->host, size, MADV_MERGEABLE);
#endif