From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ryan Harper Subject: Re: [Qemu-devel] [PATCH] Fix segfault with ram_size > 4095M without kvm Date: Tue, 23 Feb 2010 16:55:01 -0600 Message-ID: <20100223225501.GQ17350@us.ibm.com> References: <20100223151314.GN17350@us.ibm.com> <4B840A17.9050809@aurel32.net> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Ryan Harper , qemu-devel@nongnu.org, kvm@vger.kernel.org To: Aurelien Jarno Return-path: Received: from e8.ny.us.ibm.com ([32.97.182.138]:53948 "EHLO e8.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753249Ab0BWWzI (ORCPT ); Tue, 23 Feb 2010 17:55:08 -0500 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by e8.ny.us.ibm.com (8.14.3/8.13.1) with ESMTP id o1NIlZlb022742 for ; Tue, 23 Feb 2010 13:47:35 -0500 Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o1NMt7fY1478834 for ; Tue, 23 Feb 2010 17:55:07 -0500 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.3/8.13.1/NCO v10.0 AVout) with ESMTP id o1NMt6uB008215 for ; Tue, 23 Feb 2010 19:55:07 -0300 Content-Disposition: inline In-Reply-To: <4B840A17.9050809@aurel32.net> Sender: kvm-owner@vger.kernel.org List-ID: * Aurelien Jarno [2010-02-23 11:37]: > Ryan Harper a =E9crit : > > Currently, x86_64-softmmu qemu segfaults when trying to use > 4095M= memsize. > > This patch adds a simple check and error message (much like the 204= 7 limit on > > 32-bit hosts) on ram_size in the control path after we determine we= 're > > not using kvm > >=20 > > Upstream qemu-kvm is affected if using the -no-kvm option; this pat= ch address > > the segfault there as well. >=20 > It looks like workarounding the real bug. At some point both > i386-softmmu (via PAE) and x86_64-softmmu were able to support > 4GB = of > memory. I remember adding the support long time ago, and testing it w= ith > 32GB of emulated RAM. Indeed it was a workaround. I thought it was reasonable since we cap the size for 32-bit at 2047; but Anthony mentioned that on 64-bit hosts some targets had >4G support so we should fix the segfault. here is th= e backtrace I got from the core file: Core was generated by `./x86_64-softmmu/qemu-system-x86_64 -m 4096'. Program terminated with signal 11, Segmentation fault. #0 0x00000000004d1a59 in tb_alloc_page (tb=3D0x7f33d111d010, n=3D0, pa= ge_addr=3D4295094272) at /home/rharper/work/git/qemu/exec.c:1125 1125 tb->page_next[n] =3D p->first_tb; (gdb) bt #0 0x00000000004d1a59 in tb_alloc_page (tb=3D0x7f33d111d010, n=3D0, pa= ge_addr=3D4295094272) at /home/rharper/work/git/qemu/exec.c:1125 #1 0x00000000004d1bf1 in tb_link_phys (tb=3D0x7f33d111d010, phys_pc=3D= 4295098352, phys_page2=3D18446744073709551615) at /home/rharper/work/git/qemu/exec.c:1215 #2 0x00000000004d1612 in tb_gen_code (env=3D0x2180ed0, pc=3D4294967280= , cs_base=3D4294901760, flags=3D68, cflags=3D0) at /home/rharper/work/git/qemu/exec.c:913 #3 0x00000000004d849c in tb_find_slow (pc=3D4294967280, cs_base=3D4294= 901760, flags=3D68) at /home/rharper/work/git/qemu/cpu-exec.c:161 #4 0x00000000004d85b2 in tb_find_fast () at /home/rharper/work/git/qem= u/cpu-exec.c:182 #5 0x00000000004d8cdc in cpu_x86_exec (env1=3D0x2180ed0) at /home/rhar= per/work/git/qemu/cpu-exec.c:579 #6 0x000000000040d686 in qemu_cpu_exec (env=3D0x2180ed0) at /home/rhar= per/work/git/qemu/vl.c:3895 #7 0x000000000040d76b in tcg_cpu_exec () at /home/rharper/work/git/qem= u/vl.c:3924 #8 0x000000000040da39 in main_loop () at /home/rharper/work/git/qemu/v= l.c:4042 #9 0x0000000000411a2f in main (argc=3D3, argv=3D0x7fff5782ab08, envp=3D= 0x7fff5782ab28) at /home/rharper/work/git/qemu/vl.c:6102 >=20 >=20 > > Signed-off-by: Ryan Harper > > --- > > vl.c | 6 ++++++ > > 1 files changed, 6 insertions(+), 0 deletions(-) > >=20 > > diff --git a/vl.c b/vl.c > > index db7a178..a659e98 100644 > > --- a/vl.c > > +++ b/vl.c > > @@ -5760,6 +5760,12 @@ int main(int argc, char **argv, char **envp) > > fprintf(stderr, "failed to initialize KVM\n"); > > exit(1); > > } > > + } else { > > + /* without kvm enabled, we can only support 4095 MB RAM */ > > + if (ram_size > (4095UL << 20)) { > > + fprintf(stderr, "qemu: without kvm support at most 409= 5 MB RAM can be simulated\n"); > > + exit(1); > > + } > > } > > =20 > > if (qemu_init_main_loop()) { >=20 >=20 > --=20 > Aurelien Jarno GPG: 1024D/F1BCDB73 > aurelien@aurel32.net http://www.aurel32.net > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html --=20 Ryan Harper Software Engineer; Linux Technology Center IBM Corp., Austin, Tx ryanh@us.ibm.com