Message ID | 1470197053-3581-1-git-send-email-wanpeng.li@hotmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
2016-08-03 12:04+0800, Wanpeng Li: > From: Wanpeng Li <wanpeng.li@hotmail.com> > > BUG: unable to handle kernel NULL pointer dereference at 000000000000008c > IP: [<ffffffffc04e0180>] kvm_lapic_hv_timer_in_use+0x10/0x20 [kvm] > PGD 0 > Oops: 0000 [#1] SMP > Call Trace: > kvm_arch_vcpu_load+0x86/0x260 [kvm] > vcpu_load+0x46/0x60 [kvm] > kvm_vcpu_ioctl+0x79/0x7c0 [kvm] > ? __lock_is_held+0x54/0x70 > do_vfs_ioctl+0x96/0x6a0 > ? __fget_light+0x2a/0x90 > SyS_ioctl+0x79/0x90 > do_syscall_64+0x7c/0x1e0 > entry_SYSCALL64_slow_path+0x25/0x25 > RIP [<ffffffffc04e0180>] kvm_lapic_hv_timer_in_use+0x10/0x20 [kvm] > RSP <ffff8800db1f3d70> > CR2: 000000000000008c > ---[ end trace a55fb79d2b3b4ee8 ]--- > > This can be reproduced steadily by kernel_irqchip=off. > > We should not access preemption timer stuff if lapic is emulated in userspace. > This patch fix it by avoiding access preemption timer stuff when kernel_irqchip=off. > > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Radim Krčmář <rkrcmar@redhat.com> > Cc: Yunhong Jiang <yunhong.jiang@intel.com> > Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> > --- Reviewed-by: Radim Krčmář <rkrcmar@redhat.com> > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > @@ -1348,6 +1348,9 @@ static void start_sw_tscdeadline(struct kvm_lapic *apic) > > bool kvm_lapic_hv_timer_in_use(struct kvm_vcpu *vcpu) Btw, the "hv" in makes it look like it has something to do with Hyper-V. What does "hv" stand for anyway? Hardware Virtualized? Thanks. > { > + if (!lapic_in_kernel(vcpu)) > + return false; > + > return vcpu->arch.apic->lapic_timer.hv_timer_in_use; > } > EXPORT_SYMBOL_GPL(kvm_lapic_hv_timer_in_use); -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
2016-08-03 17:55 GMT+08:00 Radim Krčmář <rkrcmar@redhat.com>: > 2016-08-03 12:04+0800, Wanpeng Li: >> From: Wanpeng Li <wanpeng.li@hotmail.com> >> >> BUG: unable to handle kernel NULL pointer dereference at 000000000000008c >> IP: [<ffffffffc04e0180>] kvm_lapic_hv_timer_in_use+0x10/0x20 [kvm] >> PGD 0 >> Oops: 0000 [#1] SMP >> Call Trace: >> kvm_arch_vcpu_load+0x86/0x260 [kvm] >> vcpu_load+0x46/0x60 [kvm] >> kvm_vcpu_ioctl+0x79/0x7c0 [kvm] >> ? __lock_is_held+0x54/0x70 >> do_vfs_ioctl+0x96/0x6a0 >> ? __fget_light+0x2a/0x90 >> SyS_ioctl+0x79/0x90 >> do_syscall_64+0x7c/0x1e0 >> entry_SYSCALL64_slow_path+0x25/0x25 >> RIP [<ffffffffc04e0180>] kvm_lapic_hv_timer_in_use+0x10/0x20 [kvm] >> RSP <ffff8800db1f3d70> >> CR2: 000000000000008c >> ---[ end trace a55fb79d2b3b4ee8 ]--- >> >> This can be reproduced steadily by kernel_irqchip=off. >> >> We should not access preemption timer stuff if lapic is emulated in userspace. >> This patch fix it by avoiding access preemption timer stuff when kernel_irqchip=off. >> >> Cc: Paolo Bonzini <pbonzini@redhat.com> >> Cc: Radim Krčmář <rkrcmar@redhat.com> >> Cc: Yunhong Jiang <yunhong.jiang@intel.com> >> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> >> --- > > Reviewed-by: Radim Krčmář <rkrcmar@redhat.com> > >> diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c >> @@ -1348,6 +1348,9 @@ static void start_sw_tscdeadline(struct kvm_lapic *apic) >> >> bool kvm_lapic_hv_timer_in_use(struct kvm_vcpu *vcpu) > > Btw, the "hv" in makes it look like it has something to do with Hyper-V. > What does "hv" stand for anyway? Hardware Virtualized? Hmm, yeah, hv_timer make people confusing. http://www.spinics.net/lists/kvm/msg134205.html Regards, Wanpeng Li -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 03/08/2016 06:04, Wanpeng Li wrote: > From: Wanpeng Li <wanpeng.li@hotmail.com> > > BUG: unable to handle kernel NULL pointer dereference at 000000000000008c > IP: [<ffffffffc04e0180>] kvm_lapic_hv_timer_in_use+0x10/0x20 [kvm] > PGD 0 > Oops: 0000 [#1] SMP > Call Trace: > kvm_arch_vcpu_load+0x86/0x260 [kvm] > vcpu_load+0x46/0x60 [kvm] > kvm_vcpu_ioctl+0x79/0x7c0 [kvm] > ? __lock_is_held+0x54/0x70 > do_vfs_ioctl+0x96/0x6a0 > ? __fget_light+0x2a/0x90 > SyS_ioctl+0x79/0x90 > do_syscall_64+0x7c/0x1e0 > entry_SYSCALL64_slow_path+0x25/0x25 > RIP [<ffffffffc04e0180>] kvm_lapic_hv_timer_in_use+0x10/0x20 [kvm] > RSP <ffff8800db1f3d70> > CR2: 000000000000008c > ---[ end trace a55fb79d2b3b4ee8 ]--- > > This can be reproduced steadily by kernel_irqchip=off. > > We should not access preemption timer stuff if lapic is emulated in userspace. > This patch fix it by avoiding access preemption timer stuff when kernel_irqchip=off. > > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Radim Krčmář <rkrcmar@redhat.com> > Cc: Yunhong Jiang <yunhong.jiang@intel.com> > Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> > --- > arch/x86/kvm/lapic.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > index 6895fd2..0120a58 100644 > --- a/arch/x86/kvm/lapic.c > +++ b/arch/x86/kvm/lapic.c > @@ -1348,6 +1348,9 @@ static void start_sw_tscdeadline(struct kvm_lapic *apic) > > bool kvm_lapic_hv_timer_in_use(struct kvm_vcpu *vcpu) > { > + if (!lapic_in_kernel(vcpu)) > + return false; > + > return vcpu->arch.apic->lapic_timer.hv_timer_in_use; > } > EXPORT_SYMBOL_GPL(kvm_lapic_hv_timer_in_use); > Applied patch 1, while 2 will wait for 4.9. Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 6895fd2..0120a58 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -1348,6 +1348,9 @@ static void start_sw_tscdeadline(struct kvm_lapic *apic) bool kvm_lapic_hv_timer_in_use(struct kvm_vcpu *vcpu) { + if (!lapic_in_kernel(vcpu)) + return false; + return vcpu->arch.apic->lapic_timer.hv_timer_in_use; } EXPORT_SYMBOL_GPL(kvm_lapic_hv_timer_in_use);