KVM: stats: Separate generic stats from architecture specific ones
authorJing Zhang <jingzhangos@google.com>
Fri, 18 Jun 2021 22:27:03 +0000 (22:27 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 24 Jun 2021 15:47:56 +0000 (11:47 -0400)
Generic KVM stats are those collected in architecture independent code
or those supported by all architectures; put all generic statistics in
a separate structure.  This ensures that they are defined the same way
in the statistics API which is being added, removing duplication among
different architectures in the declaration of the descriptors.

No functional change intended.

Reviewed-by: David Matlack <dmatlack@google.com>
Reviewed-by: Ricardo Koller <ricarkol@google.com>
Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
Signed-off-by: Jing Zhang <jingzhangos@google.com>
Message-Id: <20210618222709.1858088-2-jingzhangos@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
16 files changed:
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/guest.c
arch/mips/include/asm/kvm_host.h
arch/mips/kvm/mips.c
arch/powerpc/include/asm/kvm_host.h
arch/powerpc/kvm/book3s.c
arch/powerpc/kvm/book3s_hv.c
arch/powerpc/kvm/book3s_pr.c
arch/powerpc/kvm/book3s_pr_papr.c
arch/powerpc/kvm/booke.c
arch/s390/include/asm/kvm_host.h
arch/s390/kvm/kvm-s390.c
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/x86.c
include/linux/kvm_types.h
virt/kvm/kvm_main.c

index d56f365b38a83fa0ff521ef0a0a2473b5954846a..5a2c82f63baaa5d18d4984f7f69d7104d0b5c1a7 100644 (file)
@@ -556,16 +556,11 @@ static inline bool __vcpu_write_sys_reg_to_cpu(u64 val, int reg)
 }
 
 struct kvm_vm_stat {
-       u64 remote_tlb_flush;
+       struct kvm_vm_stat_generic generic;
 };
 
 struct kvm_vcpu_stat {
-       u64 halt_successful_poll;
-       u64 halt_attempted_poll;
-       u64 halt_poll_success_ns;
-       u64 halt_poll_fail_ns;
-       u64 halt_poll_invalid;
-       u64 halt_wakeup;
+       struct kvm_vcpu_stat_generic generic;
        u64 hvc_exit_stat;
        u64 wfe_exit_stat;
        u64 wfi_exit_stat;
index 5cb4a1cd5603a2e3a35853e0f18ee1a6de736019..988ead309cbe07e5e6bc5b553be60b5192d8912b 100644 (file)
 #include "trace.h"
 
 struct kvm_stats_debugfs_item debugfs_entries[] = {
-       VCPU_STAT("halt_successful_poll", halt_successful_poll),
-       VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
-       VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
-       VCPU_STAT("halt_wakeup", halt_wakeup),
+       VCPU_STAT("halt_successful_poll", generic.halt_successful_poll),
+       VCPU_STAT("halt_attempted_poll", generic.halt_attempted_poll),
+       VCPU_STAT("halt_poll_invalid", generic.halt_poll_invalid),
+       VCPU_STAT("halt_wakeup", generic.halt_wakeup),
        VCPU_STAT("hvc_exit_stat", hvc_exit_stat),
        VCPU_STAT("wfe_exit_stat", wfe_exit_stat),
        VCPU_STAT("wfi_exit_stat", wfi_exit_stat),
        VCPU_STAT("mmio_exit_user", mmio_exit_user),
        VCPU_STAT("mmio_exit_kernel", mmio_exit_kernel),
        VCPU_STAT("exits", exits),
-       VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
-       VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
+       VCPU_STAT("halt_poll_success_ns", generic.halt_poll_success_ns),
+       VCPU_STAT("halt_poll_fail_ns", generic.halt_poll_fail_ns),
        { NULL }
 };
 
index 4245c082095f651c619d818c01af608b1fc59dac..696f6b00937762cba91438eeb9ea5828d8bcf089 100644 (file)
@@ -109,10 +109,11 @@ static inline bool kvm_is_error_hva(unsigned long addr)
 }
 
 struct kvm_vm_stat {
-       u64 remote_tlb_flush;
+       struct kvm_vm_stat_generic generic;
 };
 
 struct kvm_vcpu_stat {
+       struct kvm_vcpu_stat_generic generic;
        u64 wait_exits;
        u64 cache_exits;
        u64 signal_exits;
@@ -142,12 +143,6 @@ struct kvm_vcpu_stat {
 #ifdef CONFIG_CPU_LOONGSON64
        u64 vz_cpucfg_exits;
 #endif
-       u64 halt_successful_poll;
-       u64 halt_attempted_poll;
-       u64 halt_poll_success_ns;
-       u64 halt_poll_fail_ns;
-       u64 halt_poll_invalid;
-       u64 halt_wakeup;
 };
 
 struct kvm_arch_memory_slot {
index 4d4af97dcc8880322a2ba81a0eddfa0fba67bfeb..2f2969aef60c60f15a30c0e4b62cb5da85b571bb 100644 (file)
@@ -68,12 +68,12 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
 #ifdef CONFIG_CPU_LOONGSON64
        VCPU_STAT("vz_cpucfg", vz_cpucfg_exits),
 #endif
-       VCPU_STAT("halt_successful_poll", halt_successful_poll),
-       VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
-       VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
-       VCPU_STAT("halt_wakeup", halt_wakeup),
-       VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
-       VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
+       VCPU_STAT("halt_successful_poll", generic.halt_successful_poll),
+       VCPU_STAT("halt_attempted_poll", generic.halt_attempted_poll),
+       VCPU_STAT("halt_poll_invalid", generic.halt_poll_invalid),
+       VCPU_STAT("halt_wakeup", generic.halt_wakeup),
+       VCPU_STAT("halt_poll_success_ns", generic.halt_poll_success_ns),
+       VCPU_STAT("halt_poll_fail_ns", generic.halt_poll_fail_ns),
        {NULL}
 };
 
index dd8bd4706259da06f315aff6a711825b26a7a0a2..9f52f282b1aa494eafa72e2dfd07d633d25e041a 100644 (file)
@@ -81,12 +81,13 @@ struct kvmppc_book3s_shadow_vcpu;
 struct kvm_nested_guest;
 
 struct kvm_vm_stat {
-       u64 remote_tlb_flush;
+       struct kvm_vm_stat_generic generic;
        u64 num_2M_pages;
        u64 num_1G_pages;
 };
 
 struct kvm_vcpu_stat {
+       struct kvm_vcpu_stat_generic generic;
        u64 sum_exits;
        u64 mmio_exits;
        u64 signal_exits;
@@ -102,14 +103,8 @@ struct kvm_vcpu_stat {
        u64 emulated_inst_exits;
        u64 dec_exits;
        u64 ext_intr_exits;
-       u64 halt_poll_success_ns;
-       u64 halt_poll_fail_ns;
        u64 halt_wait_ns;
-       u64 halt_successful_poll;
-       u64 halt_attempted_poll;
        u64 halt_successful_wait;
-       u64 halt_poll_invalid;
-       u64 halt_wakeup;
        u64 dbell_exits;
        u64 gdbell_exits;
        u64 ld;
index 5e1e1cff0ee38bf215f5b410290e94002135fdac..ae9f1b855ff9d2e3abfdb4c27471416f9df43526 100644 (file)
@@ -47,14 +47,14 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
        VCPU_STAT("dec", dec_exits),
        VCPU_STAT("ext_intr", ext_intr_exits),
        VCPU_STAT("queue_intr", queue_intr),
-       VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
-       VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
+       VCPU_STAT("halt_poll_success_ns", generic.halt_poll_success_ns),
+       VCPU_STAT("halt_poll_fail_ns", generic.halt_poll_fail_ns),
        VCPU_STAT("halt_wait_ns", halt_wait_ns),
-       VCPU_STAT("halt_successful_poll", halt_successful_poll),
-       VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
+       VCPU_STAT("halt_successful_poll", generic.halt_successful_poll),
+       VCPU_STAT("halt_attempted_poll", generic.halt_attempted_poll),
        VCPU_STAT("halt_successful_wait", halt_successful_wait),
-       VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
-       VCPU_STAT("halt_wakeup", halt_wakeup),
+       VCPU_STAT("halt_poll_invalid", generic.halt_poll_invalid),
+       VCPU_STAT("halt_wakeup", generic.halt_wakeup),
        VCPU_STAT("pf_storage", pf_storage),
        VCPU_STAT("sp_storage", sp_storage),
        VCPU_STAT("pf_instruc", pf_instruc),
index 7e73e5bfe4ba73575357c7714bfccf4f5f49cc99..cd544a46183e1dc5a65dcee96172e93d4449c606 100644 (file)
@@ -230,7 +230,7 @@ static void kvmppc_fast_vcpu_kick_hv(struct kvm_vcpu *vcpu)
 
        waitp = kvm_arch_vcpu_get_wait(vcpu);
        if (rcuwait_wake_up(waitp))
-               ++vcpu->stat.halt_wakeup;
+               ++vcpu->stat.generic.halt_wakeup;
 
        cpu = READ_ONCE(vcpu->arch.thread_cpu);
        if (cpu >= 0 && kvmppc_ipi_thread(cpu))
@@ -4092,7 +4092,7 @@ static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc)
        cur = start_poll = ktime_get();
        if (vc->halt_poll_ns) {
                ktime_t stop = ktime_add_ns(start_poll, vc->halt_poll_ns);
-               ++vc->runner->stat.halt_attempted_poll;
+               ++vc->runner->stat.generic.halt_attempted_poll;
 
                vc->vcore_state = VCORE_POLLING;
                spin_unlock(&vc->lock);
@@ -4109,7 +4109,7 @@ static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc)
                vc->vcore_state = VCORE_INACTIVE;
 
                if (!do_sleep) {
-                       ++vc->runner->stat.halt_successful_poll;
+                       ++vc->runner->stat.generic.halt_successful_poll;
                        goto out;
                }
        }
@@ -4121,7 +4121,7 @@ static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc)
                do_sleep = 0;
                /* If we polled, count this as a successful poll */
                if (vc->halt_poll_ns)
