qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] [resubmit] Allocate translation buffer before guest


From: Juergen Lock
Subject: [Qemu-devel] [PATCH] [resubmit] Allocate translation buffer before guest RAM, in case guest RAM is too large on 64 bit hosts
Date: Thu, 23 Oct 2008 00:10:51 +0200
User-agent: Mutt/1.5.17 (2007-11-01)

Hi!

 Further explanation as requested: cpu_exec_init_all() below allocates
code_gen_buffer which needs to be in the lower 4G (actually 2G I guess)
because it uses 32 bit branch offsets.  Allocate this first so that the
guest RAM allocation can't get in the way i.e. block the lower vm when
doing something like -m 4096 on systems that allocate from low addresses
by default.

 I hope this is more clear now? :)

 Thanx,
        Juergen

----- Forwarded message from Juergen Lock <address@hidden> -----

From: Juergen Lock <address@hidden>
Date: Sat, 18 Oct 2008 23:05:08 +0200
To: address@hidden
Subject: [PATCH] Allocate translation buffer before guest RAM, in case
        guest RAM is too large on 64 bit hosts
User-Agent: Mutt/1.5.17 (2007-11-01)

Hi!

 The following patch appears to fix -m >= 1024 on recent FreeBSD/amd64 hosts
(RELENG_7/HEAD) that no longer return high addresses for allocations by
default (which was the original reason for r5331.)  As this makes sense
in any case when you pass something like -m 4096 on hosts that allocate
from low addresses by default (there would be no room left for the
translation buffer in the low vm where it needs to be), I patched it like
this instead of conditionalizing the mmap hack from r5331 on the FreeBSD
version.

Index: qemu/vl.c
@@ -9850,15 +9850,15 @@
         phys_ram_size += ram_size;
     }
 
+    /* init the dynamic translator */
+    cpu_exec_init_all(tb_size * 1024 * 1024);
+
     phys_ram_base = qemu_vmalloc(phys_ram_size);
     if (!phys_ram_base) {
         fprintf(stderr, "Could not allocate physical memory\n");
         exit(1);
     }
 
-    /* init the dynamic translator */
-    cpu_exec_init_all(tb_size * 1024 * 1024);
-
     bdrv_init(emulate_aio);
 
     /* we always create the cdrom drive, even if no disk is there */

Signed-off-by: Juergen Lock <address@hidden>
----- End forwarded message -----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]