[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] [resubmit] Allocate translation buffer before g
From: |
Juergen Lock |
Subject: |
Re: [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 23:29:19 +0200 (CEST) |
In article <address@hidden> you write:
>On Thu, Oct 23, 2008 at 12:10 AM, Juergen Lock <address@hidden> wrote:
>>
>> 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? :)
>
>What about including a shorter version of that explanation as a comment
>in your patch ? :)
Ok here we go:
Index: qemu/vl.c
@@ -9938,15 +9938,19 @@
phys_ram_size += ram_size;
}
+ /* init the dynamic translator */
+ /* This allocates code_gen_buffer which needs to be in the lower vm at
+ * least on amd64 hosts because it uses 32 bit branch offsets etc.
+ * Do this before the guest RAM allocation below so that that can't
+ * get in the way. */
+ 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();
/* we always create the cdrom drive, even if no disk is there */
Signed-off-by: Juergen Lock <address@hidden>