Patchwork VM can not boot after commit 235e898

login
register
mail settings
Submitter dunrong huang
Date June 4, 2013, 8:26 a.m.
Message ID <CAOZVR5ahH8DCzdm4r5_9J24PQ_Kaj2EaEL7ZHnJq0MaS7h5swg@mail.gmail.com>
Download mbox | patch
Permalink /patch/248495/
State New
Headers show

Comments

dunrong huang - June 4, 2013, 8:26 a.m.
On Tue, Jun 4, 2013 at 3:51 PM, Gleb Natapov <gleb@redhat.com> wrote:

> On Tue, Jun 04, 2013 at 03:47:47PM +0800, Dunrong Huang wrote:
> > On Tue, Jun 4, 2013 at 2:47 PM, Paolo Bonzini <pbonzini@redhat.com>
> wrote:
> >
> > > Il 04/06/2013 05:47, Dunrong Huang ha scritto:
> > > >
> > > > QEMU command:
> > > > ~/usr/bin/qemu-system-x86_64 -enable-kvm -m 1024 debian-append.img
> > > >
> > > > git bisect tells that the following commit causes this bug:
> > > >
> > > > commit 235e8982ad393e5611cb892df54881c872eea9e1
> > > > Author: Jordan Justen <jordan.l.justen@intel.com
> > > > <mailto:jordan.l.justen@intel.com>>
> > > > Date:   Wed May 29 01:27:26 2013 -0700
> > > >
> > > >     kvm: support using KVM_MEM_READONLY flag for regions
> > > >
> > > >     For readonly memory regions and rom devices in romd_mode,
> > > >     we make use of the KVM_MEM_READONLY. A slot that uses
> > > >     KVM_MEM_READONLY can be read from and code can execute from the
> > > >     region, but writes will exit to qemu.
> > > >
> > > > After reverting this commit, VM can boot normally.
> > >
> > > A patch is queued for that.  Using kernel 3.8 or reverting the commit
> > > will both work.
> > >
> > Ok, thanks for information, I will try it.
> >
> The fix is 651eb0f4 and you claim it is still fails for you. This is
> strange because the commit fixed the problem for everyone else. Can you
> double check that you are testing the right commit and you recompiled
> and reinstalled?
>

I am sure 651eb0f4 does not fix this problem.

My test environment is below:

* config.log:
# head -n 2 config.log
# QEMU configure log 2013年 06月 04日 星期二 16:12:59 CST
# Configured with: './configure' '--prefix=/root/usr' '--enable-kvm'
'--enable-werror' '--enable-debug' '--enable-debug-tcg'
'--enable-debug-info' '--enable-sdl' '--enable-gtk' '--enable-virtfs'
'--enable-vnc' '--enable-mixemu' '--enable-vnc-tls' '--enable-vnc-sasl'
'--enable-vnc-jpeg' '--enable-vnc-png' '--enable-vnc-ws' '--enable-curses'
'--enable-curl' '--enable-nptl' '--enable-system' '--enable-user'
'--enable-linux-user' '--enable-guest-base' '--enable-uuid' '--enable-vde'
'--enable-linux-aio' '--enable-cap-ng' '--enable-attr' '--enable-docs'
'--enable-vhost-net' '--enable-spice' '--enable-usb-redir'
'--enable-smartcard-nss' '--enable-tpm' '--enable-guest-agent'
'--target-list=x86_64-softmmu'

* kernel version:
# uname -a
Linux gentoo-company 3.8.2-gentoo #1 SMP Fri Mar 8 11:44:36 CST 2013 x86_64
Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz GenuineIntel GNU/Linux

* details of git tree:
# git log HEAD --oneline
1713924 gtk: don't use g_object_unref on GdkCursor
41686a9 gtk: don't resize window when enabling scaling
651eb0f fix double free the memslot in kvm_set_phys_mem
25b4833 configure: Report unknown target names more helpfully
6e92f82 configure: Autogenerate default target list
0ded1fe Merge remote-tracking branch 'pmaydell/arm-devs.next' into staging
95669e6 i.MX: Improve EPIT timer code.
6539ed2 exynos4210.c: register rom_mem for memory migration


* QEMU command line:
x86_64-softmmu/qemu-system-x86_64 -enable-kvm -cdrom
/mnt/nfs/Images/ISO/ubuntu-12.04-dvd-amd64.iso

