KVM: Update halt-polling stats if and only if halt-polling was attempted
authorSean Christopherson <seanjc@google.com>
Sat, 9 Oct 2021 02:11:58 +0000 (19:11 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 8 Dec 2021 09:24:47 +0000 (04:24 -0500)
Don't update halt-polling stats if halt-polling wasn't attempted.  This is
a nop as @poll_ns is guaranteed to be '0' (poll_end == start); in a future
patch (to move the histogram stats into the helper), it will avoid to
avoid a discrepancy in what is considered a "successful" halt-poll.

No functional change intended.

Reviewed-by: David Matlack <dmatlack@google.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20211009021236.4122790-6-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
virt/kvm/kvm_main.c

index 11db44f..1a15043 100644 (file)
@@ -3288,6 +3288,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
 {
        struct rcuwait *wait = kvm_arch_vcpu_get_wait(vcpu);
        bool halt_poll_allowed = !kvm_arch_no_poll(vcpu);
+       bool do_halt_poll = halt_poll_allowed && vcpu->halt_poll_ns;
        ktime_t start, cur, poll_end;
        bool waited = false;
        u64 block_ns;
@@ -3295,7 +3296,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
        kvm_arch_vcpu_blocking(vcpu);
 
        start = cur = poll_end = ktime_get();
-       if (vcpu->halt_poll_ns && halt_poll_allowed) {
+       if (do_halt_poll) {
                ktime_t stop = ktime_add_ns(ktime_get(), vcpu->halt_poll_ns);
 
                ++vcpu->stat.generic.halt_attempted_poll;
@@ -3347,8 +3348,9 @@ out:
        kvm_arch_vcpu_unblocking(vcpu);
        block_ns = ktime_to_ns(cur) - ktime_to_ns(start);
 
-       update_halt_poll_stats(
-               vcpu, ktime_to_ns(ktime_sub(poll_end, start)), waited);
+       if (do_halt_poll)
+               update_halt_poll_stats(
+                       vcpu, ktime_to_ns(ktime_sub(poll_end, start)), waited);
 
        if (halt_poll_allowed) {
                if (!vcpu_valid_wakeup(vcpu)) {