On 01/11/18 18:48 +0800, Wanpeng Li wrote: > 2018-01-10 21:44 GMT+08:00 Haozhong Zhang <haozhong.zhang@xxxxxxxxx>: > > When a guest expection is already pending, injecting APF may result in > > guest #DF. > > > > For example, when two APF's for page ready happen after an exit, the > > first APF will be pending. If injecting the second one regardless of > > the pending one, the second APF injection will be converted an > > injection of #DF. > > Thanks for the fix, I think the codes look good, but the patch > description maybe not. Inject two async pfs after one vmexit will not > happen after this commit > https://git.kernel.org/pub/scm/virt/kvm/kvm.git/commit/?h=queue&id=9a6e7c39810e4a8bc7fc95056cefb40583fe07ef That patch does not exclude the case that the exit is caused by EPT violation, i.e., no APF for page not present happened before the injections of consequent APF's for page ready. Perhaps my commit message should say "For example, when two APF's for page ready happen after one exit and the first one gets pending, injecting the second one regardless of the pending one will result in an injection of #DF." Haozhong > > Regards, > Wanpeng Li > > > > > Reported-by: Ross Zwisler <zwisler@xxxxxxxxx> > > Message-ID: <CAOxpaSUBf8QoOZQ1p4KfUp0jq76OKfGY4Uxs-Gg8ngReD99xww@xxxxxxxxxxxxxx> > > Reported-by: Alec Blayne <ab@xxxxxxxxx> > > Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx> > > --- > > arch/x86/kvm/mmu.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c > > index 89da688784fa..a8d0230ea40d 100644 > > --- a/arch/x86/kvm/mmu.c > > +++ b/arch/x86/kvm/mmu.c > > @@ -3781,7 +3781,8 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn) > > bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu) > > { > > if (unlikely(!lapic_in_kernel(vcpu) || > > - kvm_event_needs_reinjection(vcpu))) > > + kvm_event_needs_reinjection(vcpu) || > > + vcpu->arch.exception.pending)) > > return false; > > > > if (!vcpu->arch.apf.delivery_as_pf_vmexit && is_guest_mode(vcpu)) > > -- > > 2.14.1 > >