-                       ++vc->runner->stat.halt_successful_poll;
+                       ++vc->runner->stat.generic.halt_successful_poll;
                goto out;
        }
 
@@ -4148,13 +4148,13 @@ out:
                        ktime_to_ns(cur) - ktime_to_ns(start_wait);
                /* Attribute failed poll time */
                if (vc->halt_poll_ns)
-                       vc->runner->stat.halt_poll_fail_ns +=
+                       vc->runner->stat.generic.halt_poll_fail_ns +=
                                ktime_to_ns(start_wait) -
                                ktime_to_ns(start_poll);
        } else {
                /* Attribute successful poll time */
                if (vc->halt_poll_ns)
-                       vc->runner->stat.halt_poll_success_ns +=
+                       vc->runner->stat.generic.halt_poll_success_ns +=
                                ktime_to_ns(cur) -
                                ktime_to_ns(start_poll);
        }
index d7733b07f4894774f13d5bdc53b6bbf26c102ea1..71bcb014046139684149ce26e0e04a58ef3b505f 100644 (file)
@@ -493,7 +493,7 @@ static void kvmppc_set_msr_pr(struct kvm_vcpu *vcpu, u64 msr)
                if (!vcpu->arch.pending_exceptions) {
                        kvm_vcpu_block(vcpu);
                        kvm_clear_request(KVM_REQ_UNHALT, vcpu);
-                       vcpu->stat.halt_wakeup++;
+                       vcpu->stat.generic.halt_wakeup++;
 
                        /* Unset POW bit after we woke up */
                        msr &= ~MSR_POW;
index 031c8015864a9400e42953ad242b84ab0d727c50..ac14239f3424ac0b45136d9a01ef9e23797c4223 100644 (file)
@@ -378,7 +378,7 @@ int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd)
                kvmppc_set_msr_fast(vcpu, kvmppc_get_msr(vcpu) | MSR_EE);
                kvm_vcpu_block(vcpu);
                kvm_clear_request(KVM_REQ_UNHALT, vcpu);
