Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1489649
| From | Radim Krčmář <rkrcmar@redhat.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH v2] KVM: nVMX: Fix the NMI IDT-vectoring handling |
| Date | 2016-09-23 01:20 +0200 |
| Message-ID | <sklrA-4iR-23@gated-at.bofh.it> (permalink) |
| References | <sk8Xn-4DU-5@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
2016-09-22 17:55+0800, Wanpeng Li: > From: Wanpeng Li <wanpeng.li@hotmail.com> > > Run kvm-unit-tests/eventinj.flat in L1: > > Sending NMI to self > After NMI to self > FAIL: NMI > > This test scenario is to test whether VMM can handle NMI IDT-vectoring info correctly. > > At the beginning, L2 writes LAPIC to send a self NMI, the EPT page tables on both L1 > and L0 are empty so: > > - The L2 accesses memory can generate EPT violation which can be intercepted by L0. > > The EPT violation vmexit occurred during delivery of this NMI, and the NMI info is > recorded in vmcs02's IDT-vectoring info. > > - L0 walks L1's EPT12 and L0 sees the mapping is invalid, it injects the EPT violation into L1. > > The vmcs02's IDT-vectoring info is reflected to vmcs12's IDT-vectoring info since > it is a nested vmexit. > > - L1 receives the EPT violation, then fixes its EPT12. > - L1 executes VMRESUME to resume L2 which generates vmexit and causes L1 exits to L0. > - L0 emulates VMRESUME which is called from L1, then return to L2. > > L0 merges the requirement of vmcs12's IDT-vectoring info and injects it to L2 through > vmcs02. > > - The L2 re-executes the fault instruction and cause EPT violation again. > - Since the L1's EPT12 is valid, L0 can fix its EPT02 > - L0 resume L2 > > The EPT violation vmexit occurred during delivery of this NMI again, and the NMI info > is recorded in vmcs02's IDT-vectoring info. L0 should inject the NMI through vmentry > event injection since it is caused by EPT02's EPT violation. > > However, vmx_inject_nmi() refuses to inject NMI from IDT-vectoring info if vCPU is in > guest mode, this patch fix it by permitting to inject NMI from IDT-vectoring if it is > the L0's responsibility to inject NMI from IDT-vectoring info to L2. > > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Radim Krčmář <rkrcmar@redhat.com> > Cc: Jan Kiszka <jan.kiszka@siemens.com> > Cc: Bandan Das <bsd@redhat.com> > Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> > --- Applied to kvm/queue, thanks.
Back to linux.kernel | Previous | Next — Previous in thread | Find similar | Unroll thread
[PATCH v2] KVM: nVMX: Fix the NMI IDT-vectoring handling Wanpeng Li <kernellwp@gmail.com> - 2016-09-22 12:00 +0200 Re: [PATCH v2] KVM: nVMX: Fix the NMI IDT-vectoring handling Radim Krčmář <rkrcmar@redhat.com> - 2016-09-23 01:20 +0200
csiph-web