From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MjIPy-0002Tj-Ju for qemu-devel@nongnu.org; Thu, 03 Sep 2009 15:56:26 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MjIPu-0002TX-4L for qemu-devel@nongnu.org; Thu, 03 Sep 2009 15:56:26 -0400 Received: from [199.232.76.173] (port=44349 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MjIPt-0002TU-Un for qemu-devel@nongnu.org; Thu, 03 Sep 2009 15:56:22 -0400 Received: from mx20.gnu.org ([199.232.41.8]:55667) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MjIPt-0005P5-DM for qemu-devel@nongnu.org; Thu, 03 Sep 2009 15:56:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MjIPr-00010w-TI for qemu-devel@nongnu.org; Thu, 03 Sep 2009 15:56:20 -0400 Date: Thu, 3 Sep 2009 16:55:10 -0300 From: Marcelo Tosatti Message-ID: <20090903195510.GA11497@amt.cnet> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Dustin Kirkland Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org On Thu, Sep 03, 2009 at 12:31:33PM -0500, Dustin Kirkland wrote: > qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back > to non-accelerated mode > > We're seeing segfaults on systems without access to /dev/kvm. It > looks like the global kvm_allowed is being set just a little too late > in vl.c. This patch moves the kvm initialization a bit higher in the > vl.c main, just after options processing, and solves the segfaults. > We're carrying this patch in Ubuntu 9.10 Alpha. Please apply > upstream, or advise if and why this might not be the optimal solution. > > Signed-off-by: Dustin Kirkland Dustin, I think its safer to move it just after fork() from -daemonize, to make sure no state initialized by kvm_init is lost in the child. > Move the kvm_init() call a bit higher to fix a segfault when > /dev/kvm is not available. The kvm_allowed global needs > to be set correctly a little earlier. > > Signed-off-by: Dustin Kirkland > > > --- qemu-kvm-0.11.0~rc1.orig/vl.c > +++ qemu-kvm-0.11.0~rc1/vl.c > @@ -5748,6 +5748,20 @@ > } > } > > + if (kvm_enabled()) { > + int ret; > + > + ret = kvm_init(smp_cpus); > + if (ret < 0) { > +#if defined(KVM_UPSTREAM) || defined(NO_CPU_EMULATION) > + fprintf(stderr, "failed to initialize KVM\n"); > + exit(1); > +#endif > + fprintf(stderr, "Could not initialize KVM, will disable KVM support\n"); > + kvm_allowed = 0; > + } > + } > + > /* If no data_dir is specified then try to find it relative to the > executable path. */ > if (!data_dir) { > @@ -6008,20 +6022,6 @@ > } > } > > - if (kvm_enabled()) { > - int ret; > - > - ret = kvm_init(smp_cpus); > - if (ret < 0) { > -#if defined(KVM_UPSTREAM) || defined(NO_CPU_EMULATION) > - fprintf(stderr, "failed to initialize KVM\n"); > - exit(1); > -#endif > - fprintf(stderr, "Could not initialize KVM, will disable KVM support\n"); > - kvm_allowed = 0; > - } > - } > - > if (monitor_device) { > monitor_hd = qemu_chr_open("monitor", monitor_device, NULL); > if (!monitor_hd) {