From patchwork Fri Sep 4 21:46:23 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcelo Tosatti X-Patchwork-Id: 33017 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by bilbo.ozlabs.org (Postfix) with ESMTPS id CDB47B70B3 for ; Sat, 5 Sep 2009 07:47:58 +1000 (EST) Received: from localhost ([127.0.0.1]:33512 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MjgdO-0006f2-M7 for incoming@patchwork.ozlabs.org; Fri, 04 Sep 2009 17:47:54 -0400 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 Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n84Lkv1J001135; Fri, 4 Sep 2009 17:46:57 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n84LkuPC031700; Fri, 4 Sep 2009 17:46:57 -0400 Received: from amt.cnet (vpn-10-8.str.redhat.com [10.32.10.8]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n84Lksno023170; Fri, 4 Sep 2009 17:46:56 -0400 Received: from amt.cnet (amt.cnet [127.0.0.1]) by amt.cnet (Postfix) with ESMTP id D5438674188; Fri, 4 Sep 2009 18:46:27 -0300 (BRT) Received: (from marcelo@localhost) by amt.cnet (8.14.3/8.14.3/Submit) id n84LkN6i010201; Fri, 4 Sep 2009 18:46:23 -0300 Date: Fri, 4 Sep 2009 18:46:23 -0300 From: Marcelo Tosatti To: Luiz Capitulino 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-Disposition: inline In-Reply-To: <20090904183925.63b0b5f7@doriath> User-Agent: Mutt/1.5.19 (2009-01-05) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: Glauber Costa , Mark McLoughlin , qemu-devel@nongnu.org, kvm@vger.kernel.org, Dustin Kirkland X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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) {