2016-05-02 18:42 GMT+08:00 Christian Borntraeger <borntraeger@xxxxxxxxxx>: [...] > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 9102ae1..d63ea60 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -2008,7 +2008,8 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu) > * arrives. > */ > if (kvm_vcpu_check_block(vcpu) < 0) { > - ++vcpu->stat.halt_successful_poll; > + if (vcpu_valid_wakeup(vcpu)) > + ++vcpu->stat.halt_successful_poll; > goto out; > } > cur = ktime_get(); > @@ -2038,14 +2039,16 @@ out: > if (block_ns <= vcpu->halt_poll_ns) > ; > /* we had a long block, shrink polling */ > - else if (vcpu->halt_poll_ns && block_ns > halt_poll_ns) > + else if (!vcpu_valid_wakeup(vcpu) || > + (vcpu->halt_poll_ns && block_ns > halt_poll_ns)) > shrink_halt_poll_ns(vcpu); > /* we had a short halt and our poll time is too small */ > else if (vcpu->halt_poll_ns < halt_poll_ns && > - block_ns < halt_poll_ns) > + block_ns < halt_poll_ns && vcpu_valid_wakeup(vcpu)) > grow_halt_poll_ns(vcpu); > } else > vcpu->halt_poll_ns = 0; > + vcpu_reset_wakeup(vcpu); Why mark the next wakeup as a non-sucessful poll? Regards, Wanpeng Li -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html