On 21.03.2017 05:18, Wanpeng Li wrote: > From: Wanpeng Li <wanpeng.li@xxxxxxxxxxx> > > After async pf setup successfully, there is a broadcast wakeup w/ special > token 0xffffffff which tells vCPU that it should wake up all processes > waiting for APFs though there is no real process waiting at the moment. > > The async page present tracepoint print prematurely and fails to catch the > special token setup. This patch fixes it by moving the async page present > tracepoint after the special token setup. > > Before patch: > > qemu-system-x86-8499 [006] ...1 5973.473292: kvm_async_pf_ready: token 0x0 gva 0x0 > > After patch: > > qemu-system-x86-8499 [006] ...1 5973.473292: kvm_async_pf_ready: token 0xffffffff gva 0x0 > Wonder if there is a reason why this is traced before any work is done. Maybe we should keep that order (by breaking up the if-else). > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: Radim Krčmář <rkrcmar@xxxxxxxxxx> > Signed-off-by: Wanpeng Li <wanpeng.li@xxxxxxxxxxx> > --- > arch/x86/kvm/x86.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 1faf620..e27eb7f 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -8566,11 +8566,11 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu, > { > struct x86_exception fault; > > - trace_kvm_async_pf_ready(work->arch.token, work->gva); > if (work->wakeup_all) > work->arch.token = ~0; /* broadcast wakeup */ > else > kvm_del_async_pf_gfn(vcpu, work->arch.gfn); > + trace_kvm_async_pf_ready(work->arch.token, work->gva); > > if ((vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED) && > !apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) { > -- Thanks, David