After disable KVM_MEM_READONLY flag like below, VM can boot normally.
     if (err) {

I can provide more details if needed.


> --
>                         Gleb.
>
Jordan Justen - June 4, 2013, 5:03 p.m.
On Tue, Jun 4, 2013 at 1:26 AM, Dunrong Huang <riegamaths@gmail.com> wrote:
> On Tue, Jun 4, 2013 at 3:51 PM, Gleb Natapov <gleb@redhat.com> wrote:
>> On Tue, Jun 04, 2013 at 03:47:47PM +0800, Dunrong Huang wrote:
>> > On Tue, Jun 4, 2013 at 2:47 PM, Paolo Bonzini <pbonzini@redhat.com>
>> > wrote:
>> >
>> > > Il 04/06/2013 05:47, Dunrong Huang ha scritto:
>> > > >
>> > > > QEMU command:
>> > > > ~/usr/bin/qemu-system-x86_64 -enable-kvm -m 1024 debian-append.img
>> > > >
>> > > > git bisect tells that the following commit causes this bug:
>> > > >
>> > > > commit 235e8982ad393e5611cb892df54881c872eea9e1
>> > > > Author: Jordan Justen <jordan.l.justen@intel.com
>> > > > <mailto:jordan.l.justen@intel.com>>
>> > > > Date:   Wed May 29 01:27:26 2013 -0700
>> > > >
>> > > >     kvm: support using KVM_MEM_READONLY flag for regions
>> > > >
>> > > >     For readonly memory regions and rom devices in romd_mode,
>> > > >     we make use of the KVM_MEM_READONLY. A slot that uses
>> > > >     KVM_MEM_READONLY can be read from and code can execute from the
>> > > >     region, but writes will exit to qemu.
>> > > >
>> > > > After reverting this commit, VM can boot normally.
>> > >
>> > > A patch is queued for that.  Using kernel 3.8 or reverting the commit
>> > > will both work.
>> > >
>> > Ok, thanks for information, I will try it.
>> >
>> The fix is 651eb0f4 and you claim it is still fails for you. This is
>> strange because the commit fixed the problem for everyone else. Can you
>> double check that you are testing the right commit and you recompiled
>> and reinstalled?
>
>
> I am sure 651eb0f4 does not fix this problem.
>
> My test environment is below:
>
> * config.log:
> # head -n 2 config.log
> # QEMU configure log 2013年 06月 04日 星期二 16:12:59 CST
> # Configured with: './configure' '--prefix=/root/usr' '--enable-kvm'
> '--enable-werror' '--enable-debug' '--enable-debug-tcg'
> '--enable-debug-info' '--enable-sdl' '--enable-gtk' '--enable-virtfs'
> '--enable-vnc' '--enable-mixemu' '--enable-vnc-tls' '--enable-vnc-sasl'
> '--enable-vnc-jpeg' '--enable-vnc-png' '--enable-vnc-ws' '--enable-curses'
> '--enable-curl' '--enable-nptl' '--enable-system' '--enable-user'
> '--enable-linux-user' '--enable-guest-base' '--enable-uuid' '--enable-vde'
> '--enable-linux-aio' '--enable-cap-ng' '--enable-attr' '--enable-docs'
> '--enable-vhost-net' '--enable-spice' '--enable-usb-redir'
> '--enable-smartcard-nss' '--enable-tpm' '--enable-guest-agent'
> '--target-list=x86_64-softmmu'
>
> * kernel version:
> # uname -a
> Linux gentoo-company 3.8.2-gentoo #1 SMP Fri Mar 8 11:44:36 CST 2013 x86_64
> Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz GenuineIntel GNU/Linux

You were using a >3.8 kernel originally? (Someone mentioned trying a
3.8 kernel, and I think that is when you went to 3.8.)

> * details of git tree:
> # git log HEAD --oneline
> 1713924 gtk: don't use g_object_unref on GdkCursor
> 41686a9 gtk: don't resize window when enabling scaling
> 651eb0f fix double free the memslot in kvm_set_phys_mem
> 25b4833 configure: Report unknown target names more helpfully
> 6e92f82 configure: Autogenerate default target list
> 0ded1fe Merge remote-tracking branch 'pmaydell/arm-devs.next' into staging
> 95669e6 i.MX: Improve EPIT timer code.
> 6539ed2 exynos4210.c: register rom_mem for memory migration
>
>
> * QEMU command line:
> x86_64-softmmu/qemu-system-x86_64 -enable-kvm -cdrom
> /mnt/nfs/Images/ISO/ubuntu-12.04-dvd-amd64.iso

FWIW, I've been able to boot the 11.10 iso when booted to a 3.9 kernel.

Does it only fail after you boot the OS? If you just run KVM without a
disk, so only seabios runs, is it okay?

> After disable KVM_MEM_READONLY flag like below, VM can boot normally.
> diff --git a/kvm-all.c b/kvm-all.c
> index 405480e..c33ba6e 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -774,7 +774,7 @@ static void kvm_set_phys_mem(MemoryRegionSection
> *section, bool add)
>      mem->memory_size = size;
>      mem->start_addr = start_addr;
>      mem->ram = ram;
> -    mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag);
> +    mem->flags = kvm_mem_flags(s, log_dirty, false);
>
>      err = kvm_set_user_memory_region(s, mem);
>      if (err) {
>
> I can provide more details if needed.

I don't think you mentioned how it fails. Does KVM crash? Is an error
message printed? Does the VM reset, or just hang?

-Jordan
dunrong huang - June 5, 2013, 2:44 a.m.
On Wed, Jun 5, 2013 at 1:03 AM, Jordan Justen <jljusten@gmail.com> wrote:

> On Tue, Jun 4, 2013 at 1:26 AM, Dunrong Huang <riegamaths@gmail.com>
> wrote:
> > On Tue, Jun 4, 2013 at 3:51 PM, Gleb Natapov <gleb@redhat.com> wrote:
> >> On Tue, Jun 04, 2013 at 03:47:47PM +0800, Dunrong Huang wrote:
> >> > On Tue, Jun 4, 2013 at 2:47 PM, Paolo Bonzini <pbonzini@redhat.com>
> >> > wrote:
> >> >
> >> > > Il 04/06/2013 05:47, Dunrong Huang ha scritto:
> >> > > >
> >> > > > QEMU command:
> >> > > > ~/usr/bin/qemu-system-x86_64 -enable-kvm -m 1024 debian-append.img
> >> > > >
> >> > > > git bisect tells that the following commit causes this bug:
> >> > > >
> >> > > > commit 235e8982ad393e5611cb892df54881c872eea9e1
> >> > > > Author: Jordan Justen <jordan.l.justen@intel.com
> >> > > > <mailto:jordan.l.justen@intel.com>>
> >> > > > Date:   Wed May 29 01:27:26 2013 -0700
> >> > > >
> >> > > >     kvm: support using KVM_MEM_READONLY flag for regions
> >> > > >
> >> > > >     For readonly memory regions and rom devices in romd_mode,
> >> > > >     we make use of the KVM_MEM_READONLY. A slot that uses
> >> > > >     KVM_MEM_READONLY can be read from and code can execute from
> the
> >> > > >     region, but writes will exit to qemu.
> >> > > >
> >> > > > After reverting this commit, VM can boot normally.
> >> > >
> >> > > A patch is queued for that.  Using kernel 3.8 or reverting the
> commit
> >> > > will both work.
> >> > >
> >> > Ok, thanks for information, I will try it.
> >> >
> >> The fix is 651eb0f4 and you claim it is still fails for you. This is
> >> strange because the commit fixed the problem for everyone else. Can you
> >> double check that you are testing the right commit and you recompiled
> >> and reinstalled?
> >
> >
> > I am sure 651eb0f4 does not fix this problem.
> >
> > My test environment is below:
> >
> > * config.log:
> > # head -n 2 config.log
> > # QEMU configure log 2013年 06月 04日 星期二 16:12:59 CST
> > # Configured with: './configure' '--prefix=/root/usr' '--enable-kvm'
> > '--enable-werror' '--enable-debug' '--enable-debug-tcg'
> > '--enable-debug-info' '--enable-sdl' '--enable-gtk' '--enable-virtfs'
> > '--enable-vnc' '--enable-mixemu' '--enable-vnc-tls' '--enable-vnc-sasl'
> > '--enable-vnc-jpeg' '--enable-vnc-png' '--enable-vnc-ws'
> '--enable-curses'
> > '--enable-curl' '--enable-nptl' '--enable-system' '--enable-user'
> > '--enable-linux-user' '--enable-guest-base' '--enable-uuid'
> '--enable-vde'
> > '--enable-linux-aio' '--enable-cap-ng' '--enable-attr' '--enable-docs'
> > '--enable-vhost-net' '--enable-spice' '--enable-usb-redir'
> > '--enable-smartcard-nss' '--enable-tpm' '--enable-guest-agent'
> > '--target-list=x86_64-softmmu'
> >
> > * kernel version:
> > # uname -a
> > Linux gentoo-company 3.8.2-gentoo #1 SMP Fri Mar 8 11:44:36 CST 2013
> x86_64
> > Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz GenuineIntel GNU/Linux
>
> You were using a >3.8 kernel originally? (Someone mentioned trying a
> 3.8 kernel, and I think that is when you went to 3.8.)
>
> yes, I have been using kernel 3.8.2 lately, not because of Paolo's
suggestion.

> > * details of git tree:
> > # git log HEAD --oneline
> > 1713924 gtk: don't use g_object_unref on GdkCursor
> > 41686a9 gtk: don't resize window when enabling scaling
> > 651eb0f fix double free the memslot in kvm_set_phys_mem
> > 25b4833 configure: Report unknown target names more helpfully
> > 6e92f82 configure: Autogenerate default target list
> > 0ded1fe Merge remote-tracking branch 'pmaydell/arm-devs.next' into
> staging
> > 95669e6 i.MX: Improve EPIT timer code.
> > 6539ed2 exynos4210.c: register rom_mem for memory migration
> >
> >
> > * QEMU command line:
> > x86_64-softmmu/qemu-system-x86_64 -enable-kvm -cdrom
> > /mnt/nfs/Images/ISO/ubuntu-12.04-dvd-amd64.iso
>
> FWIW, I've been able to boot the 11.10 iso when booted to a 3.9 kernel.
>
> Does it only fail after you boot the OS? If you just run KVM without a
> disk, so only seabios runs, is it okay?
>

It fails even runing without any parameters, like:
x86_64-softmmu/qemu-system-x86_64 -enable-kvm

No BIOS information printed, just a black screen is shown.


> > After disable KVM_MEM_READONLY flag like below, VM can boot normally.
> > diff --git a/kvm-all.c b/kvm-all.c
> > index 405480e..c33ba6e 100644
> > --- a/kvm-all.c
> > +++ b/kvm-all.c
> > @@ -774,7 +774,7 @@ static void kvm_set_phys_mem(MemoryRegionSection
> > *section, bool add)
> >      mem->memory_size = size;
> >      mem->start_addr = start_addr;
> >      mem->ram = ram;
> > -    mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag);
> > +    mem->flags = kvm_mem_flags(s, log_dirty, false);
> >
> >      err = kvm_set_user_memory_region(s, mem);
> >      if (err) {
> >
> > I can provide more details if needed.
>
> I don't think you mentioned how it fails. Does KVM crash? Is an error
> message printed? Does the VM reset, or just hang?
>

No QEMU or kvm crashes, no error message printed, I mean it just hangs,
even no BIOS information are printed.
And "top" shows QEMU consumes 100% cpu.

When I define DEBUG_KVM in kvm-all.c, and run QEMU(this time I boot a
normal OS disk),
# x86_64-softmmu/qemu-system-x86_64 -enable-kvm -hda
/mnt/nfs/Images/debian-append.img
kvm_init_vcpu
kvm_cpu_exec()
handle_io
handle_io
handle_io
handle_io

Only 4 debug messages(handle_io) are printed, then nothing is shown, and
"top" shows QEMU process uses 100% CPU.


Another strange thing is that VM can boot normally on my laptop(with a
gentoo kernel 3.8.1 installed and same QEMU binary).
So I suspect the kernel is the root cause of this problem. I will try again
after upgrading kernel to 3.9.


> -Jordan
>
dunrong huang - June 5, 2013, 7:34 a.m.
On Wed, Jun 5, 2013 at 10:44 AM, Dunrong Huang <riegamaths@gmail.com> wrote:

>
>
> On Wed, Jun 5, 2013 at 1:03 AM, Jordan Justen <jljusten@gmail.com> wrote:
>
>> On Tue, Jun 4, 2013 at 1:26 AM, Dunrong Huang <riegamaths@gmail.com>
>> wrote:
>> > On Tue, Jun 4, 2013 at 3:51 PM, Gleb Natapov <gleb@redhat.com> wrote:
>> >> On Tue, Jun 04, 2013 at 03:47:47PM +0800, Dunrong Huang wrote:
>> >> > On Tue, Jun 4, 2013 at 2:47 PM, Paolo Bonzini <pbonzini@redhat.com>
>> >> > wrote:
>> >> >
>> >> > > Il 04/06/2013 05:47, Dunrong Huang ha scritto:
>> >> > > >
>> >> > > > QEMU command:
>> >> > > > ~/usr/bin/qemu-system-x86_64 -enable-kvm -m 1024
>> debian-append.img
>> >> > > >
>> >> > > > git bisect tells that the following commit causes this bug:
>> >> > > >
>> >> > > > commit 235e8982ad393e5611cb892df54881c872eea9e1
>> >> > > > Author: Jordan Justen <jordan.l.justen@intel.com
>> >> > > > <mailto:jordan.l.justen@intel.com>>
>> >> > > > Date:   Wed May 29 01:27:26 2013 -0700
>> >> > > >
>> >> > > >     kvm: support using KVM_MEM_READONLY flag for regions
>> >> > > >
>> >> > > >     For readonly memory regions and rom devices in romd_mode,
>> >> > > >     we make use of the KVM_MEM_READONLY. A slot that uses
>> >> > > >     KVM_MEM_READONLY can be read from and code can execute from
>> the
>> >> > > >     region, but writes will exit to qemu.
>> >> > > >
>> >> > > > After reverting this commit, VM can boot normally.
>> >> > >
>> >> > > A patch is queued for that.  Using kernel 3.8 or reverting the
>> commit
>> >> > > will both work.
>> >> > >
>> >> > Ok, thanks for information, I will try it.
>> >> >
>> >> The fix is 651eb0f4 and you claim it is still fails for you. This is
>> >> strange because the commit fixed the problem for everyone else. Can you
>> >> double check that you are testing the right commit and you recompiled
>> >> and reinstalled?
>> >
>> >
>> > I am sure 651eb0f4 does not fix this problem.
>> >
>> > My test environment is below:
>> >
>> > * config.log:
>> > # head -n 2 config.log
>> > # QEMU configure log 2013年 06月 04日 星期二 16:12:59 CST
>> > # Configured with: './configure' '--prefix=/root/usr' '--enable-kvm'
>> > '--enable-werror' '--enable-debug' '--enable-debug-tcg'
>> > '--enable-debug-info' '--enable-sdl' '--enable-gtk' '--enable-virtfs'
>> > '--enable-vnc' '--enable-mixemu' '--enable-vnc-tls' '--enable-vnc-sasl'
>> > '--enable-vnc-jpeg' '--enable-vnc-png' '--enable-vnc-ws'
>> '--enable-curses'
>> > '--enable-curl' '--enable-nptl' '--enable-system' '--enable-user'
>> > '--enable-linux-user' '--enable-guest-base' '--enable-uuid'
>> '--enable-vde'
>> > '--enable-linux-aio' '--enable-cap-ng' '--enable-attr' '--enable-docs'
>> > '--enable-vhost-net' '--enable-spice' '--enable-usb-redir'
>> > '--enable-smartcard-nss' '--enable-tpm' '--enable-guest-agent'
>> > '--target-list=x86_64-softmmu'
>> >
>> > * kernel version:
>> > # uname -a
>> > Linux gentoo-company 3.8.2-gentoo #1 SMP Fri Mar 8 11:44:36 CST 2013
>> x86_64
>> > Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz GenuineIntel GNU/Linux
>>
>> You were using a >3.8 kernel originally? (Someone mentioned trying a
>> 3.8 kernel, and I think that is when you went to 3.8.)
>>
>> yes, I have been using kernel 3.8.2 lately, not because of Paolo's
> suggestion.
>
>>  > * details of git tree:
>> > # git log HEAD --oneline
>> > 1713924 gtk: don't use g_object_unref on GdkCursor
>> > 41686a9 gtk: don't resize window when enabling scaling
>> > 651eb0f fix double free the memslot in kvm_set_phys_mem
>> > 25b4833 configure: Report unknown target names more helpfully
>> > 6e92f82 configure: Autogenerate default target list
>> > 0ded1fe Merge remote-tracking branch 'pmaydell/arm-devs.next' into
>> staging
>> > 95669e6 i.MX: Improve EPIT timer code.
>> > 6539ed2 exynos4210.c: register rom_mem for memory migration
>> >
>> >
>> > * QEMU command line:
>> > x86_64-softmmu/qemu-system-x86_64 -enable-kvm -cdrom
>> > /mnt/nfs/Images/ISO/ubuntu-12.04-dvd-amd64.iso
>>
>> FWIW, I've been able to boot the 11.10 iso when booted to a 3.9 kernel.
>>
>> Does it only fail after you boot the OS? If you just run KVM without a
>> disk, so only seabios runs, is it okay?
>>
>
> It fails even runing without any parameters, like:
> x86_64-softmmu/qemu-system-x86_64 -enable-kvm
>
> No BIOS information printed, just a black screen is shown.
>
>
>> > After disable KVM_MEM_READONLY flag like below, VM can boot normally.
>> > diff --git a/kvm-all.c b/kvm-all.c
>> > index 405480e..c33ba6e 100644
>> > --- a/kvm-all.c
>> > +++ b/kvm-all.c
>> > @@ -774,7 +774,7 @@ static void kvm_set_phys_mem(MemoryRegionSection
>> > *section, bool add)
>> >      mem->memory_size = size;
>> >      mem->start_addr = start_addr;
>> >      mem->ram = ram;
>> > -    mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag);
>> > +    mem->flags = kvm_mem_flags(s, log_dirty, false);
>> >
>> >      err = kvm_set_user_memory_region(s, mem);
>> >      if (err) {
>> >
>> > I can provide more details if needed.
>>
>> I don't think you mentioned how it fails. Does KVM crash? Is an error
>> message printed? Does the VM reset, or just hang?
>>
>
> No QEMU or kvm crashes, no error message printed, I mean it just hangs,
> even no BIOS information are printed.
> And "top" shows QEMU consumes 100% cpu.
>
> When I define DEBUG_KVM in kvm-all.c, and run QEMU(this time I boot a
> normal OS disk),
> # x86_64-softmmu/qemu-system-x86_64 -enable-kvm -hda
> /mnt/nfs/Images/debian-append.img
> kvm_init_vcpu
> kvm_cpu_exec()
> handle_io
> handle_io
> handle_io
> handle_io
>
> Only 4 debug messages(handle_io) are printed, then nothing is shown, and
> "top" shows QEMU process uses 100% CPU.
>
>
> Another strange thing is that VM can boot normally on my laptop(with a
> gentoo kernel 3.8.1 installed and same QEMU binary).
> So I suspect the kernel is the root cause of this problem. I will try
> again after upgrading kernel to 3.9.
>

After upgrading kernel from 3.8.2 to 3.9.4, this problem goes way. So this
bug must have been fixed in kernel 3.9.

Thank you all for replies!

>
>
>> -Jordan
>>
>
>
>
>
Alexander Graf - July 24, 2013, 9:58 a.m.
On 05.06.2013, at 04:44, Dunrong Huang wrote:

> 
> 
> On Wed, Jun 5, 2013 at 1:03 AM, Jordan Justen <jljusten@gmail.com> wrote:
> On Tue, Jun 4, 2013 at 1:26 AM, Dunrong Huang <riegamaths@gmail.com> wrote:
> > On Tue, Jun 4, 2013 at 3:51 PM, Gleb Natapov <gleb@redhat.com> wrote:
> >> On Tue, Jun 04, 2013 at 03:47:47PM +0800, Dunrong Huang wrote:
> >> > On Tue, Jun 4, 2013 at 2:47 PM, Paolo Bonzini <pbonzini@redhat.com>
> >> > wrote:
> >> >
> >> > > Il 04/06/2013 05:47, Dunrong Huang ha scritto:
> >> > > >
> >> > > > QEMU command:
> >> > > > ~/usr/bin/qemu-system-x86_64 -enable-kvm -m 1024 debian-append.img
> >> > > >
> >> > > > git bisect tells that the following commit causes this bug:
> >> > > >
> >> > > > commit 235e8982ad393e5611cb892df54881c872eea9e1
> >> > > > Author: Jordan Justen <jordan.l.justen@intel.com
> >> > > > <mailto:jordan.l.justen@intel.com>>
> >> > > > Date:   Wed May 29 01:27:26 2013 -0700
> >> > > >
> >> > > >     kvm: support using KVM_MEM_READONLY flag for regions
> >> > > >
> >> > > >     For readonly memory regions and rom devices in romd_mode,
> >> > > >     we make use of the KVM_MEM_READONLY. A slot that uses
> >> > > >     KVM_MEM_READONLY can be read from and code can execute from the
> >> > > >     region, but writes will exit to qemu.
> >> > > >
> >> > > > After reverting this commit, VM can boot normally.
> >> > >
> >> > > A patch is queued for that.  Using kernel 3.8 or reverting the commit
> >> > > will both work.
> >> > >
> >> > Ok, thanks for information, I will try it.
> >> >
> >> The fix is 651eb0f4 and you claim it is still fails for you. This is
> >> strange because the commit fixed the problem for everyone else. Can you
> >> double check that you are testing the right commit and you recompiled
> >> and reinstalled?
> >
> >
> > I am sure 651eb0f4 does not fix this problem.
> >
> > My test environment is below:
> >
> > * config.log:
> > # head -n 2 config.log
> > # QEMU configure log 2013年 06月 04日 星期二 16:12:59 CST
> > # Configured with: './configure' '--prefix=/root/usr' '--enable-kvm'
> > '--enable-werror' '--enable-debug' '--enable-debug-tcg'
> > '--enable-debug-info' '--enable-sdl' '--enable-gtk' '--enable-virtfs'
> > '--enable-vnc' '--enable-mixemu' '--enable-vnc-tls' '--enable-vnc-sasl'
> > '--enable-vnc-jpeg' '--enable-vnc-png' '--enable-vnc-ws' '--enable-curses'
> > '--enable-curl' '--enable-nptl' '--enable-system' '--enable-user'
> > '--enable-linux-user' '--enable-guest-base' '--enable-uuid' '--enable-vde'
> > '--enable-linux-aio' '--enable-cap-ng' '--enable-attr' '--enable-docs'
> > '--enable-vhost-net' '--enable-spice' '--enable-usb-redir'
> > '--enable-smartcard-nss' '--enable-tpm' '--enable-guest-agent'
> > '--target-list=x86_64-softmmu'
> >
> > * kernel version:
> > # uname -a
> > Linux gentoo-company 3.8.2-gentoo #1 SMP Fri Mar 8 11:44:36 CST 2013 x86_64
> > Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz GenuineIntel GNU/Linux
> 
> You were using a >3.8 kernel originally? (Someone mentioned trying a
> 3.8 kernel, and I think that is when you went to 3.8.)
> 
> yes, I have been using kernel 3.8.2 lately, not because of Paolo's suggestion.
> > * details of git tree:
> > # git log HEAD --oneline
> > 1713924 gtk: don't use g_object_unref on GdkCursor
> > 41686a9 gtk: don't resize window when enabling scaling
> > 651eb0f fix double free the memslot in kvm_set_phys_mem
> > 25b4833 configure: Report unknown target names more helpfully
> > 6e92f82 configure: Autogenerate default target list
> > 0ded1fe Merge remote-tracking branch 'pmaydell/arm-devs.next' into staging
> > 95669e6 i.MX: Improve EPIT timer code.
> > 6539ed2 exynos4210.c: register rom_mem for memory migration
> >
> >
> > * QEMU command line:
> > x86_64-softmmu/qemu-system-x86_64 -enable-kvm -cdrom
> > /mnt/nfs/Images/ISO/ubuntu-12.04-dvd-amd64.iso
> 
> FWIW, I've been able to boot the 11.10 iso when booted to a 3.9 kernel.
> 
> Does it only fail after you boot the OS? If you just run KVM without a
> disk, so only seabios runs, is it okay?
>  
> It fails even runing without any parameters, like:
> x86_64-softmmu/qemu-system-x86_64 -enable-kvm
> 
> No BIOS information printed, just a black screen is shown.
> 
> 
> > After disable KVM_MEM_READONLY flag like below, VM can boot normally.
> > diff --git a/kvm-all.c b/kvm-all.c
> > index 405480e..c33ba6e 100644
> > --- a/kvm-all.c
> > +++ b/kvm-all.c
> > @@ -774,7 +774,7 @@ static void kvm_set_phys_mem(MemoryRegionSection
> > *section, bool add)
> >      mem->memory_size = size;
> >      mem->start_addr = start_addr;
> >      mem->ram = ram;
> > -    mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag);
> > +    mem->flags = kvm_mem_flags(s, log_dirty, false);
> >
> >      err = kvm_set_user_memory_region(s, mem);
> >      if (err) {
> >
> > I can provide more details if needed.
> 
> I don't think you mentioned how it fails. Does KVM crash? Is an error
> message printed? Does the VM reset, or just hang?
> 
> No QEMU or kvm crashes, no error message printed, I mean it just hangs, even no BIOS information are printed.
> And "top" shows QEMU consumes 100% cpu.
> 
> When I define DEBUG_KVM in kvm-all.c, and run QEMU(this time I boot a normal OS disk), 
> # x86_64-softmmu/qemu-system-x86_64 -enable-kvm -hda /mnt/nfs/Images/debian-append.img
> kvm_init_vcpu
> kvm_cpu_exec()
> handle_io
> handle_io
> handle_io
> handle_io
> 
> Only 4 debug messages(handle_io) are printed, then nothing is shown, and "top" shows QEMU process uses 100% CPU.

After this we're running in an endless loop of:

 qemu-system-x86-9298  [003] ...1 162090.918845: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
 qemu-system-x86-9298  [003] d..2 162090.918846: kvm_entry: vcpu 0

  (qemu) x /i $pc
  0x00000000000fc489:  ljmpl  $0x8,$0xfc491

With current master, qemu-system-x86_64 -enable-kvm is broken on at least 3.7 kernels (openSUSE 12.3).

Gleb, I don't remember all the glorious details of ljmpl, but would it have to raise an MMIO request for a read-only memory slot which it fails to do?


Alex
Paolo Bonzini - July 24, 2013, 3:16 p.m.
Il 24/07/2013 11:58, Alexander Graf ha scritto:
>> > No QEMU or kvm crashes, no error message printed, I mean it just hangs, even no BIOS information are printed.
>> > And "top" shows QEMU consumes 100% cpu.
>> > 
>> > When I define DEBUG_KVM in kvm-all.c, and run QEMU(this time I boot a normal OS disk), 
>> > # x86_64-softmmu/qemu-system-x86_64 -enable-kvm -hda /mnt/nfs/Images/debian-append.img
>> > kvm_init_vcpu
>> > kvm_cpu_exec()
>> > handle_io
>> > handle_io
>> > handle_io
>> > handle_io
>> > 
>> > Only 4 debug messages(handle_io) are printed, then nothing is shown, and "top" shows QEMU process uses 100% CPU.
> After this we're running in an endless loop of:
> 
>  qemu-system-x86-9298  [003] ...1 162090.918845: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
>  qemu-system-x86-9298  [003] d..2 162090.918846: kvm_entry: vcpu 0
> 
>   (qemu) x /i $pc
>   0x00000000000fc489:  ljmpl  $0x8,$0xfc491
> 
> With current master, qemu-system-x86_64 -enable-kvm is broken on at least 3.7 kernels (openSUSE 12.3).
> 
> Gleb, I don't remember all the glorious details of ljmpl, but would it have to raise an MMIO request for a read-only memory slot which it fails to do?

The point of KVM_CAP_READONLY_MEM should be that it doesn't.

So, even without debugging it, I guess we need a KVM_CAP_READONLY_MEM2
or something like that.

Paolo
Gleb Natapov - July 24, 2013, 3:21 p.m.
On Wed, Jul 24, 2013 at 05:16:09PM +0200, Paolo Bonzini wrote:
> Il 24/07/2013 11:58, Alexander Graf ha scritto:
> >> > No QEMU or kvm crashes, no error message printed, I mean it just hangs, even no BIOS information are printed.
> >> > And "top" shows QEMU consumes 100% cpu.
> >> > 
> >> > When I define DEBUG_KVM in kvm-all.c, and run QEMU(this time I boot a normal OS disk), 
> >> > # x86_64-softmmu/qemu-system-x86_64 -enable-kvm -hda /mnt/nfs/Images/debian-append.img
> >> > kvm_init_vcpu
> >> > kvm_cpu_exec()
> >> > handle_io
> >> > handle_io
> >> > handle_io
> >> > handle_io
> >> > 
> >> > Only 4 debug messages(handle_io) are printed, then nothing is shown, and "top" shows QEMU process uses 100% CPU.
> > After this we're running in an endless loop of:
> > 
> >  qemu-system-x86-9298  [003] ...1 162090.918845: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
> >  qemu-system-x86-9298  [003] d..2 162090.918846: kvm_entry: vcpu 0
> > 
> >   (qemu) x /i $pc
> >   0x00000000000fc489:  ljmpl  $0x8,$0xfc491
> > 
> > With current master, qemu-system-x86_64 -enable-kvm is broken on at least 3.7 kernels (openSUSE 12.3).
> > 
> > Gleb, I don't remember all the glorious details of ljmpl, but would it have to raise an MMIO request for a read-only memory slot which it fails to do?
> 
> The point of KVM_CAP_READONLY_MEM should be that it doesn't.
> 
Yes, it should not. Can you provide complete trace of kvm and kvmmmu
event up until failure?

--
			Gleb.
Alexander Graf - July 24, 2013, 3:31 p.m.
On 07/24/2013 05:21 PM, Gleb Natapov wrote:
> On Wed, Jul 24, 2013 at 05:16:09PM +0200, Paolo Bonzini wrote:
>> Il 24/07/2013 11:58, Alexander Graf ha scritto:
>>>>> No QEMU or kvm crashes, no error message printed, I mean it just hangs, even no BIOS information are printed.
>>>>> And "top" shows QEMU consumes 100% cpu.
>>>>>
>>>>> When I define DEBUG_KVM in kvm-all.c, and run QEMU(this time I boot a normal OS disk),
>>>>> # x86_64-softmmu/qemu-system-x86_64 -enable-kvm -hda /mnt/nfs/Images/debian-append.img
>>>>> kvm_init_vcpu
>>>>> kvm_cpu_exec()
>>>>> handle_io
>>>>> handle_io
>>>>> handle_io
>>>>> handle_io
>>>>>
>>>>> Only 4 debug messages(handle_io) are printed, then nothing is shown, and "top" shows QEMU process uses 100% CPU.
>>> After this we're running in an endless loop of:
>>>
>>>   qemu-system-x86-9298  [003] ...1 162090.918845: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
>>>   qemu-system-x86-9298  [003] d..2 162090.918846: kvm_entry: vcpu 0
>>>
>>>    (qemu) x /i $pc
>>>    0x00000000000fc489:  ljmpl  $0x8,$0xfc491
>>>
>>> With current master, qemu-system-x86_64 -enable-kvm is broken on at least 3.7 kernels (openSUSE 12.3).
>>>
>>> Gleb, I don't remember all the glorious details of ljmpl, but would it have to raise an MMIO request for a read-only memory slot which it fails to do?
>> The point of KVM_CAP_READONLY_MEM should be that it doesn't.
>>
> Yes, it should not. Can you provide complete trace of kvm and kvmmmu
> event up until failure?

Sure! These are all trace events up to the loop that I was able to fetch 
from the "kvm" and "kvmmmu" event bucket in /sys/kernel/debug/tracing.


  qemu-system-x86-13149 [001] ...1 185370.437938: kvm_set_irq: gsi 8 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.437942: kvm_pic_set_irq: chip 
1 pin 0 (edge)
  qemu-system-x86-13149 [001] ...2 185370.437943: kvm_ioapic_set_irq: 
pin 8 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13149 [001] ...1 185370.437945: kvm_set_irq: gsi 4 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.437946: kvm_pic_set_irq: chip 
0 pin 4 (edge)
  qemu-system-x86-13149 [001] ...2 185370.437946: kvm_ioapic_set_irq: 
pin 4 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13149 [001] ...1 185370.437947: kvm_set_irq: gsi 1 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.437947: kvm_pic_set_irq: chip 
0 pin 1 (edge)
  qemu-system-x86-13149 [001] ...2 185370.437948: kvm_ioapic_set_irq: 
pin 1 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13149 [001] ...1 185370.437948: kvm_set_irq: gsi 12 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.437948: kvm_pic_set_irq: chip 
1 pin 4 (edge)
  qemu-system-x86-13149 [001] ...2 185370.437949: kvm_ioapic_set_irq: 
pin 12 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13149 [001] ...1 185370.437949: kvm_set_irq: gsi 1 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.437949: kvm_pic_set_irq: chip 
0 pin 1 (edge)
  qemu-system-x86-13149 [001] ...2 185370.437949: kvm_ioapic_set_irq: 
pin 1 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13149 [001] ...1 185370.437950: kvm_set_irq: gsi 12 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.437950: kvm_pic_set_irq: chip 
1 pin 4 (edge)
  qemu-system-x86-13149 [001] ...2 185370.437950: kvm_ioapic_set_irq: 
pin 12 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13149 [001] ...1 185370.438050: kvm_set_irq: gsi 0 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.438051: kvm_pic_set_irq: chip 
0 pin 0 (edge)
  qemu-system-x86-13149 [001] ...2 185370.438051: kvm_ioapic_set_irq: 
pin 2 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13149 [001] ...1 185370.438052: kvm_set_irq: gsi 0 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.438052: kvm_pic_set_irq: chip 
0 pin 0 (edge)
  qemu-system-x86-13149 [001] ...2 185370.438052: kvm_ioapic_set_irq: 
pin 2 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13149 [001] ...1 185370.438052: kvm_set_irq: gsi 0 
level 0 source 0
  qemu-system-x86-13149 [001] ...2 185370.438053: kvm_pic_set_irq: chip 
0 pin 0 (edge)
  qemu-system-x86-13149 [001] ...2 185370.438053: kvm_ioapic_set_irq: 
pin 2 dst 0 vec=0 (Fixed|physical|edge|masked)
  qemu-system-x86-13150 [000] ...2 185370.441730: kvm_mmu_get_page: sp 
gfn 0 4 q0 direct wux !nxe root 0 sync new
  qemu-system-x86-13150 [000] ...2 185370.441734: kvm_fpu: load
  qemu-system-x86-13150 [000] d..2 185370.441734: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441738: kvm_exit: reason 
EPT_VIOLATION rip 0xfff0 info 81 0
  qemu-system-x86-13150 [000] ...1 185370.441739: kvm_page_fault: 
address feffc000 error_code 81
  qemu-system-x86-13150 [000] ...2 185370.441746: kvm_mmu_get_page: sp 
gfn 0 3 q0 direct wux !nxe root 0 sync new
  qemu-system-x86-13150 [000] ...2 185370.441748: kvm_mmu_get_page: sp 
gfn c0000 2 q0 direct wux !nxe root 0 sync new
  qemu-system-x86-13150 [000] ...2 185370.441749: kvm_mmu_get_page: sp 
gfn fee00 1 q0 direct wux !nxe root 0 sync new
  qemu-system-x86-13150 [000] d..2 185370.441752: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441757: kvm_exit: reason 
EPT_VIOLATION rip 0xfff0 info 184 0
  qemu-system-x86-13150 [000] ...1 185370.441757: kvm_page_fault: 
address ffff0 error_code 184
  qemu-system-x86-13150 [000] ...2 185370.441760: kvm_mmu_get_page: sp 
gfn 0 2 q0 direct wux !nxe root 0 sync new
  qemu-system-x86-13150 [000] ...2 185370.441761: kvm_mmu_get_page: sp 
gfn 0 1 q0 direct wux !nxe root 0 sync new
  qemu-system-x86-13150 [000] d..2 185370.441762: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441763: kvm_exit: reason 
EPT_VIOLATION rip 0xe05b info 184 0
  qemu-system-x86-13150 [000] ...1 185370.441763: kvm_page_fault: 
address fe05b error_code 184
  qemu-system-x86-13150 [000] d..2 185370.441764: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441765: kvm_exit: reason 
EPT_VIOLATION rip 0xe05b info 181 0
  qemu-system-x86-13150 [000] ...1 185370.441765: kvm_page_fault: 
address fd094 error_code 181
  qemu-system-x86-13150 [000] d..2 185370.441766: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441767: kvm_exit: reason 
EPT_VIOLATION rip 0xc45e info 184 0
  qemu-system-x86-13150 [000] ...1 185370.441767: kvm_page_fault: 
address fc45e error_code 184
  qemu-system-x86-13150 [000] d..2 185370.441768: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441769: kvm_exit: reason 
EPT_VIOLATION rip 0xc469 info 181 0
  qemu-system-x86-13150 [000] ...1 185370.441769: kvm_page_fault: 
address feffd066 error_code 181
  qemu-system-x86-13150 [000] d..2 185370.441771: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441772: kvm_exit: reason 
IO_INSTRUCTION rip 0xc469 info 700040 0
  qemu-system-x86-13150 [000] ...1 185370.441773: kvm_pio: pio_write at 
0x70 size 1 count 1
  qemu-system-x86-13150 [000] ...1 185370.441775: kvm_userspace_exit: 
reason KVM_EXIT_IO (2)
  qemu-system-x86-13150 [000] ...2 185370.441776: kvm_fpu: unload
  qemu-system-x86-13150 [000] d..2 185370.441787: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441788: kvm_exit: reason 
IO_INSTRUCTION rip 0xc46b info 710048 0
  qemu-system-x86-13150 [000] ...1 185370.441794: kvm_emulate_insn: 
f0000:c46b:e4 71 (real)
  qemu-system-x86-13150 [000] ...1 185370.441796: kvm_pio: pio_read at 
0x71 size 1 count 1
  qemu-system-x86-13150 [000] ...1 185370.441797: kvm_userspace_exit: 
reason KVM_EXIT_IO (2)
  qemu-system-x86-13150 [000] d..2 185370.441804: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441805: kvm_exit: reason 
IO_INSTRUCTION rip 0xc46d info 920048 0
  qemu-system-x86-13150 [000] ...1 185370.441806: kvm_emulate_insn: 
f0000:c46d:e4 92 (real)
  qemu-system-x86-13150 [000] ...1 185370.441807: kvm_pio: pio_read at 
0x92 size 1 count 1
  qemu-system-x86-13150 [000] ...1 185370.441807: kvm_userspace_exit: 
reason KVM_EXIT_IO (2)
  qemu-system-x86-13150 [000] d..2 185370.441810: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441811: kvm_exit: reason 
IO_INSTRUCTION rip 0xc471 info 920040 0
  qemu-system-x86-13150 [000] ...1 185370.441811: kvm_pio: pio_write at 
0x92 size 1 count 1
  qemu-system-x86-13150 [000] ...1 185370.441811: kvm_userspace_exit: 
reason KVM_EXIT_IO (2)
  qemu-system-x86-13150 [000] d..2 185370.441813: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441814: kvm_exit: reason 
EXCEPTION_NMI rip 0xc473 info 0 80000b0d
  qemu-system-x86-13150 [000] ...1 185370.441817: kvm_emulate_insn: 
f0000:c473:2e 0f 01 1e e0 d3 (real)
  qemu-system-x86-13150 [000] d..2 185370.441819: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441820: kvm_exit: reason 
EXCEPTION_NMI rip 0xc479 info 0 80000b0d
  qemu-system-x86-13150 [000] ...1 185370.441821: kvm_emulate_insn: 
f0000:c479:2e 0f 01 16 a0 d3 (real)
  qemu-system-x86-13150 [000] d..2 185370.441822: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441823: kvm_exit: reason 
EXCEPTION_NMI rip 0xc47f info 0 80000b0d
  qemu-system-x86-13150 [000] ...1 185370.441824: kvm_emulate_insn: 
f0000:c47f:0f 20 c0 (real)
  qemu-system-x86-13150 [000] d..2 185370.441825: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] d..2 185370.441826: kvm_exit: reason 
