From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Mjgce-0006ao-88 for qemu-devel@nongnu.org; Fri, 04 Sep 2009 17:47:08 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MjgcZ-0006a4-J9 for qemu-devel@nongnu.org; Fri, 04 Sep 2009 17:47:07 -0400 Received: from [199.232.76.173] (port=37635 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MjgcZ-0006a1-Da for qemu-devel@nongnu.org; Fri, 04 Sep 2009 17:47:03 -0400 Received: from mx1.redhat.com ([209.132.183.28]:63942) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MjgcY-0005py-Us for qemu-devel@nongnu.org; Fri, 04 Sep 2009 17:47:03 -0400 Date: Fri, 4 Sep 2009 18:46:23 -0300 From: Marcelo Tosatti Subject: Re: [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode Message-ID: <20090904214623.GA10196@amt.cnet> References: <1252008114.3084.136.camel@blaa> <5d6222a80909031518h2bf804fbk1f7a52424d3e8649@mail.gmail.com> <1252048961.3144.8.camel@blaa> <1252080398.4625.47.camel@x200> <20090904163611.GC5132@amt.cnet> <20090904183925.63b0b5f7@doriath> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090904183925.63b0b5f7@doriath> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: Glauber Costa , Mark McLoughlin , qemu-devel@nongnu.org, kvm@vger.kernel.org, Dustin Kirkland On Fri, Sep 04, 2009 at 06:39:25PM -0300, Luiz Capitulino wrote: > > Sure, Marcelo. It's attached. > > > > I tested it, and it still does avoid the segfault. > > > > Luiz, could you re-test this patch on your side too? > > I'm getting rejections, are you sure it's against upstream? Its againts 0.11-stable branch. Try this against master: qemu-kvm segfaults on systems without access to /dev/kvm. The global kvm_allowed is being set too late in vl.c. This patch moves the kvm initialization a bit higher in the vl.c main, just after the daemonize fork. This fix is intended to be a short term solution, solving the segfaults. In the longer term, the suggested approach requires a bit more development and testing: * If no arg given => try kvm, try kqemu, try tcg * If --accelmode arg given => try $arg, and fail if unavailable Signed-off-by: Dustin Kirkland diff --git a/vl.c b/vl.c index 9f03d85..3485ce6 100644 --- a/vl.c +++ b/vl.c @@ -5823,6 +5823,20 @@ int main(int argc, char **argv, char **envp) signal(SIGTTIN, SIG_IGN); } + 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 (pid_file && qemu_create_pidfile(pid_file) != 0) { if (daemonize) { uint8_t status = 1; @@ -5983,20 +5997,6 @@ int main(int argc, char **argv, char **envp) } } - 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) {