* [Qemu-devel] [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode @ 2009-09-03 17:31 Dustin Kirkland 2009-09-03 19:55 ` [Qemu-devel] " Marcelo Tosatti ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Dustin Kirkland @ 2009-09-03 17:31 UTC (permalink / raw) To: qemu-devel, kvm [-- Attachment #1: Type: text/plain, Size: 560 bytes --] 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 <kirkland@canonical.com> [-- Attachment #2: 04_fix-no-kvm-segfault.patch --] [-- Type: text/x-diff, Size: 1380 bytes --] 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 <kirkland@canonical.com> --- 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) { ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-03 17:31 [Qemu-devel] [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode Dustin Kirkland @ 2009-09-03 19:55 ` Marcelo Tosatti 2009-09-03 20:01 ` Mark McLoughlin 2009-09-03 20:05 ` Luiz Capitulino 2 siblings, 0 replies; 13+ messages in thread From: Marcelo Tosatti @ 2009-09-03 19:55 UTC (permalink / raw) To: Dustin Kirkland; +Cc: qemu-devel, kvm 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 <kirkland@canonical.com> 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 <kirkland@canonical.com> > > > --- 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) { ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-03 17:31 [Qemu-devel] [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode Dustin Kirkland 2009-09-03 19:55 ` [Qemu-devel] " Marcelo Tosatti @ 2009-09-03 20:01 ` Mark McLoughlin 2009-09-03 21:48 ` Dustin Kirkland 2009-09-03 20:05 ` Luiz Capitulino 2 siblings, 1 reply; 13+ messages in thread From: Mark McLoughlin @ 2009-09-03 20:01 UTC (permalink / raw) To: Dustin Kirkland; +Cc: qemu-devel, kvm On Thu, 2009-09-03 at 12:31 -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. Ah discussion about an alternative fix for this fizzled out recently: http://www.mail-archive.com/kvm@vger.kernel.org/msg19890.html Cheers, Mark. ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-03 20:01 ` Mark McLoughlin @ 2009-09-03 21:48 ` Dustin Kirkland 2009-09-03 22:18 ` Glauber Costa 0 siblings, 1 reply; 13+ messages in thread From: Dustin Kirkland @ 2009-09-03 21:48 UTC (permalink / raw) To: Mark McLoughlin; +Cc: qemu-devel, kvm On Thu, Sep 3, 2009 at 3:01 PM, Mark McLoughlin<markmc@redhat.com> wrote: > On Thu, 2009-09-03 at 12:31 -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. > > Ah discussion about an alternative fix for this fizzled out recently: > > http://www.mail-archive.com/kvm@vger.kernel.org/msg19890.html Ah, thanks Mark. In that thread, I found Daniel's suggestion the most reasonable, and user-friendly: On Mon, Jul 27, 2009 at 1:44 PM, Daniel P. Berrange<berrange@redhat.com> wrote: > Well, we could go for logic like: > > * No arg given => try kvm, try kqemu, try tcg > * --accelmode arg given => try $arg, and fail if unavailable > > then libvirt would simply always supply --accelmode for all VMs, > while people running qemu manually would get best available :-Dustin ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-03 21:48 ` Dustin Kirkland @ 2009-09-03 22:18 ` Glauber Costa 2009-09-04 7:22 ` Mark McLoughlin 0 siblings, 1 reply; 13+ messages in thread From: Glauber Costa @ 2009-09-03 22:18 UTC (permalink / raw) To: Dustin Kirkland; +Cc: Mark McLoughlin, qemu-devel, kvm On Thu, Sep 3, 2009 at 6:48 PM, Dustin Kirkland<kirkland@canonical.com> wrote: > On Thu, Sep 3, 2009 at 3:01 PM, Mark McLoughlin<markmc@redhat.com> wrote: >> On Thu, 2009-09-03 at 12:31 -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. >> >> Ah discussion about an alternative fix for this fizzled out recently: >> >> http://www.mail-archive.com/kvm@vger.kernel.org/msg19890.html > > Ah, thanks Mark. In that thread, I found Daniel's suggestion the most > reasonable, and user-friendly: > > On Mon, Jul 27, 2009 at 1:44 PM, Daniel P. Berrange<berrange@redhat.com> wrote: >> Well, we could go for logic like: >> >> * No arg given => try kvm, try kqemu, try tcg >> * --accelmode arg given => try $arg, and fail if unavailable >> >> then libvirt would simply always supply --accelmode for all VMs, >> while people running qemu manually would get best available I sent some patches to do that, but they were incomplete, and I was preempted by something else. If you want, you can wait for my cycles to come back, or pick from where I left -- Glauber Costa. "Free as in Freedom" http://glommer.net "The less confident you are, the more serious you have to act." ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-03 22:18 ` Glauber Costa @ 2009-09-04 7:22 ` Mark McLoughlin 2009-09-04 16:06 ` Dustin Kirkland 0 siblings, 1 reply; 13+ messages in thread From: Mark McLoughlin @ 2009-09-04 7:22 UTC (permalink / raw) To: Glauber Costa; +Cc: qemu-devel, kvm, Dustin Kirkland On Thu, 2009-09-03 at 19:18 -0300, Glauber Costa wrote: > On Thu, Sep 3, 2009 at 6:48 PM, Dustin Kirkland<kirkland@canonical.com> wrote: > > On Thu, Sep 3, 2009 at 3:01 PM, Mark McLoughlin<markmc@redhat.com> wrote: > >> On Thu, 2009-09-03 at 12:31 -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. > >> > >> Ah discussion about an alternative fix for this fizzled out recently: > >> > >> http://www.mail-archive.com/kvm@vger.kernel.org/msg19890.html > > > > Ah, thanks Mark. In that thread, I found Daniel's suggestion the most > > reasonable, and user-friendly: > > > > On Mon, Jul 27, 2009 at 1:44 PM, Daniel P. Berrange<berrange@redhat.com> wrote: > >> Well, we could go for logic like: > >> > >> * No arg given => try kvm, try kqemu, try tcg > >> * --accelmode arg given => try $arg, and fail if unavailable > >> > >> then libvirt would simply always supply --accelmode for all VMs, > >> while people running qemu manually would get best available > I sent some patches to do that, but they were incomplete, and I was > preempted by something else. > If you want, you can wait for my cycles to come back, or pick from where I left In the meantime, can we commit to stable-0.11 either Dustin's fix or this: http://git.et.redhat.com/?p=qemu-fedora.git;a=commitdiff;h=aa1620047b Cheers, Mark. ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-04 7:22 ` Mark McLoughlin @ 2009-09-04 16:06 ` Dustin Kirkland 2009-09-04 16:36 ` Marcelo Tosatti 0 siblings, 1 reply; 13+ messages in thread From: Dustin Kirkland @ 2009-09-04 16:06 UTC (permalink / raw) To: Mark McLoughlin; +Cc: Glauber Costa, qemu-devel, kvm [-- Attachment #1: Type: text/plain, Size: 2339 bytes --] On Fri, 2009-09-04 at 08:22 +0100, Mark McLoughlin wrote: > On Thu, 2009-09-03 at 19:18 -0300, Glauber Costa wrote: > > On Thu, Sep 3, 2009 at 6:48 PM, Dustin Kirkland<kirkland@canonical.com> wrote: > > > On Thu, Sep 3, 2009 at 3:01 PM, Mark McLoughlin<markmc@redhat.com> wrote: > > >> On Thu, 2009-09-03 at 12:31 -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. > > >> > > >> Ah discussion about an alternative fix for this fizzled out recently: > > >> > > >> http://www.mail-archive.com/kvm@vger.kernel.org/msg19890.html > > > > > > Ah, thanks Mark. In that thread, I found Daniel's suggestion the most > > > reasonable, and user-friendly: > > > > > > On Mon, Jul 27, 2009 at 1:44 PM, Daniel P. Berrange<berrange@redhat.com> wrote: > > >> Well, we could go for logic like: > > >> > > >> * No arg given => try kvm, try kqemu, try tcg > > >> * --accelmode arg given => try $arg, and fail if unavailable > > >> > > >> then libvirt would simply always supply --accelmode for all VMs, > > >> while people running qemu manually would get best available > > I sent some patches to do that, but they were incomplete, and I was > > preempted by something else. > > If you want, you can wait for my cycles to come back, or pick from where I left Thanks for the pointer, Glauber. My cycles a bit constrained too, but I'll have a look when I get a chance. > In the meantime, can we commit to stable-0.11 either Dustin's fix or > this: > > http://git.et.redhat.com/?p=qemu-fedora.git;a=commitdiff;h=aa1620047b +1. We're looking for something agreeable in stable-0.11, that solves the segfault and proceeds without VT acceleration. -- :-Dustin Dustin Kirkland Canonical, LTD kirkland@canonical.com GPG: 1024D/83A61194 [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-04 16:06 ` Dustin Kirkland @ 2009-09-04 16:36 ` Marcelo Tosatti 2009-09-04 19:38 ` Dustin Kirkland 0 siblings, 1 reply; 13+ messages in thread From: Marcelo Tosatti @ 2009-09-04 16:36 UTC (permalink / raw) To: Dustin Kirkland; +Cc: Mark McLoughlin, qemu-devel, kvm, Glauber Costa On Fri, Sep 04, 2009 at 11:06:38AM -0500, Dustin Kirkland wrote: > On Fri, 2009-09-04 at 08:22 +0100, Mark McLoughlin wrote: > > On Thu, 2009-09-03 at 19:18 -0300, Glauber Costa wrote: > > > On Thu, Sep 3, 2009 at 6:48 PM, Dustin Kirkland<kirkland@canonical.com> wrote: > > > > On Thu, Sep 3, 2009 at 3:01 PM, Mark McLoughlin<markmc@redhat.com> wrote: > > > >> On Thu, 2009-09-03 at 12:31 -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. > > > >> > > > >> Ah discussion about an alternative fix for this fizzled out recently: > > > >> > > > >> http://www.mail-archive.com/kvm@vger.kernel.org/msg19890.html > > > > > > > > Ah, thanks Mark. In that thread, I found Daniel's suggestion the most > > > > reasonable, and user-friendly: > > > > > > > > On Mon, Jul 27, 2009 at 1:44 PM, Daniel P. Berrange<berrange@redhat.com> wrote: > > > >> Well, we could go for logic like: > > > >> > > > >> * No arg given => try kvm, try kqemu, try tcg > > > >> * --accelmode arg given => try $arg, and fail if unavailable > > > >> > > > >> then libvirt would simply always supply --accelmode for all VMs, > > > >> while people running qemu manually would get best available > > > I sent some patches to do that, but they were incomplete, and I was > > > preempted by something else. > > > If you want, you can wait for my cycles to come back, or pick from where I left > > Thanks for the pointer, Glauber. My cycles a bit constrained too, but > I'll have a look when I get a chance. > > > In the meantime, can we commit to stable-0.11 either Dustin's fix or > > this: > > > > http://git.et.redhat.com/?p=qemu-fedora.git;a=commitdiff;h=aa1620047b > > +1. We're looking for something agreeable in stable-0.11, that solves > the segfault and proceeds without VT acceleration. Dustin, Can you please resend the patch with the suggestion i made earlier, for stable-0.11? ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-04 16:36 ` Marcelo Tosatti @ 2009-09-04 19:38 ` Dustin Kirkland 2009-09-04 21:39 ` Luiz Capitulino 0 siblings, 1 reply; 13+ messages in thread From: Dustin Kirkland @ 2009-09-04 19:38 UTC (permalink / raw) To: Marcelo Tosatti; +Cc: Mark McLoughlin, qemu-devel, kvm, Glauber Costa [-- Attachment #1: Type: text/plain, Size: 2778 bytes --] On Fri, Sep 4, 2009 at 11:36 AM, Marcelo Tosatti<mtosatti@redhat.com> wrote: > On Fri, Sep 04, 2009 at 11:06:38AM -0500, Dustin Kirkland wrote: >> On Fri, 2009-09-04 at 08:22 +0100, Mark McLoughlin wrote: >> > On Thu, 2009-09-03 at 19:18 -0300, Glauber Costa wrote: >> > > On Thu, Sep 3, 2009 at 6:48 PM, Dustin Kirkland<kirkland@canonical.com> wrote: >> > > > On Thu, Sep 3, 2009 at 3:01 PM, Mark McLoughlin<markmc@redhat.com> wrote: >> > > >> On Thu, 2009-09-03 at 12:31 -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. >> > > >> >> > > >> Ah discussion about an alternative fix for this fizzled out recently: >> > > >> >> > > >> http://www.mail-archive.com/kvm@vger.kernel.org/msg19890.html >> > > > >> > > > Ah, thanks Mark. In that thread, I found Daniel's suggestion the most >> > > > reasonable, and user-friendly: >> > > > >> > > > On Mon, Jul 27, 2009 at 1:44 PM, Daniel P. Berrange<berrange@redhat.com> wrote: >> > > >> Well, we could go for logic like: >> > > >> >> > > >> * No arg given => try kvm, try kqemu, try tcg >> > > >> * --accelmode arg given => try $arg, and fail if unavailable >> > > >> >> > > >> then libvirt would simply always supply --accelmode for all VMs, >> > > >> while people running qemu manually would get best available >> > > I sent some patches to do that, but they were incomplete, and I was >> > > preempted by something else. >> > > If you want, you can wait for my cycles to come back, or pick from where I left >> >> Thanks for the pointer, Glauber. My cycles a bit constrained too, but >> I'll have a look when I get a chance. >> >> > In the meantime, can we commit to stable-0.11 either Dustin's fix or >> > this: >> > >> > http://git.et.redhat.com/?p=qemu-fedora.git;a=commitdiff;h=aa1620047b >> >> +1. We're looking for something agreeable in stable-0.11, that solves >> the segfault and proceeds without VT acceleration. > > Dustin, > > Can you please resend the patch with the suggestion i made earlier, for > stable-0.11? 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? :-Dustin [-- Attachment #2: fix-no-dev-kvm-segfault.patch --] [-- Type: text/x-diff, Size: 1833 bytes --] qemu-kvm: fix segfault when running kvm without /dev/kvm 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 <kirkland@canonical.com> diff --git a/vl.c b/vl.c index db75470..26bced8 100644 --- a/vl.c +++ b/vl.c @@ -5831,6 +5831,20 @@ int main(int argc, char **argv, char **envp) } #endif + 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; + } + } + #ifdef CONFIG_KQEMU if (smp_cpus > 1) kqemu_allowed = 0; @@ -6002,20 +6016,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) { ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-04 19:38 ` Dustin Kirkland @ 2009-09-04 21:39 ` Luiz Capitulino 2009-09-04 21:46 ` Marcelo Tosatti 0 siblings, 1 reply; 13+ messages in thread From: Luiz Capitulino @ 2009-09-04 21:39 UTC (permalink / raw) To: Dustin Kirkland Cc: Mark McLoughlin, kvm, Costa, Marcelo Tosatti, qemu-devel, Glauber On Fri, 4 Sep 2009 14:38:30 -0500 Dustin Kirkland <kirkland@canonical.com> wrote: > On Fri, Sep 4, 2009 at 11:36 AM, Marcelo Tosatti<mtosatti@redhat.com> wrote: > > On Fri, Sep 04, 2009 at 11:06:38AM -0500, Dustin Kirkland wrote: > >> On Fri, 2009-09-04 at 08:22 +0100, Mark McLoughlin wrote: > >> > On Thu, 2009-09-03 at 19:18 -0300, Glauber Costa wrote: > >> > > On Thu, Sep 3, 2009 at 6:48 PM, Dustin Kirkland<kirkland@canonical.com> wrote: > >> > > > On Thu, Sep 3, 2009 at 3:01 PM, Mark McLoughlin<markmc@redhat.com> wrote: > >> > > >> On Thu, 2009-09-03 at 12:31 -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. > >> > > >> > >> > > >> Ah discussion about an alternative fix for this fizzled out recently: > >> > > >> > >> > > >> http://www.mail-archive.com/kvm@vger.kernel.org/msg19890.html > >> > > > > >> > > > Ah, thanks Mark. In that thread, I found Daniel's suggestion the most > >> > > > reasonable, and user-friendly: > >> > > > > >> > > > On Mon, Jul 27, 2009 at 1:44 PM, Daniel P. Berrange<berrange@redhat.com> wrote: > >> > > >> Well, we could go for logic like: > >> > > >> > >> > > >> * No arg given => try kvm, try kqemu, try tcg > >> > > >> * --accelmode arg given => try $arg, and fail if unavailable > >> > > >> > >> > > >> then libvirt would simply always supply --accelmode for all VMs, > >> > > >> while people running qemu manually would get best available > >> > > I sent some patches to do that, but they were incomplete, and I was > >> > > preempted by something else. > >> > > If you want, you can wait for my cycles to come back, or pick from where I left > >> > >> Thanks for the pointer, Glauber. My cycles a bit constrained too, but > >> I'll have a look when I get a chance. > >> > >> > In the meantime, can we commit to stable-0.11 either Dustin's fix or > >> > this: > >> > > >> > http://git.et.redhat.com/?p=qemu-fedora.git;a=commitdiff;h=aa1620047b > >> > >> +1. We're looking for something agreeable in stable-0.11, that solves > >> the segfault and proceeds without VT acceleration. > > > > Dustin, > > > > Can you please resend the patch with the suggestion i made earlier, for > > stable-0.11? > > 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? ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-04 21:39 ` Luiz Capitulino @ 2009-09-04 21:46 ` Marcelo Tosatti 2009-09-04 22:03 ` Luiz Capitulino 0 siblings, 1 reply; 13+ messages in thread From: Marcelo Tosatti @ 2009-09-04 21:46 UTC (permalink / raw) To: Luiz Capitulino Cc: Glauber Costa, Mark McLoughlin, qemu-devel, kvm, 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 <kirkland@canonical.com> 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) { ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-04 21:46 ` Marcelo Tosatti @ 2009-09-04 22:03 ` Luiz Capitulino 0 siblings, 0 replies; 13+ messages in thread From: Luiz Capitulino @ 2009-09-04 22:03 UTC (permalink / raw) To: Marcelo Tosatti Cc: Mark McLoughlin, kvm, Dustin Kirkland, Costa, qemu-devel, Glauber On Fri, 4 Sep 2009 18:46:23 -0300 Marcelo Tosatti <mtosatti@redhat.com> wrote: > 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. duh. :) Works for me on 0.11-stable: Tested-by: Luiz Capitulino <lcapitulino@redhat.com> ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode 2009-09-03 17:31 [Qemu-devel] [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode Dustin Kirkland 2009-09-03 19:55 ` [Qemu-devel] " Marcelo Tosatti 2009-09-03 20:01 ` Mark McLoughlin @ 2009-09-03 20:05 ` Luiz Capitulino 2 siblings, 0 replies; 13+ messages in thread From: Luiz Capitulino @ 2009-09-03 20:05 UTC (permalink / raw) To: Dustin Kirkland; +Cc: qemu-devel, kvm On Thu, 3 Sep 2009 12:31:33 -0500 Dustin Kirkland <kirkland@canonical.com> 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 <kirkland@canonical.com> Fixes the problem to me: Tested-by: Luiz Capitulino <lcapitulino@redhat.com> ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2009-09-04 22:03 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-09-03 17:31 [Qemu-devel] [PATCH] qemu-kvm: fix segfault when running kvm without /dev/kvm, falling back to non-accelerated mode Dustin Kirkland 2009-09-03 19:55 ` [Qemu-devel] " Marcelo Tosatti 2009-09-03 20:01 ` Mark McLoughlin 2009-09-03 21:48 ` Dustin Kirkland 2009-09-03 22:18 ` Glauber Costa 2009-09-04 7:22 ` Mark McLoughlin 2009-09-04 16:06 ` Dustin Kirkland 2009-09-04 16:36 ` Marcelo Tosatti 2009-09-04 19:38 ` Dustin Kirkland 2009-09-04 21:39 ` Luiz Capitulino 2009-09-04 21:46 ` Marcelo Tosatti 2009-09-04 22:03 ` Luiz Capitulino 2009-09-03 20:05 ` Luiz Capitulino
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).