-               vcpu->stat.halt_wakeup++;
+               vcpu->stat.generic.halt_wakeup++;
                return EMULATE_DONE;
        case H_LOGICAL_CI_LOAD:
                return kvmppc_h_pr_logical_ci_load(vcpu);
index 7d5fe43f85c450d441ab52c7908fad0af67d4181..7a75559ab51d544297195725f1a2526cdb866840 100644 (file)
@@ -49,15 +49,15 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
        VCPU_STAT("inst_emu", emulated_inst_exits),
        VCPU_STAT("dec", dec_exits),
        VCPU_STAT("ext_intr", ext_intr_exits),
-       VCPU_STAT("halt_successful_poll", halt_successful_poll),
-       VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
-       VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
-       VCPU_STAT("halt_wakeup", halt_wakeup),
+       VCPU_STAT("halt_successful_poll", generic.halt_successful_poll),
+       VCPU_STAT("halt_attempted_poll", generic.halt_attempted_poll),
+       VCPU_STAT("halt_poll_invalid", generic.halt_poll_invalid),
+       VCPU_STAT("halt_wakeup", generic.halt_wakeup),
        VCPU_STAT("doorbell", dbell_exits),
        VCPU_STAT("guest doorbell", gdbell_exits),
-       VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
-       VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
-       VM_STAT("remote_tlb_flush", remote_tlb_flush),
+       VCPU_STAT("halt_poll_success_ns", generic.halt_poll_success_ns),
+       VCPU_STAT("halt_poll_fail_ns", generic.halt_poll_fail_ns),
+       VM_STAT("remote_tlb_flush", generic.remote_tlb_flush),
        { NULL }
 };
 
index 8925f3969478f7ad2a7977e585438c3a95bb5217..9b4473f76e568c7ed41508ea7f1b16088ff6d887 100644 (file)
@@ -361,6 +361,7 @@ struct sie_page {
 };
 
 struct kvm_vcpu_stat {
+       struct kvm_vcpu_stat_generic generic;
        u64 exit_userspace;
        u64 exit_null;
        u64 exit_external_request;
@@ -370,13 +371,7 @@ struct kvm_vcpu_stat {
        u64 exit_validity;
        u64 exit_instruction;
        u64 exit_pei;
-       u64 halt_successful_poll;
-       u64 halt_attempted_poll;
-       u64 halt_poll_invalid;
        u64 halt_no_poll_steal;
-       u64 halt_wakeup;
-       u64 halt_poll_success_ns;
-       u64 halt_poll_fail_ns;
        u64 instruction_lctl;
        u64 instruction_lctlg;
        u64 instruction_stctl;
@@ -755,12 +750,12 @@ struct kvm_vcpu_arch {
 };
 
 struct kvm_vm_stat {
+       struct kvm_vm_stat_generic generic;
        u64 inject_io;
        u64 inject_float_mchk;
        u64 inject_pfault_done;
        u64 inject_service_signal;
        u64 inject_virtio;
-       u64 remote_tlb_flush;
 };
 
 struct kvm_arch_memory_slot {
index 1296fc10f80c83bd46c3ebccbda860f45ec4e74f..75ad44c447176603722583136e72dd65d698d460 100644 (file)
@@ -72,13 +72,13 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
        VCPU_STAT("exit_program_interruption", exit_program_interruption),
        VCPU_STAT("exit_instr_and_program_int", exit_instr_and_program),
        VCPU_STAT("exit_operation_exception", exit_operation_exception),
-       VCPU_STAT("halt_successful_poll", halt_successful_poll),
-       VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
-       VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
+       VCPU_STAT("halt_successful_poll", generic.halt_successful_poll),
+       VCPU_STAT("halt_attempted_poll", generic.halt_attempted_poll),
+       VCPU_STAT("halt_poll_invalid", generic.halt_poll_invalid),
        VCPU_STAT("halt_no_poll_steal", halt_no_poll_steal),
-       VCPU_STAT("halt_wakeup", halt_wakeup),
-       VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
-       VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
+       VCPU_STAT("halt_wakeup", generic.halt_wakeup),
+       VCPU_STAT("halt_poll_success_ns", generic.halt_poll_success_ns),
+       VCPU_STAT("halt_poll_fail_ns", generic.halt_poll_fail_ns),
        VCPU_STAT("instruction_lctlg", instruction_lctlg),
        VCPU_STAT("instruction_lctl", instruction_lctl),
        VCPU_STAT("instruction_stctl", instruction_stctl),
index e11d64aa0bcd14332ef28631479137d178a31885..408051552121aa26901d8c1ca25b7753f67c3a65 100644 (file)
@@ -1160,6 +1160,7 @@ struct kvm_arch {
 };
 
 struct kvm_vm_stat {
+       struct kvm_vm_stat_generic generic;
        u64 mmu_shadow_zapped;
        u64 mmu_pte_write;
        u64 mmu_pde_zapped;
@@ -1167,13 +1168,13 @@ struct kvm_vm_stat {
        u64 mmu_recycled;
        u64 mmu_cache_miss;
        u64 mmu_unsync;
-       u64 remote_tlb_flush;
        u64 lpages;
        u64 nx_lpage_splits;
        u64 max_mmu_page_hash_collisions;
 };
 
 struct kvm_vcpu_stat {
+       struct kvm_vcpu_stat_generic generic;
        u64 pf_fixed;
        u64 pf_guest;
        u64 tlb_flush;
@@ -1187,10 +1188,6 @@ struct kvm_vcpu_stat {
        u64 nmi_window_exits;
        u64 l1d_flush;
        u64 halt_exits;
-       u64 halt_successful_poll;
-       u64 halt_attempted_poll;
-       u64 halt_poll_invalid;
-       u64 halt_wakeup;
        u64 request_irq_exits;
        u64 irq_exits;
        u64 host_state_reload;
@@ -1201,8 +1198,6 @@ struct kvm_vcpu_stat {
        u64 irq_injections;
        u64 nmi_injections;
        u64 req_event;
-       u64 halt_poll_success_ns;
-       u64 halt_poll_fail_ns;
        u64 nested_run;
        u64 directed_yield_attempted;
        u64 directed_yield_successful;
index 38c003b603398590db3a5ad06dc6423d465f612c..71202330848ad1eec22f56a314f498a2e1bbc058 100644 (file)
@@ -235,10 +235,10 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
        VCPU_STAT("irq_window", irq_window_exits),
        VCPU_STAT("nmi_window", nmi_window_exits),
        VCPU_STAT("halt_exits", halt_exits),
-       VCPU_STAT("halt_successful_poll", halt_successful_poll),
-       VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
-       VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
-       VCPU_STAT("halt_wakeup", halt_wakeup),
+       VCPU_STAT("halt_successful_poll", generic.halt_successful_poll),
+       VCPU_STAT("halt_attempted_poll", generic.halt_attempted_poll),
+       VCPU_STAT("halt_poll_invalid", generic.halt_poll_invalid),
+       VCPU_STAT("halt_wakeup", generic.halt_wakeup),
        VCPU_STAT("hypercalls", hypercalls),
        VCPU_STAT("request_irq", request_irq_exits),
        VCPU_STAT("irq_exits", irq_exits),
@@ -250,8 +250,8 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
        VCPU_STAT("nmi_injections", nmi_injections),
        VCPU_STAT("req_event", req_event),
        VCPU_STAT("l1d_flush", l1d_flush),
-       VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
-       VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
+       VCPU_STAT("halt_poll_success_ns", generic.halt_poll_success_ns),
+       VCPU_STAT("halt_poll_fail_ns", generic.halt_poll_fail_ns),
        VCPU_STAT("nested_run", nested_run),
        VCPU_STAT("directed_yield_attempted", directed_yield_attempted),
        VCPU_STAT("directed_yield_successful", directed_yield_successful),
@@ -263,7 +263,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
        VM_STAT("mmu_recycled", mmu_recycled),
        VM_STAT("mmu_cache_miss", mmu_cache_miss),
        VM_STAT("mmu_unsync", mmu_unsync),
-       VM_STAT("remote_tlb_flush", remote_tlb_flush),
+       VM_STAT("remote_tlb_flush", generic.remote_tlb_flush),
        VM_STAT("largepages", lpages, .mode = 0444),
        VM_STAT("nx_largepages_splitted", nx_lpage_splits, .mode = 0444),
        VM_STAT("max_mmu_page_hash_collisions", max_mmu_page_hash_collisions),
index a7580f69dda02e681228785c5c3cfa49b207d88c..48db778291b7ece367aff8f868ab37ba5ad5fa48 100644 (file)
@@ -76,5 +76,17 @@ struct kvm_mmu_memory_cache {
 };
 #endif
 
+struct kvm_vm_stat_generic {
+       u64 remote_tlb_flush;
+};
+
+struct kvm_vcpu_stat_generic {
+       u64 halt_successful_poll;
+       u64 halt_attempted_poll;
+       u64 halt_poll_invalid;
+       u64 halt_wakeup;
+       u64 halt_poll_success_ns;
+       u64 halt_poll_fail_ns;
+};
 
 #endif /* __KVM_TYPES_H__ */
index ed4d1581d5029dcbc48268f09d332ad5014fcfd1..cec986487b3085c95d3fad2f03455d9edd09141f 100644 (file)
@@ -332,7 +332,7 @@ void kvm_flush_remote_tlbs(struct kvm *kvm)
         */
        if (!kvm_arch_flush_remote_tlb(kvm)
            || kvm_make_all_cpus_request(kvm, KVM_REQ_TLB_FLUSH))
-               ++kvm->stat.remote_tlb_flush;
+               ++kvm->stat.generic.remote_tlb_flush;
        cmpxchg(&kvm->tlbs_dirty, dirty_count, 0);
 }
 EXPORT_SYMBOL_GPL(kvm_flush_remote_tlbs);
@@ -3029,9 +3029,9 @@ static inline void
 update_halt_poll_stats(struct kvm_vcpu *vcpu, u64 poll_ns, bool waited)
 {
        if (waited)
-               vcpu->stat.halt_poll_fail_ns += poll_ns;
+               vcpu->stat.generic.halt_poll_fail_ns += poll_ns;
        else
-               vcpu->stat.halt_poll_success_ns += poll_ns;
+               vcpu->stat.generic.halt_poll_success_ns += poll_ns;
 }
 
 /*
@@ -3049,16 +3049,16 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
        if (vcpu->halt_poll_ns && !kvm_arch_no_poll(vcpu)) {
                ktime_t stop = ktime_add_ns(ktime_get(), vcpu->halt_poll_ns);
 
-               ++vcpu->stat.halt_attempted_poll;
+               ++vcpu->stat.generic.halt_attempted_poll;
                do {
                        /*
                         * This sets KVM_REQ_UNHALT if an interrupt
                         * arrives.
                         */
                        if (kvm_vcpu_check_block(vcpu) < 0) {
-                               ++vcpu->stat.halt_successful_poll;
+                               ++vcpu->stat.generic.halt_successful_poll;
                                if (!vcpu_valid_wakeup(vcpu))
-                                       ++vcpu->stat.halt_poll_invalid;
+                                       ++vcpu->stat.generic.halt_poll_invalid;
                                goto out;
                        }
                        poll_end = cur = ktime_get();
@@ -3115,7 +3115,7 @@ bool kvm_vcpu_wake_up(struct kvm_vcpu *vcpu)
        waitp = kvm_arch_vcpu_get_wait(vcpu);
        if (rcuwait_wake_up(waitp)) {
                WRITE_ONCE(vcpu->ready, true);
-               ++vcpu->stat.halt_wakeup;
+               ++vcpu->stat.generic.halt_wakeup;
                return true;
        }