EXCEPTION_NMI rip 0xc486 info 0 80000b0d
  qemu-system-x86-13150 [000] ...1 185370.441826: kvm_emulate_insn: 
f0000:c486:0f 22 c0 (real)
  qemu-system-x86-13150 [000] d..2 185370.441829: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] ...1 185370.441830: kvm_emulate_insn: 
f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
  qemu-system-x86-13150 [000] d..2 185370.441833: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] ...1 185370.441833: kvm_emulate_insn: 
f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
  qemu-system-x86-13150 [000] d..2 185370.441834: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] ...1 185370.441835: kvm_emulate_insn: 
f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
  qemu-system-x86-13150 [000] d..2 185370.441835: kvm_entry: vcpu 0
  qemu-system-x86-13150 [000] ...1 185370.441836: kvm_emulate_insn: 
f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
  qemu-system-x86-13150 [000] d..2 185370.441836: kvm_entry: vcpu 0
[...]


Alex
Gleb Natapov - July 24, 2013, 4:17 p.m.
On Wed, Jul 24, 2013 at 05:31:14PM +0200, Alexander Graf wrote:
> On 07/24/2013 05:21 PM, Gleb Natapov wrote:
> >On Wed, Jul 24, 2013 at 05:16:09PM +0200, Paolo Bonzini wrote:
> >>Il 24/07/2013 11:58, Alexander Graf ha scritto:
> >>>>>No QEMU or kvm crashes, no error message printed, I mean it just hangs, even no BIOS information are printed.
> >>>>>And "top" shows QEMU consumes 100% cpu.
> >>>>>
> >>>>>When I define DEBUG_KVM in kvm-all.c, and run QEMU(this time I boot a normal OS disk),
> >>>>># x86_64-softmmu/qemu-system-x86_64 -enable-kvm -hda /mnt/nfs/Images/debian-append.img
> >>>>>kvm_init_vcpu
> >>>>>kvm_cpu_exec()
> >>>>>handle_io
> >>>>>handle_io
> >>>>>handle_io
> >>>>>handle_io
> >>>>>
> >>>>>Only 4 debug messages(handle_io) are printed, then nothing is shown, and "top" shows QEMU process uses 100% CPU.
> >>>After this we're running in an endless loop of:
> >>>
> >>>  qemu-system-x86-9298  [003] ...1 162090.918845: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
> >>>  qemu-system-x86-9298  [003] d..2 162090.918846: kvm_entry: vcpu 0
> >>>
> >>>   (qemu) x /i $pc
> >>>   0x00000000000fc489:  ljmpl  $0x8,$0xfc491
> >>>
> >>>With current master, qemu-system-x86_64 -enable-kvm is broken on at least 3.7 kernels (openSUSE 12.3).
> >>>
> >>>Gleb, I don't remember all the glorious details of ljmpl, but would it have to raise an MMIO request for a read-only memory slot which it fails to do?
> >>The point of KVM_CAP_READONLY_MEM should be that it doesn't.
> >>
> >Yes, it should not. Can you provide complete trace of kvm and kvmmmu
> >event up until failure?
> 
> Sure! These are all trace events up to the loop that I was able to
> fetch from the "kvm" and "kvmmmu" event bucket in
> /sys/kernel/debug/tracing.
> 
You should start using trace-cmd :) It even disassembles for you.

