Commit 812756a8 authored by Emanuele Giuseppe Esposito's avatar Emanuele Giuseppe Esposito Committed by Paolo Bonzini

kvm_host: unify VM_STAT and VCPU_STAT definitions in a single place

The macros VM_STAT and VCPU_STAT are redundantly implemented in multiple
files, each used by a different architecure to initialize the debugfs
entries for statistics. Since they all have the same purpose, they can be
unified in a single common definition in include/linux/kvm_host.h
Signed-off-by: default avatarEmanuele Giuseppe Esposito <eesposit@redhat.com>
Message-Id: <20200414155625.20559-1-eesposit@redhat.com>
Acked-by: default avatarCornelia Huck <cohuck@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 63d04348
...@@ -29,20 +29,17 @@ ...@@ -29,20 +29,17 @@
#include "trace.h" #include "trace.h"
#define VM_STAT(x) { #x, offsetof(struct kvm, stat.x), KVM_STAT_VM }
#define VCPU_STAT(x) { #x, offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU }
struct kvm_stats_debugfs_item debugfs_entries[] = { struct kvm_stats_debugfs_item debugfs_entries[] = {
VCPU_STAT(halt_successful_poll), VCPU_STAT("halt_successful_poll", halt_successful_poll),
VCPU_STAT(halt_attempted_poll), VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
VCPU_STAT(halt_poll_invalid), VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
VCPU_STAT(halt_wakeup), VCPU_STAT("halt_wakeup", halt_wakeup),
VCPU_STAT(hvc_exit_stat), VCPU_STAT("hvc_exit_stat", hvc_exit_stat),
VCPU_STAT(wfe_exit_stat), VCPU_STAT("wfe_exit_stat", wfe_exit_stat),
VCPU_STAT(wfi_exit_stat), VCPU_STAT("wfi_exit_stat", wfi_exit_stat),
VCPU_STAT(mmio_exit_user), VCPU_STAT("mmio_exit_user", mmio_exit_user),
VCPU_STAT(mmio_exit_kernel), VCPU_STAT("mmio_exit_kernel", mmio_exit_kernel),
VCPU_STAT(exits), VCPU_STAT("exits", exits),
{ NULL } { NULL }
}; };
......
...@@ -39,40 +39,39 @@ ...@@ -39,40 +39,39 @@
#define VECTORSPACING 0x100 /* for EI/VI mode */ #define VECTORSPACING 0x100 /* for EI/VI mode */
#endif #endif
#define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x)
struct kvm_stats_debugfs_item debugfs_entries[] = { struct kvm_stats_debugfs_item debugfs_entries[] = {
{ "wait", VCPU_STAT(wait_exits), KVM_STAT_VCPU }, VCPU_STAT("wait", wait_exits),
{ "cache", VCPU_STAT(cache_exits), KVM_STAT_VCPU }, VCPU_STAT("cache", cache_exits),
{ "signal", VCPU_STAT(signal_exits), KVM_STAT_VCPU }, VCPU_STAT("signal", signal_exits),
{ "interrupt", VCPU_STAT(int_exits), KVM_STAT_VCPU }, VCPU_STAT("interrupt", int_exits),
{ "cop_unusable", VCPU_STAT(cop_unusable_exits), KVM_STAT_VCPU }, VCPU_STAT("cop_unusable", cop_unusable_exits),
{ "tlbmod", VCPU_STAT(tlbmod_exits), KVM_STAT_VCPU }, VCPU_STAT("tlbmod", tlbmod_exits),
{ "tlbmiss_ld", VCPU_STAT(tlbmiss_ld_exits), KVM_STAT_VCPU }, VCPU_STAT("tlbmiss_ld", tlbmiss_ld_exits),
{ "tlbmiss_st", VCPU_STAT(tlbmiss_st_exits), KVM_STAT_VCPU }, VCPU_STAT("tlbmiss_st", tlbmiss_st_exits),
{ "addrerr_st", VCPU_STAT(addrerr_st_exits), KVM_STAT_VCPU }, VCPU_STAT("addrerr_st", addrerr_st_exits),
{ "addrerr_ld", VCPU_STAT(addrerr_ld_exits), KVM_STAT_VCPU }, VCPU_STAT("addrerr_ld", addrerr_ld_exits),
{ "syscall", VCPU_STAT(syscall_exits), KVM_STAT_VCPU }, VCPU_STAT("syscall", syscall_exits),
{ "resvd_inst", VCPU_STAT(resvd_inst_exits), KVM_STAT_VCPU }, VCPU_STAT("resvd_inst", resvd_inst_exits),
{ "break_inst", VCPU_STAT(break_inst_exits), KVM_STAT_VCPU }, VCPU_STAT("break_inst", break_inst_exits),
{ "trap_inst", VCPU_STAT(trap_inst_exits), KVM_STAT_VCPU }, VCPU_STAT("trap_inst", trap_inst_exits),
{ "msa_fpe", VCPU_STAT(msa_fpe_exits), KVM_STAT_VCPU }, VCPU_STAT("msa_fpe", msa_fpe_exits),
{ "fpe", VCPU_STAT(fpe_exits), KVM_STAT_VCPU }, VCPU_STAT("fpe", fpe_exits),
{ "msa_disabled", VCPU_STAT(msa_disabled_exits), KVM_STAT_VCPU }, VCPU_STAT("msa_disabled", msa_disabled_exits),
{ "flush_dcache", VCPU_STAT(flush_dcache_exits), KVM_STAT_VCPU }, VCPU_STAT("flush_dcache", flush_dcache_exits),
#ifdef CONFIG_KVM_MIPS_VZ #ifdef CONFIG_KVM_MIPS_VZ
{ "vz_gpsi", VCPU_STAT(vz_gpsi_exits), KVM_STAT_VCPU }, VCPU_STAT("vz_gpsi", vz_gpsi_exits),
{ "vz_gsfc", VCPU_STAT(vz_gsfc_exits), KVM_STAT_VCPU }, VCPU_STAT("vz_gsfc", vz_gsfc_exits),
{ "vz_hc", VCPU_STAT(vz_hc_exits), KVM_STAT_VCPU }, VCPU_STAT("vz_hc", vz_hc_exits),
{ "vz_grr", VCPU_STAT(vz_grr_exits), KVM_STAT_VCPU }, VCPU_STAT("vz_grr", vz_grr_exits),
{ "vz_gva", VCPU_STAT(vz_gva_exits), KVM_STAT_VCPU }, VCPU_STAT("vz_gva", vz_gva_exits),
{ "vz_ghfc", VCPU_STAT(vz_ghfc_exits), KVM_STAT_VCPU }, VCPU_STAT("vz_ghfc", vz_ghfc_exits),
{ "vz_gpa", VCPU_STAT(vz_gpa_exits), KVM_STAT_VCPU }, VCPU_STAT("vz_gpa", vz_gpa_exits),
{ "vz_resvd", VCPU_STAT(vz_resvd_exits), KVM_STAT_VCPU }, VCPU_STAT("vz_resvd", vz_resvd_exits),
#endif #endif
{ "halt_successful_poll", VCPU_STAT(halt_successful_poll), KVM_STAT_VCPU }, VCPU_STAT("halt_successful_poll", halt_successful_poll),
{ "halt_attempted_poll", VCPU_STAT(halt_attempted_poll), KVM_STAT_VCPU }, VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
{ "halt_poll_invalid", VCPU_STAT(halt_poll_invalid), KVM_STAT_VCPU }, VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
{ "halt_wakeup", VCPU_STAT(halt_wakeup), KVM_STAT_VCPU }, VCPU_STAT("halt_wakeup", halt_wakeup),
{NULL} {NULL}
}; };
......
...@@ -36,41 +36,38 @@ ...@@ -36,41 +36,38 @@
#include "book3s.h" #include "book3s.h"
#include "trace.h" #include "trace.h"
#define VM_STAT(x, ...) offsetof(struct kvm, stat.x), KVM_STAT_VM, ## __VA_ARGS__
#define VCPU_STAT(x, ...) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU, ## __VA_ARGS__
/* #define EXIT_DEBUG */ /* #define EXIT_DEBUG */
struct kvm_stats_debugfs_item debugfs_entries[] = { struct kvm_stats_debugfs_item debugfs_entries[] = {
{ "exits", VCPU_STAT(sum_exits) }, VCPU_STAT("exits", sum_exits),
{ "mmio", VCPU_STAT(mmio_exits) }, VCPU_STAT("mmio", mmio_exits),
{ "sig", VCPU_STAT(signal_exits) }, VCPU_STAT("sig", signal_exits),
{ "sysc", VCPU_STAT(syscall_exits) }, VCPU_STAT("sysc", syscall_exits),
{ "inst_emu", VCPU_STAT(emulated_inst_exits) }, VCPU_STAT("inst_emu", emulated_inst_exits),
{ "dec", VCPU_STAT(dec_exits) }, VCPU_STAT("dec", dec_exits),
{ "ext_intr", VCPU_STAT(ext_intr_exits) }, VCPU_STAT("ext_intr", ext_intr_exits),
{ "queue_intr", VCPU_STAT(queue_intr) }, VCPU_STAT("queue_intr", queue_intr),
{ "halt_poll_success_ns", VCPU_STAT(halt_poll_success_ns) }, VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
{ "halt_poll_fail_ns", VCPU_STAT(halt_poll_fail_ns) }, VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
{ "halt_wait_ns", VCPU_STAT(halt_wait_ns) }, VCPU_STAT("halt_wait_ns", halt_wait_ns),
{ "halt_successful_poll", VCPU_STAT(halt_successful_poll), }, VCPU_STAT("halt_successful_poll", halt_successful_poll),
{ "halt_attempted_poll", VCPU_STAT(halt_attempted_poll), }, VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
{ "halt_successful_wait", VCPU_STAT(halt_successful_wait) }, VCPU_STAT("halt_successful_wait", halt_successful_wait),
{ "halt_poll_invalid", VCPU_STAT(halt_poll_invalid) }, VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
{ "halt_wakeup", VCPU_STAT(halt_wakeup) }, VCPU_STAT("halt_wakeup", halt_wakeup),
{ "pf_storage", VCPU_STAT(pf_storage) }, VCPU_STAT("pf_storage", pf_storage),
{ "sp_storage", VCPU_STAT(sp_storage) }, VCPU_STAT("sp_storage", sp_storage),
{ "pf_instruc", VCPU_STAT(pf_instruc) }, VCPU_STAT("pf_instruc", pf_instruc),
{ "sp_instruc", VCPU_STAT(sp_instruc) }, VCPU_STAT("sp_instruc", sp_instruc),
{ "ld", VCPU_STAT(ld) }, VCPU_STAT("ld", ld),
{ "ld_slow", VCPU_STAT(ld_slow) }, VCPU_STAT("ld_slow", ld_slow),
{ "st", VCPU_STAT(st) }, VCPU_STAT("st", st),
{ "st_slow", VCPU_STAT(st_slow) }, VCPU_STAT("st_slow", st_slow),
{ "pthru_all", VCPU_STAT(pthru_all) }, VCPU_STAT("pthru_all", pthru_all),
{ "pthru_host", VCPU_STAT(pthru_host) }, VCPU_STAT("pthru_host", pthru_host),
{ "pthru_bad_aff", VCPU_STAT(pthru_bad_aff) }, VCPU_STAT("pthru_bad_aff", pthru_bad_aff),
{ "largepages_2M", VM_STAT(num_2M_pages, .mode = 0444) }, VM_STAT("largepages_2M", num_2M_pages, .mode = 0444),
{ "largepages_1G", VM_STAT(num_1G_pages, .mode = 0444) }, VM_STAT("largepages_1G", num_1G_pages, .mode = 0444),
{ NULL } { NULL }
}; };
......
...@@ -35,29 +35,26 @@ ...@@ -35,29 +35,26 @@
unsigned long kvmppc_booke_handlers; unsigned long kvmppc_booke_handlers;
#define VM_STAT(x) offsetof(struct kvm, stat.x), KVM_STAT_VM
#define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
struct kvm_stats_debugfs_item debugfs_entries[] = { struct kvm_stats_debugfs_item debugfs_entries[] = {
{ "mmio", VCPU_STAT(mmio_exits) }, VCPU_STAT("mmio", mmio_exits),
{ "sig", VCPU_STAT(signal_exits) }, VCPU_STAT("sig", signal_exits),
{ "itlb_r", VCPU_STAT(itlb_real_miss_exits) }, VCPU_STAT("itlb_r", itlb_real_miss_exits),
{ "itlb_v", VCPU_STAT(itlb_virt_miss_exits) }, VCPU_STAT("itlb_v", itlb_virt_miss_exits),
{ "dtlb_r", VCPU_STAT(dtlb_real_miss_exits) }, VCPU_STAT("dtlb_r", dtlb_real_miss_exits),
{ "dtlb_v", VCPU_STAT(dtlb_virt_miss_exits) }, VCPU_STAT("dtlb_v", dtlb_virt_miss_exits),
{ "sysc", VCPU_STAT(syscall_exits) }, VCPU_STAT("sysc", syscall_exits),
{ "isi", VCPU_STAT(isi_exits) }, VCPU_STAT("isi", isi_exits),
{ "dsi", VCPU_STAT(dsi_exits) }, VCPU_STAT("dsi", dsi_exits),
{ "inst_emu", VCPU_STAT(emulated_inst_exits) }, VCPU_STAT("inst_emu", emulated_inst_exits),
{ "dec", VCPU_STAT(dec_exits) }, VCPU_STAT("dec", dec_exits),
{ "ext_intr", VCPU_STAT(ext_intr_exits) }, VCPU_STAT("ext_intr", ext_intr_exits),
{ "halt_successful_poll", VCPU_STAT(halt_successful_poll) }, VCPU_STAT("halt_successful_poll", halt_successful_poll),
{ "halt_attempted_poll", VCPU_STAT(halt_attempted_poll) }, VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
{ "halt_poll_invalid", VCPU_STAT(halt_poll_invalid) }, VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
{ "halt_wakeup", VCPU_STAT(halt_wakeup) }, VCPU_STAT("halt_wakeup", halt_wakeup),
{ "doorbell", VCPU_STAT(dbell_exits) }, VCPU_STAT("doorbell", dbell_exits),
{ "guest doorbell", VCPU_STAT(gdbell_exits) }, VCPU_STAT("guest doorbell", gdbell_exits),
{ "remote_tlb_flush", VM_STAT(remote_tlb_flush) }, VM_STAT("remote_tlb_flush", remote_tlb_flush),
{ NULL } { NULL }
}; };
......
This diff is collapsed.
...@@ -97,9 +97,6 @@ static u64 __read_mostly efer_reserved_bits = ~((u64)EFER_SCE); ...@@ -97,9 +97,6 @@ static u64 __read_mostly efer_reserved_bits = ~((u64)EFER_SCE);
static u64 __read_mostly cr4_reserved_bits = CR4_RESERVED_BITS; static u64 __read_mostly cr4_reserved_bits = CR4_RESERVED_BITS;
#define VM_STAT(x, ...) offsetof(struct kvm, stat.x), KVM_STAT_VM, ## __VA_ARGS__
#define VCPU_STAT(x, ...) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU, ## __VA_ARGS__
#define KVM_X2APIC_API_VALID_FLAGS (KVM_X2APIC_API_USE_32BIT_IDS | \ #define KVM_X2APIC_API_VALID_FLAGS (KVM_X2APIC_API_USE_32BIT_IDS | \
KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK) KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK)
...@@ -194,45 +191,44 @@ u64 __read_mostly supported_xss; ...@@ -194,45 +191,44 @@ u64 __read_mostly supported_xss;
EXPORT_SYMBOL_GPL(supported_xss); EXPORT_SYMBOL_GPL(supported_xss);
struct kvm_stats_debugfs_item debugfs_entries[] = { struct kvm_stats_debugfs_item debugfs_entries[] = {
{ "pf_fixed", VCPU_STAT(pf_fixed) }, VCPU_STAT("pf_fixed", pf_fixed),
{ "pf_guest", VCPU_STAT(pf_guest) }, VCPU_STAT("pf_guest", pf_guest),
{ "tlb_flush", VCPU_STAT(tlb_flush) }, VCPU_STAT("tlb_flush", tlb_flush),
{ "invlpg", VCPU_STAT(invlpg) }, VCPU_STAT("invlpg", invlpg),
{ "exits", VCPU_STAT(exits) }, VCPU_STAT("exits", exits),
{ "io_exits", VCPU_STAT(io_exits) }, VCPU_STAT("io_exits", io_exits),
{ "mmio_exits", VCPU_STAT(mmio_exits) }, VCPU_STAT("mmio_exits", mmio_exits),
{ "signal_exits", VCPU_STAT(signal_exits) }, VCPU_STAT("signal_exits", signal_exits),
{ "irq_window", VCPU_STAT(irq_window_exits) }, VCPU_STAT("irq_window", irq_window_exits),
{ "nmi_window", VCPU_STAT(nmi_window_exits) }, VCPU_STAT("nmi_window", nmi_window_exits),
{ "halt_exits", VCPU_STAT(halt_exits) }, VCPU_STAT("halt_exits", halt_exits),
{ "halt_successful_poll", VCPU_STAT(halt_successful_poll) }, VCPU_STAT("halt_successful_poll", halt_successful_poll),
{ "halt_attempted_poll", VCPU_STAT(halt_attempted_poll) }, VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
{ "halt_poll_invalid", VCPU_STAT(halt_poll_invalid) }, VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
{ "halt_wakeup", VCPU_STAT(halt_wakeup) }, VCPU_STAT("halt_wakeup", halt_wakeup),
{ "hypercalls", VCPU_STAT(hypercalls) }, VCPU_STAT("hypercalls", hypercalls),
{ "request_irq", VCPU_STAT(request_irq_exits) }, VCPU_STAT("request_irq", request_irq_exits),
{ "irq_exits", VCPU_STAT(irq_exits) }, VCPU_STAT("irq_exits", irq_exits),
{ "host_state_reload", VCPU_STAT(host_state_reload) }, VCPU_STAT("host_state_reload", host_state_reload),
{ "fpu_reload", VCPU_STAT(fpu_reload) }, VCPU_STAT("fpu_reload", fpu_reload),
{ "insn_emulation", VCPU_STAT(insn_emulation) }, VCPU_STAT("insn_emulation", insn_emulation),
{ "insn_emulation_fail", VCPU_STAT(insn_emulation_fail) }, VCPU_STAT("insn_emulation_fail", insn_emulation_fail),
{ "irq_injections", VCPU_STAT(irq_injections) }, VCPU_STAT("irq_injections", irq_injections),
{ "nmi_injections", VCPU_STAT(nmi_injections) }, VCPU_STAT("nmi_injections", nmi_injections),
{ "req_event", VCPU_STAT(req_event) }, VCPU_STAT("req_event", req_event),
{ "l1d_flush", VCPU_STAT(l1d_flush) }, VCPU_STAT("l1d_flush", l1d_flush),
{ "mmu_shadow_zapped", VM_STAT(mmu_shadow_zapped) }, VM_STAT("mmu_shadow_zapped", mmu_shadow_zapped),
{ "mmu_pte_write", VM_STAT(mmu_pte_write) }, VM_STAT("mmu_pte_write", mmu_pte_write),
{ "mmu_pte_updated", VM_STAT(mmu_pte_updated) }, VM_STAT("mmu_pte_updated", mmu_pte_updated),
{ "mmu_pde_zapped", VM_STAT(mmu_pde_zapped) }, VM_STAT("mmu_pde_zapped", mmu_pde_zapped),
{ "mmu_flooded", VM_STAT(mmu_flooded) }, VM_STAT("mmu_flooded", mmu_flooded),
{ "mmu_recycled", VM_STAT(mmu_recycled) }, VM_STAT("mmu_recycled", mmu_recycled),
{ "mmu_cache_miss", VM_STAT(mmu_cache_miss) }, VM_STAT("mmu_cache_miss", mmu_cache_miss),
{ "mmu_unsync", VM_STAT(mmu_unsync) }, VM_STAT("mmu_unsync", mmu_unsync),
{ "remote_tlb_flush", VM_STAT(remote_tlb_flush) }, VM_STAT("remote_tlb_flush", remote_tlb_flush),
{ "largepages", VM_STAT(lpages, .mode = 0444) }, VM_STAT("largepages", lpages, .mode = 0444),
{ "nx_largepages_splitted", VM_STAT(nx_lpage_splits, .mode = 0444) }, VM_STAT("nx_largepages_splitted", nx_lpage_splits, .mode = 0444),
{ "max_mmu_page_hash_collisions", VM_STAT("max_mmu_page_hash_collisions", max_mmu_page_hash_collisions),
VM_STAT(max_mmu_page_hash_collisions) },
{ NULL } { NULL }
}; };
......
...@@ -1130,6 +1130,11 @@ struct kvm_stats_debugfs_item { ...@@ -1130,6 +1130,11 @@ struct kvm_stats_debugfs_item {
#define KVM_DBGFS_GET_MODE(dbgfs_item) \ #define KVM_DBGFS_GET_MODE(dbgfs_item) \
((dbgfs_item)->mode ? (dbgfs_item)->mode : 0644) ((dbgfs_item)->mode ? (dbgfs_item)->mode : 0644)
#define VM_STAT(n, x, ...) \
{ n, offsetof(struct kvm, stat.x), KVM_STAT_VM, ## __VA_ARGS__ }
#define VCPU_STAT(n, x, ...) \
{ n, offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU, ## __VA_ARGS__ }
extern struct kvm_stats_debugfs_item debugfs_entries[]; extern struct kvm_stats_debugfs_item debugfs_entries[];
extern struct dentry *kvm_debugfs_dir; extern struct dentry *kvm_debugfs_dir;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment