[PATCH v2 1/4] KVM: Refactor stats descriptor generation macros

David Matlack dmatlack at google.com
Mon Mar 6 11:01:53 PST 2023


Refactor the various KVM stats macros to reduce the amount of duplicate
macro code. This change also improves readability by spelling out
"CUMULATIVE", "INSTANT", and "PEAK" instead of the previous short-hands
which were less clear ("COUNTER", "ICOUNTER", and "PCOUNTER").

No functional change intended.

Suggested-by: Sean Christopherson <seanjc at google.com>
Signed-off-by: David Matlack <dmatlack at google.com>
---
 arch/arm64/kvm/guest.c    |  14 +--
 arch/mips/kvm/mips.c      |  54 +++++------
 arch/powerpc/kvm/book3s.c |  62 ++++++------
 arch/powerpc/kvm/booke.c  |  48 ++++-----
 arch/riscv/kvm/vcpu.c     |  16 +--
 arch/s390/kvm/kvm-s390.c  | 198 +++++++++++++++++++-------------------
 arch/x86/kvm/x86.c        |  94 +++++++++---------
 include/linux/kvm_host.h  |  95 ++++++------------
 8 files changed, 272 insertions(+), 309 deletions(-)

diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
index 07444fa22888..890ed444c237 100644
--- a/arch/arm64/kvm/guest.c
+++ b/arch/arm64/kvm/guest.c
@@ -44,13 +44,13 @@ const struct kvm_stats_header kvm_vm_stats_header = {
 
 const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
 	KVM_GENERIC_VCPU_STATS(),
-	STATS_DESC_COUNTER(VCPU, hvc_exit_stat),
-	STATS_DESC_COUNTER(VCPU, wfe_exit_stat),
-	STATS_DESC_COUNTER(VCPU, wfi_exit_stat),
-	STATS_DESC_COUNTER(VCPU, mmio_exit_user),
-	STATS_DESC_COUNTER(VCPU, mmio_exit_kernel),
-	STATS_DESC_COUNTER(VCPU, signal_exits),
-	STATS_DESC_COUNTER(VCPU, exits)
+	KVM_STAT(VCPU, CUMULATIVE, NONE, hvc_exit_stat),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, wfe_exit_stat),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, wfi_exit_stat),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, mmio_exit_user),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, mmio_exit_kernel),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, signal_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exits)
 };
 
 const struct kvm_stats_header kvm_vcpu_stats_header = {
diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
index 36c8991b5d39..b7b2fa400bcf 100644
--- a/arch/mips/kvm/mips.c
+++ b/arch/mips/kvm/mips.c
@@ -53,34 +53,34 @@ const struct kvm_stats_header kvm_vm_stats_header = {
 
 const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
 	KVM_GENERIC_VCPU_STATS(),
-	STATS_DESC_COUNTER(VCPU, wait_exits),
-	STATS_DESC_COUNTER(VCPU, cache_exits),
-	STATS_DESC_COUNTER(VCPU, signal_exits),
-	STATS_DESC_COUNTER(VCPU, int_exits),
-	STATS_DESC_COUNTER(VCPU, cop_unusable_exits),
-	STATS_DESC_COUNTER(VCPU, tlbmod_exits),
-	STATS_DESC_COUNTER(VCPU, tlbmiss_ld_exits),
-	STATS_DESC_COUNTER(VCPU, tlbmiss_st_exits),
-	STATS_DESC_COUNTER(VCPU, addrerr_st_exits),
-	STATS_DESC_COUNTER(VCPU, addrerr_ld_exits),
-	STATS_DESC_COUNTER(VCPU, syscall_exits),
-	STATS_DESC_COUNTER(VCPU, resvd_inst_exits),
-	STATS_DESC_COUNTER(VCPU, break_inst_exits),
-	STATS_DESC_COUNTER(VCPU, trap_inst_exits),
-	STATS_DESC_COUNTER(VCPU, msa_fpe_exits),
-	STATS_DESC_COUNTER(VCPU, fpe_exits),
-	STATS_DESC_COUNTER(VCPU, msa_disabled_exits),
-	STATS_DESC_COUNTER(VCPU, flush_dcache_exits),
-	STATS_DESC_COUNTER(VCPU, vz_gpsi_exits),
-	STATS_DESC_COUNTER(VCPU, vz_gsfc_exits),
-	STATS_DESC_COUNTER(VCPU, vz_hc_exits),
-	STATS_DESC_COUNTER(VCPU, vz_grr_exits),
-	STATS_DESC_COUNTER(VCPU, vz_gva_exits),
-	STATS_DESC_COUNTER(VCPU, vz_ghfc_exits),
-	STATS_DESC_COUNTER(VCPU, vz_gpa_exits),
-	STATS_DESC_COUNTER(VCPU, vz_resvd_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, wait_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, cache_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, signal_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, int_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, cop_unusable_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, tlbmod_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, tlbmiss_ld_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, tlbmiss_st_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, addrerr_st_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, addrerr_ld_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, syscall_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, resvd_inst_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, break_inst_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, trap_inst_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, msa_fpe_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, fpe_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, msa_disabled_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, flush_dcache_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_gpsi_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_gsfc_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_hc_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_grr_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_gva_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_ghfc_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_gpa_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_resvd_exits),
 #ifdef CONFIG_CPU_LOONGSON64
-	STATS_DESC_COUNTER(VCPU, vz_cpucfg_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, vz_cpucfg_exits),
 #endif
 };
 
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
index 57f4e7896d67..8a7a932961d5 100644
--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -40,8 +40,8 @@
 
 const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
 	KVM_GENERIC_VM_STATS(),
-	STATS_DESC_ICOUNTER(VM, num_2M_pages),
-	STATS_DESC_ICOUNTER(VM, num_1G_pages)
+	KVM_STAT(VM, INSTANT, NONE, num_2M_pages),
+	KVM_STAT(VM, INSTANT, NONE, num_1G_pages)
 };
 
 const struct kvm_stats_header kvm_vm_stats_header = {
@@ -55,35 +55,35 @@ const struct kvm_stats_header kvm_vm_stats_header = {
 
 const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
 	KVM_GENERIC_VCPU_STATS(),
-	STATS_DESC_COUNTER(VCPU, sum_exits),
-	STATS_DESC_COUNTER(VCPU, mmio_exits),
-	STATS_DESC_COUNTER(VCPU, signal_exits),
-	STATS_DESC_COUNTER(VCPU, light_exits),
-	STATS_DESC_COUNTER(VCPU, itlb_real_miss_exits),
-	STATS_DESC_COUNTER(VCPU, itlb_virt_miss_exits),
-	STATS_DESC_COUNTER(VCPU, dtlb_real_miss_exits),
-	STATS_DESC_COUNTER(VCPU, dtlb_virt_miss_exits),
-	STATS_DESC_COUNTER(VCPU, syscall_exits),
-	STATS_DESC_COUNTER(VCPU, isi_exits),
-	STATS_DESC_COUNTER(VCPU, dsi_exits),
-	STATS_DESC_COUNTER(VCPU, emulated_inst_exits),
-	STATS_DESC_COUNTER(VCPU, dec_exits),
-	STATS_DESC_COUNTER(VCPU, ext_intr_exits),
-	STATS_DESC_COUNTER(VCPU, halt_successful_wait),
-	STATS_DESC_COUNTER(VCPU, dbell_exits),
-	STATS_DESC_COUNTER(VCPU, gdbell_exits),
-	STATS_DESC_COUNTER(VCPU, ld),
-	STATS_DESC_COUNTER(VCPU, st),
-	STATS_DESC_COUNTER(VCPU, pf_storage),
-	STATS_DESC_COUNTER(VCPU, pf_instruc),
-	STATS_DESC_COUNTER(VCPU, sp_storage),
-	STATS_DESC_COUNTER(VCPU, sp_instruc),
-	STATS_DESC_COUNTER(VCPU, queue_intr),
-	STATS_DESC_COUNTER(VCPU, ld_slow),
-	STATS_DESC_COUNTER(VCPU, st_slow),
-	STATS_DESC_COUNTER(VCPU, pthru_all),
-	STATS_DESC_COUNTER(VCPU, pthru_host),
-	STATS_DESC_COUNTER(VCPU, pthru_bad_aff)
+	KVM_STAT(VM, CUMULATIVE, NONE, sum_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, mmio_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, signal_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, light_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, itlb_real_miss_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, itlb_virt_miss_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, dtlb_real_miss_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, dtlb_virt_miss_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, syscall_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, isi_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, dsi_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, emulated_inst_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, dec_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, ext_intr_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, halt_successful_wait),
+	KVM_STAT(VM, CUMULATIVE, NONE, dbell_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, gdbell_exits),
+	KVM_STAT(VM, CUMULATIVE, NONE, ld),
+	KVM_STAT(VM, CUMULATIVE, NONE, st),
+	KVM_STAT(VM, CUMULATIVE, NONE, pf_storage),
+	KVM_STAT(VM, CUMULATIVE, NONE, pf_instruc),
+	KVM_STAT(VM, CUMULATIVE, NONE, sp_storage),
+	KVM_STAT(VM, CUMULATIVE, NONE, sp_instruc),
+	KVM_STAT(VM, CUMULATIVE, NONE, queue_intr),
+	KVM_STAT(VM, CUMULATIVE, NONE, ld_slow),
+	KVM_STAT(VM, CUMULATIVE, NONE, st_slow),
+	KVM_STAT(VM, CUMULATIVE, NONE, pthru_all),
+	KVM_STAT(VM, CUMULATIVE, NONE, pthru_host),
+	KVM_STAT(VM, CUMULATIVE, NONE, pthru_bad_aff)
 };
 
 const struct kvm_stats_header kvm_vcpu_stats_header = {
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 01adffb24667..898bdd583289 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -38,8 +38,8 @@ unsigned long kvmppc_booke_handlers;
 
 const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
 	KVM_GENERIC_VM_STATS(),
-	STATS_DESC_ICOUNTER(VM, num_2M_pages),
-	STATS_DESC_ICOUNTER(VM, num_1G_pages)
+	KVM_STAT(VM, INSTANT, NONE, num_2M_pages),
+	KVM_STAT(VM, INSTANT, NONE, num_1G_pages)
 };
 
 const struct kvm_stats_header kvm_vm_stats_header = {
@@ -53,28 +53,28 @@ const struct kvm_stats_header kvm_vm_stats_header = {
 
 const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
 	KVM_GENERIC_VCPU_STATS(),
-	STATS_DESC_COUNTER(VCPU, sum_exits),
-	STATS_DESC_COUNTER(VCPU, mmio_exits),
-	STATS_DESC_COUNTER(VCPU, signal_exits),
-	STATS_DESC_COUNTER(VCPU, light_exits),
-	STATS_DESC_COUNTER(VCPU, itlb_real_miss_exits),
-	STATS_DESC_COUNTER(VCPU, itlb_virt_miss_exits),
-	STATS_DESC_COUNTER(VCPU, dtlb_real_miss_exits),
-	STATS_DESC_COUNTER(VCPU, dtlb_virt_miss_exits),
-	STATS_DESC_COUNTER(VCPU, syscall_exits),
-	STATS_DESC_COUNTER(VCPU, isi_exits),
-	STATS_DESC_COUNTER(VCPU, dsi_exits),
-	STATS_DESC_COUNTER(VCPU, emulated_inst_exits),
-	STATS_DESC_COUNTER(VCPU, dec_exits),
-	STATS_DESC_COUNTER(VCPU, ext_intr_exits),
-	STATS_DESC_COUNTER(VCPU, halt_successful_wait),
-	STATS_DESC_COUNTER(VCPU, dbell_exits),
-	STATS_DESC_COUNTER(VCPU, gdbell_exits),
-	STATS_DESC_COUNTER(VCPU, ld),
-	STATS_DESC_COUNTER(VCPU, st),
-	STATS_DESC_COUNTER(VCPU, pthru_all),
-	STATS_DESC_COUNTER(VCPU, pthru_host),
-	STATS_DESC_COUNTER(VCPU, pthru_bad_aff)
+	KVM_STAT(VCPU, CUMULATIVE, NONE, sum_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, mmio_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, signal_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, light_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, itlb_real_miss_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, itlb_virt_miss_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, dtlb_real_miss_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, dtlb_virt_miss_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, syscall_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, isi_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, dsi_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, emulated_inst_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, dec_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, ext_intr_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, halt_successful_wait),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, dbell_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, gdbell_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, ld),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, st),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pthru_all),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pthru_host),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pthru_bad_aff)
 };
 
 const struct kvm_stats_header kvm_vcpu_stats_header = {
diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c
index 7d010b0be54e..57f57f6f5baf 100644
--- a/arch/riscv/kvm/vcpu.c
+++ b/arch/riscv/kvm/vcpu.c
@@ -25,14 +25,14 @@
 
 const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
 	KVM_GENERIC_VCPU_STATS(),
-	STATS_DESC_COUNTER(VCPU, ecall_exit_stat),
-	STATS_DESC_COUNTER(VCPU, wfi_exit_stat),
-	STATS_DESC_COUNTER(VCPU, mmio_exit_user),
-	STATS_DESC_COUNTER(VCPU, mmio_exit_kernel),
-	STATS_DESC_COUNTER(VCPU, csr_exit_user),
-	STATS_DESC_COUNTER(VCPU, csr_exit_kernel),
-	STATS_DESC_COUNTER(VCPU, signal_exits),
-	STATS_DESC_COUNTER(VCPU, exits)
+	KVM_STAT(VCPU, CUMULATIVE, NONE, ecall_exit_stat),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, wfi_exit_stat),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, mmio_exit_user),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, mmio_exit_kernel),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, csr_exit_user),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, csr_exit_kernel),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, signal_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exits)
 };
 
 const struct kvm_stats_header kvm_vcpu_stats_header = {
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 39b36562c043..dfb3bc4d4b46 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -61,12 +61,12 @@
 
 const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
 	KVM_GENERIC_VM_STATS(),
-	STATS_DESC_COUNTER(VM, inject_io),
-	STATS_DESC_COUNTER(VM, inject_float_mchk),
-	STATS_DESC_COUNTER(VM, inject_pfault_done),
-	STATS_DESC_COUNTER(VM, inject_service_signal),
-	STATS_DESC_COUNTER(VM, inject_virtio),
-	STATS_DESC_COUNTER(VM, aen_forward)
+	KVM_STAT(VM, CUMULATIVE, NONE, inject_io),
+	KVM_STAT(VM, CUMULATIVE, NONE, inject_float_mchk),
+	KVM_STAT(VM, CUMULATIVE, NONE, inject_pfault_done),
+	KVM_STAT(VM, CUMULATIVE, NONE, inject_service_signal),
+	KVM_STAT(VM, CUMULATIVE, NONE, inject_virtio),
+	KVM_STAT(VM, CUMULATIVE, NONE, aen_forward)
 };
 
 const struct kvm_stats_header kvm_vm_stats_header = {
@@ -80,99 +80,99 @@ const struct kvm_stats_header kvm_vm_stats_header = {
 
 const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
 	KVM_GENERIC_VCPU_STATS(),
-	STATS_DESC_COUNTER(VCPU, exit_userspace),
-	STATS_DESC_COUNTER(VCPU, exit_null),
-	STATS_DESC_COUNTER(VCPU, exit_external_request),
-	STATS_DESC_COUNTER(VCPU, exit_io_request),
-	STATS_DESC_COUNTER(VCPU, exit_external_interrupt),
-	STATS_DESC_COUNTER(VCPU, exit_stop_request),
-	STATS_DESC_COUNTER(VCPU, exit_validity),
-	STATS_DESC_COUNTER(VCPU, exit_instruction),
-	STATS_DESC_COUNTER(VCPU, exit_pei),
-	STATS_DESC_COUNTER(VCPU, halt_no_poll_steal),
-	STATS_DESC_COUNTER(VCPU, instruction_lctl),
-	STATS_DESC_COUNTER(VCPU, instruction_lctlg),
-	STATS_DESC_COUNTER(VCPU, instruction_stctl),
-	STATS_DESC_COUNTER(VCPU, instruction_stctg),
-	STATS_DESC_COUNTER(VCPU, exit_program_interruption),
-	STATS_DESC_COUNTER(VCPU, exit_instr_and_program),
-	STATS_DESC_COUNTER(VCPU, exit_operation_exception),
-	STATS_DESC_COUNTER(VCPU, deliver_ckc),
-	STATS_DESC_COUNTER(VCPU, deliver_cputm),
-	STATS_DESC_COUNTER(VCPU, deliver_external_call),
-	STATS_DESC_COUNTER(VCPU, deliver_emergency_signal),
-	STATS_DESC_COUNTER(VCPU, deliver_service_signal),
-	STATS_DESC_COUNTER(VCPU, deliver_virtio),
-	STATS_DESC_COUNTER(VCPU, deliver_stop_signal),
-	STATS_DESC_COUNTER(VCPU, deliver_prefix_signal),
-	STATS_DESC_COUNTER(VCPU, deliver_restart_signal),
-	STATS_DESC_COUNTER(VCPU, deliver_program),
-	STATS_DESC_COUNTER(VCPU, deliver_io),
-	STATS_DESC_COUNTER(VCPU, deliver_machine_check),
-	STATS_DESC_COUNTER(VCPU, exit_wait_state),
-	STATS_DESC_COUNTER(VCPU, inject_ckc),
-	STATS_DESC_COUNTER(VCPU, inject_cputm),
-	STATS_DESC_COUNTER(VCPU, inject_external_call),
-	STATS_DESC_COUNTER(VCPU, inject_emergency_signal),
-	STATS_DESC_COUNTER(VCPU, inject_mchk),
-	STATS_DESC_COUNTER(VCPU, inject_pfault_init),
-	STATS_DESC_COUNTER(VCPU, inject_program),
-	STATS_DESC_COUNTER(VCPU, inject_restart),
-	STATS_DESC_COUNTER(VCPU, inject_set_prefix),
-	STATS_DESC_COUNTER(VCPU, inject_stop_signal),
-	STATS_DESC_COUNTER(VCPU, instruction_epsw),
-	STATS_DESC_COUNTER(VCPU, instruction_gs),
-	STATS_DESC_COUNTER(VCPU, instruction_io_other),
-	STATS_DESC_COUNTER(VCPU, instruction_lpsw),
-	STATS_DESC_COUNTER(VCPU, instruction_lpswe),
-	STATS_DESC_COUNTER(VCPU, instruction_pfmf),
-	STATS_DESC_COUNTER(VCPU, instruction_ptff),
-	STATS_DESC_COUNTER(VCPU, instruction_sck),
-	STATS_DESC_COUNTER(VCPU, instruction_sckpf),
-	STATS_DESC_COUNTER(VCPU, instruction_stidp),
-	STATS_DESC_COUNTER(VCPU, instruction_spx),
-	STATS_DESC_COUNTER(VCPU, instruction_stpx),
-	STATS_DESC_COUNTER(VCPU, instruction_stap),
-	STATS_DESC_COUNTER(VCPU, instruction_iske),
-	STATS_DESC_COUNTER(VCPU, instruction_ri),
-	STATS_DESC_COUNTER(VCPU, instruction_rrbe),
-	STATS_DESC_COUNTER(VCPU, instruction_sske),
-	STATS_DESC_COUNTER(VCPU, instruction_ipte_interlock),
-	STATS_DESC_COUNTER(VCPU, instruction_stsi),
-	STATS_DESC_COUNTER(VCPU, instruction_stfl),
-	STATS_DESC_COUNTER(VCPU, instruction_tb),
-	STATS_DESC_COUNTER(VCPU, instruction_tpi),
-	STATS_DESC_COUNTER(VCPU, instruction_tprot),
-	STATS_DESC_COUNTER(VCPU, instruction_tsch),
-	STATS_DESC_COUNTER(VCPU, instruction_sie),
-	STATS_DESC_COUNTER(VCPU, instruction_essa),
-	STATS_DESC_COUNTER(VCPU, instruction_sthyi),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_sense),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_sense_running),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_external_call),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_emergency),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_cond_emergency),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_start),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_stop),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_stop_store_status),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_store_status),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_store_adtl_status),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_arch),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_prefix),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_restart),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_init_cpu_reset),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_cpu_reset),
-	STATS_DESC_COUNTER(VCPU, instruction_sigp_unknown),
-	STATS_DESC_COUNTER(VCPU, instruction_diagnose_10),
-	STATS_DESC_COUNTER(VCPU, instruction_diagnose_44),
-	STATS_DESC_COUNTER(VCPU, instruction_diagnose_9c),
-	STATS_DESC_COUNTER(VCPU, diag_9c_ignored),
-	STATS_DESC_COUNTER(VCPU, diag_9c_forward),
-	STATS_DESC_COUNTER(VCPU, instruction_diagnose_258),
-	STATS_DESC_COUNTER(VCPU, instruction_diagnose_308),
-	STATS_DESC_COUNTER(VCPU, instruction_diagnose_500),
-	STATS_DESC_COUNTER(VCPU, instruction_diagnose_other),
-	STATS_DESC_COUNTER(VCPU, pfault_sync)
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_userspace),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_null),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_external_request),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_io_request),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_external_interrupt),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_stop_request),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_validity),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_instruction),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_pei),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, halt_no_poll_steal),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_lctl),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_lctlg),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_stctl),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_stctg),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_program_interruption),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_instr_and_program),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_operation_exception),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_ckc),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_cputm),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_external_call),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_emergency_signal),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_service_signal),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_virtio),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_stop_signal),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_prefix_signal),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_restart_signal),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_program),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_io),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, deliver_machine_check),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exit_wait_state),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_ckc),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_cputm),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_external_call),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_emergency_signal),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_mchk),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_pfault_init),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_program),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_restart),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_set_prefix),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, inject_stop_signal),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_epsw),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_gs),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_io_other),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_lpsw),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_lpswe),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_pfmf),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_ptff),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sck),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sckpf),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_stidp),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_spx),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_stpx),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_stap),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_iske),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_ri),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_rrbe),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sske),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_ipte_interlock),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_stsi),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_stfl),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_tb),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_tpi),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_tprot),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_tsch),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sie),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_essa),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sthyi),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_sense),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_sense_running),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_external_call),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_emergency),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_cond_emergency),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_start),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_stop),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_stop_store_status),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_store_status),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_store_adtl_status),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_arch),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_prefix),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_restart),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_init_cpu_reset),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_cpu_reset),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_sigp_unknown),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_diagnose_10),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_diagnose_44),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_diagnose_9c),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, diag_9c_ignored),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, diag_9c_forward),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_diagnose_258),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_diagnose_308),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_diagnose_500),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, instruction_diagnose_other),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pfault_sync)
 };
 
 const struct kvm_stats_header kvm_vcpu_stats_header = {
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index f706621c35b8..072f5ba83170 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -233,19 +233,19 @@ EXPORT_SYMBOL_GPL(host_xss);
 
 const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
 	KVM_GENERIC_VM_STATS(),
-	STATS_DESC_COUNTER(VM, mmu_shadow_zapped),
-	STATS_DESC_COUNTER(VM, mmu_pte_write),
-	STATS_DESC_COUNTER(VM, mmu_pde_zapped),
-	STATS_DESC_COUNTER(VM, mmu_flooded),
-	STATS_DESC_COUNTER(VM, mmu_recycled),
-	STATS_DESC_COUNTER(VM, mmu_cache_miss),
-	STATS_DESC_ICOUNTER(VM, mmu_unsync),
-	STATS_DESC_ICOUNTER(VM, pages_4k),
-	STATS_DESC_ICOUNTER(VM, pages_2m),
-	STATS_DESC_ICOUNTER(VM, pages_1g),
-	STATS_DESC_ICOUNTER(VM, nx_lpage_splits),
-	STATS_DESC_PCOUNTER(VM, max_mmu_rmap_size),
-	STATS_DESC_PCOUNTER(VM, max_mmu_page_hash_collisions)
+	KVM_STAT(VM, CUMULATIVE, NONE, mmu_shadow_zapped),
+	KVM_STAT(VM, CUMULATIVE, NONE, mmu_pte_write),
+	KVM_STAT(VM, CUMULATIVE, NONE, mmu_pde_zapped),
+	KVM_STAT(VM, CUMULATIVE, NONE, mmu_flooded),
+	KVM_STAT(VM, CUMULATIVE, NONE, mmu_recycled),
+	KVM_STAT(VM, CUMULATIVE, NONE, mmu_cache_miss),
+	KVM_STAT(VM, INSTANT, NONE, mmu_unsync),
+	KVM_STAT(VM, INSTANT, NONE, pages_4k),
+	KVM_STAT(VM, INSTANT, NONE, pages_2m),
+	KVM_STAT(VM, INSTANT, NONE, pages_1g),
+	KVM_STAT(VM, INSTANT, NONE, nx_lpage_splits),
+	KVM_STAT(VM, PEAK, NONE, max_mmu_rmap_size),
+	KVM_STAT(VM, PEAK, NONE, max_mmu_page_hash_collisions)
 };
 
 const struct kvm_stats_header kvm_vm_stats_header = {
@@ -259,40 +259,40 @@ const struct kvm_stats_header kvm_vm_stats_header = {
 
 const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
 	KVM_GENERIC_VCPU_STATS(),
-	STATS_DESC_COUNTER(VCPU, pf_taken),
-	STATS_DESC_COUNTER(VCPU, pf_fixed),
-	STATS_DESC_COUNTER(VCPU, pf_emulate),
-	STATS_DESC_COUNTER(VCPU, pf_spurious),
-	STATS_DESC_COUNTER(VCPU, pf_fast),
-	STATS_DESC_COUNTER(VCPU, pf_mmio_spte_created),
-	STATS_DESC_COUNTER(VCPU, pf_guest),
-	STATS_DESC_COUNTER(VCPU, tlb_flush),
-	STATS_DESC_COUNTER(VCPU, invlpg),
-	STATS_DESC_COUNTER(VCPU, exits),
-	STATS_DESC_COUNTER(VCPU, io_exits),
-	STATS_DESC_COUNTER(VCPU, mmio_exits),
-	STATS_DESC_COUNTER(VCPU, signal_exits),
-	STATS_DESC_COUNTER(VCPU, irq_window_exits),
-	STATS_DESC_COUNTER(VCPU, nmi_window_exits),
-	STATS_DESC_COUNTER(VCPU, l1d_flush),
-	STATS_DESC_COUNTER(VCPU, halt_exits),
-	STATS_DESC_COUNTER(VCPU, request_irq_exits),
-	STATS_DESC_COUNTER(VCPU, irq_exits),
-	STATS_DESC_COUNTER(VCPU, host_state_reload),
-	STATS_DESC_COUNTER(VCPU, fpu_reload),
-	STATS_DESC_COUNTER(VCPU, insn_emulation),
-	STATS_DESC_COUNTER(VCPU, insn_emulation_fail),
-	STATS_DESC_COUNTER(VCPU, hypercalls),
-	STATS_DESC_COUNTER(VCPU, irq_injections),
-	STATS_DESC_COUNTER(VCPU, nmi_injections),
-	STATS_DESC_COUNTER(VCPU, req_event),
-	STATS_DESC_COUNTER(VCPU, nested_run),
-	STATS_DESC_COUNTER(VCPU, directed_yield_attempted),
-	STATS_DESC_COUNTER(VCPU, directed_yield_successful),
-	STATS_DESC_COUNTER(VCPU, preemption_reported),
-	STATS_DESC_COUNTER(VCPU, preemption_other),
-	STATS_DESC_IBOOLEAN(VCPU, guest_mode),
-	STATS_DESC_COUNTER(VCPU, notify_window_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pf_taken),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pf_fixed),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pf_emulate),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pf_spurious),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pf_fast),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pf_mmio_spte_created),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, pf_guest),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, tlb_flush),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, invlpg),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, io_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, mmio_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, signal_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, irq_window_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, nmi_window_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, l1d_flush),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, halt_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, request_irq_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, irq_exits),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, host_state_reload),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, fpu_reload),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, insn_emulation),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, insn_emulation_fail),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, hypercalls),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, irq_injections),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, nmi_injections),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, req_event),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, nested_run),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, directed_yield_attempted),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, directed_yield_successful),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, preemption_reported),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, preemption_other),
+	KVM_STAT(VCPU, INSTANT, BOOLEAN, guest_mode),
+	KVM_STAT(VCPU, CUMULATIVE, NONE, notify_window_exits),
 };
 
 const struct kvm_stats_header kvm_vcpu_stats_header = {
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 8ada23756b0e..02b1151c2753 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -1785,80 +1785,43 @@ struct _kvm_stats_desc {
 		},							       \
 		.name = #stat,						       \
 	}
+
 /* SCOPE: VM, VM_GENERIC, VCPU, VCPU_GENERIC */
 #define STATS_DESC(SCOPE, stat, type, unit, base, exp, sz, bsz)		       \
 	SCOPE##_STATS_DESC(stat, type, unit, base, exp, sz, bsz)
 
-#define STATS_DESC_CUMULATIVE(SCOPE, name, unit, base, exponent)	       \
-	STATS_DESC(SCOPE, name, KVM_STATS_TYPE_CUMULATIVE,		       \
-		unit, base, exponent, 1, 0)
-#define STATS_DESC_INSTANT(SCOPE, name, unit, base, exponent)		       \
-	STATS_DESC(SCOPE, name, KVM_STATS_TYPE_INSTANT,			       \
-		unit, base, exponent, 1, 0)
-#define STATS_DESC_PEAK(SCOPE, name, unit, base, exponent)		       \
-	STATS_DESC(SCOPE, name, KVM_STATS_TYPE_PEAK,			       \
-		unit, base, exponent, 1, 0)
-#define STATS_DESC_LINEAR_HIST(SCOPE, name, unit, base, exponent, sz, bsz)     \
-	STATS_DESC(SCOPE, name, KVM_STATS_TYPE_LINEAR_HIST,		       \
-		unit, base, exponent, sz, bsz)
-#define STATS_DESC_LOG_HIST(SCOPE, name, unit, base, exponent, sz)	       \
-	STATS_DESC(SCOPE, name, KVM_STATS_TYPE_LOG_HIST,		       \
-		unit, base, exponent, sz, 0)
-
-/* Cumulative counter, read/write */
-#define STATS_DESC_COUNTER(SCOPE, name)					       \
-	STATS_DESC_CUMULATIVE(SCOPE, name, KVM_STATS_UNIT_NONE,		       \
-		KVM_STATS_BASE_POW10, 0)
-/* Instantaneous counter, read only */
-#define STATS_DESC_ICOUNTER(SCOPE, name)				       \
-	STATS_DESC_INSTANT(SCOPE, name, KVM_STATS_UNIT_NONE,		       \
-		KVM_STATS_BASE_POW10, 0)
-/* Peak counter, read/write */
-#define STATS_DESC_PCOUNTER(SCOPE, name)				       \
-	STATS_DESC_PEAK(SCOPE, name, KVM_STATS_UNIT_NONE,		       \
-		KVM_STATS_BASE_POW10, 0)
-
-/* Instantaneous boolean value, read only */
-#define STATS_DESC_IBOOLEAN(SCOPE, name)				       \
-	STATS_DESC_INSTANT(SCOPE, name, KVM_STATS_UNIT_BOOLEAN,		       \
-		KVM_STATS_BASE_POW10, 0)
-/* Peak (sticky) boolean value, read/write */
-#define STATS_DESC_PBOOLEAN(SCOPE, name)				       \
-	STATS_DESC_PEAK(SCOPE, name, KVM_STATS_UNIT_BOOLEAN,		       \
-		KVM_STATS_BASE_POW10, 0)
-
-/* Cumulative time in nanosecond */
-#define STATS_DESC_TIME_NSEC(SCOPE, name)				       \
-	STATS_DESC_CUMULATIVE(SCOPE, name, KVM_STATS_UNIT_SECONDS,	       \
-		KVM_STATS_BASE_POW10, -9)
-/* Linear histogram for time in nanosecond */
-#define STATS_DESC_LINHIST_TIME_NSEC(SCOPE, name, sz, bsz)		       \
-	STATS_DESC_LINEAR_HIST(SCOPE, name, KVM_STATS_UNIT_SECONDS,	       \
-		KVM_STATS_BASE_POW10, -9, sz, bsz)
-/* Logarithmic histogram for time in nanosecond */
-#define STATS_DESC_LOGHIST_TIME_NSEC(SCOPE, name, sz)			       \
-	STATS_DESC_LOG_HIST(SCOPE, name, KVM_STATS_UNIT_SECONDS,	       \
-		KVM_STATS_BASE_POW10, -9, sz)
+#define KVM_STAT(SCOPE, TYPE, UNIT, _stat)				       \
+	STATS_DESC(SCOPE, _stat, KVM_STATS_TYPE_##TYPE,			       \
+		   KVM_STATS_UNIT_##UNIT, KVM_STATS_BASE_POW10, 0, 1, 0)
+
+#define KVM_STAT_NSEC(SCOPE, _stat)					       \
+	STATS_DESC(SCOPE, _stat, KVM_STATS_TYPE_CUMULATIVE,		       \
+		   KVM_STATS_UNIT_SECONDS, KVM_STATS_BASE_POW10, -9, 1, 0)
+
+#define KVM_HIST_NSEC(SCOPE, TYPE, _stat, _size, _bucket_size)		       \
+	STATS_DESC(VCPU_GENERIC, _stat, KVM_STATS_TYPE_##TYPE##_HIST,	       \
+		   KVM_STATS_UNIT_SECONDS, KVM_STATS_BASE_POW10, -9,	       \
+		   _size, _bucket_size)
 
 #define KVM_GENERIC_VM_STATS()						       \
-	STATS_DESC_COUNTER(VM_GENERIC, remote_tlb_flush),		       \
-	STATS_DESC_COUNTER(VM_GENERIC, remote_tlb_flush_requests)
+	KVM_STAT(VM_GENERIC, CUMULATIVE, NONE, remote_tlb_flush),	       \
+	KVM_STAT(VM_GENERIC, CUMULATIVE, NONE, remote_tlb_flush_requests)
+
+#define KVM_HALT_POLL_HIST(_stat)					       \
+	KVM_HIST_NSEC(VCPU_GENERIC, LOG, _stat, HALT_POLL_HIST_COUNT, 0)
 
 #define KVM_GENERIC_VCPU_STATS()					       \
-	STATS_DESC_COUNTER(VCPU_GENERIC, halt_successful_poll),		       \
-	STATS_DESC_COUNTER(VCPU_GENERIC, halt_attempted_poll),		       \
-	STATS_DESC_COUNTER(VCPU_GENERIC, halt_poll_invalid),		       \
-	STATS_DESC_COUNTER(VCPU_GENERIC, halt_wakeup),			       \
-	STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_poll_success_ns),	       \
-	STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_poll_fail_ns),		       \
-	STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_wait_ns),		       \
-	STATS_DESC_LOGHIST_TIME_NSEC(VCPU_GENERIC, halt_poll_success_hist,     \
-			HALT_POLL_HIST_COUNT),				       \
-	STATS_DESC_LOGHIST_TIME_NSEC(VCPU_GENERIC, halt_poll_fail_hist,	       \
-			HALT_POLL_HIST_COUNT),				       \
-	STATS_DESC_LOGHIST_TIME_NSEC(VCPU_GENERIC, halt_wait_hist,	       \
-			HALT_POLL_HIST_COUNT),				       \
-	STATS_DESC_IBOOLEAN(VCPU_GENERIC, blocking)
+	KVM_STAT(VCPU_GENERIC, CUMULATIVE, NONE, halt_successful_poll),	       \
+	KVM_STAT(VCPU_GENERIC, CUMULATIVE, NONE, halt_attempted_poll),	       \
+	KVM_STAT(VCPU_GENERIC, CUMULATIVE, NONE, halt_poll_invalid),	       \
+	KVM_STAT(VCPU_GENERIC, CUMULATIVE, NONE, halt_wakeup),		       \
+	KVM_STAT_NSEC(VCPU_GENERIC, halt_poll_success_ns),		       \
+	KVM_STAT_NSEC(VCPU_GENERIC, halt_poll_fail_ns),			       \
+	KVM_STAT_NSEC(VCPU_GENERIC, halt_wait_ns),			       \
+	KVM_HALT_POLL_HIST(halt_poll_success_hist),			       \
+	KVM_HALT_POLL_HIST(halt_poll_fail_hist),			       \
+	KVM_HALT_POLL_HIST(halt_wait_hist),				       \
+	KVM_STAT(VCPU_GENERIC, INSTANT, BOOLEAN, blocking)
 
 extern struct dentry *kvm_debugfs_dir;
 
-- 
2.40.0.rc0.216.gc4246ad0f0-goog




More information about the linux-riscv mailing list