>  qemu-system-x86-13150 [000] d..2 185370.441825: kvm_entry: vcpu 0
>  qemu-system-x86-13150 [000] d..2 185370.441826: kvm_exit: reason EXCEPTION_NMI rip 0xc486 info 0 80000b0d
>  qemu-system-x86-13150 [000] ...1 185370.441826: kvm_emulate_insn: f0000:c486:0f 22 c0 (real)
This mov CR0 that sets PE bit.

>  qemu-system-x86-13150 [000] d..2 185370.441829: kvm_entry: vcpu 0
>  qemu-system-x86-13150 [000] ...1 185370.441830: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
Here jmp is emulated because vcpu state is invalid, but for some reason
emulation does not fail and does not succeed. Never saw such thing
before. Are you saying configuring BIOS memslot differently solves the
problem?
 
>  qemu-system-x86-13150 [000] d..2 185370.441833: kvm_entry: vcpu 0
>  qemu-system-x86-13150 [000] ...1 185370.441833: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
>  qemu-system-x86-13150 [000] d..2 185370.441834: kvm_entry: vcpu 0
>  qemu-system-x86-13150 [000] ...1 185370.441835: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
>  qemu-system-x86-13150 [000] d..2 185370.441835: kvm_entry: vcpu 0
>  qemu-system-x86-13150 [000] ...1 185370.441836: kvm_emulate_insn: f0000:c489:66 ea 91 c4 0f 00 08 00 (prot16)
>  qemu-system-x86-13150 [000] d..2 185370.441836: kvm_entry: vcpu 0

--
			Gleb.

Patch

diff --git a/kvm-all.c b/kvm-all.c
index 405480e..c33ba6e 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -774,7 +774,7 @@  static void kvm_set_phys_mem(MemoryRegionSection
*section, bool add)
     mem->memory_size = size;
     mem->start_addr = start_addr;
     mem->ram = ram;
-    mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag);
+    mem->flags = kvm_mem_flags(s, log_dirty, false);

     err = kvm_set_user_memory_region(s, mem);