Skip to content
Permalink
Browse files
KVM: stats: Make sure no missing or mismatched binary stats definition
Add static check to make sure the number of stats descriptors equals
the number of stats defined in vm/vcpu stats structures.
Add offset field in stats descriptor to let us define stats
descriptors freely, don't have to be in the same order as
stats in vm/vcpu stats structures.
Also fix some missing/mismatched stats from previous patch.

Signed-off-by: Jing Zhang <jingzhangos@google.com>
  • Loading branch information
jingzhangos authored and intel-lab-lkp committed Jun 16, 2021
1 parent 39be2e2 commit 2145147a4e85c8196c004804d103c1a3d7adeffe
Show file tree
Hide file tree
Showing 8 changed files with 342 additions and 283 deletions.
@@ -31,6 +31,8 @@
struct _kvm_stats_desc kvm_vm_stats_desc[] = {
KVM_GENERIC_VM_STATS()
};
static_assert(ARRAY_SIZE(kvm_vm_stats_desc) ==
sizeof(struct kvm_vm_stat) / sizeof(u64));

struct _kvm_stats_header kvm_vm_stats_header = {
{
@@ -44,13 +46,15 @@ struct _kvm_stats_header kvm_vm_stats_header = {

struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
KVM_GENERIC_VCPU_STATS(),
STATS_DESC_COUNTER("hvc_exit_stat"),
STATS_DESC_COUNTER("wfe_exit_stat"),
STATS_DESC_COUNTER("wfi_exit_stat"),
STATS_DESC_COUNTER("mmio_exit_user"),
STATS_DESC_COUNTER("mmio_exit_kernel"),
STATS_DESC_COUNTER("exits")
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, exits)
};
static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==
sizeof(struct kvm_vcpu_stat) / sizeof(u64));

struct _kvm_stats_header kvm_vcpu_stats_header = {
{
@@ -41,6 +41,8 @@
struct _kvm_stats_desc kvm_vm_stats_desc[] = {
KVM_GENERIC_VM_STATS()
};
static_assert(ARRAY_SIZE(kvm_vm_stats_desc) ==
sizeof(struct kvm_vm_stat) / sizeof(u64));

struct _kvm_stats_header kvm_vm_stats_header = {
{
@@ -54,38 +56,38 @@ struct _kvm_stats_header kvm_vm_stats_header = {

struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
KVM_GENERIC_VCPU_STATS(),
STATS_DESC_COUNTER("wait_exits"),
STATS_DESC_COUNTER("cache_exits"),
STATS_DESC_COUNTER("signal_exits"),
STATS_DESC_COUNTER("int_exits"),
STATS_DESC_COUNTER("cop_unusable_exits"),
STATS_DESC_COUNTER("tlbmod_exits"),
STATS_DESC_COUNTER("tlbmiss_ld_exits"),
STATS_DESC_COUNTER("tlbmiss_st_exits"),
STATS_DESC_COUNTER("addrerr_st_exits"),
STATS_DESC_COUNTER("addrerr_ld_exits"),
STATS_DESC_COUNTER("syscall_exits"),
STATS_DESC_COUNTER("resvd_inst_exits"),
STATS_DESC_COUNTER("break_inst_exits"),
STATS_DESC_COUNTER("trap_inst_exits"),
STATS_DESC_COUNTER("msa_fpe_exits"),
STATS_DESC_COUNTER("fpe_exits"),
STATS_DESC_COUNTER("msa_disabled_exits"),
STATS_DESC_COUNTER("flush_dcache_exits"),
#ifdef CONFIG_KVM_MIPS_VZ
STATS_DESC_COUNTER("vz_gpsi_exits"),
STATS_DESC_COUNTER("vz_gsfc_exits"),
STATS_DESC_COUNTER("vz_hc_exits"),
STATS_DESC_COUNTER("vz_grr_exits"),
STATS_DESC_COUNTER("vz_gva_exits"),
STATS_DESC_COUNTER("vz_ghfc_exits"),
STATS_DESC_COUNTER("vz_gpa_exits"),
STATS_DESC_COUNTER("vz_resvd_exits"),
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),
#ifdef CONFIG_CPU_LOONGSON64
STATS_DESC_COUNTER("vz_cpucfg_exits"),
#endif
STATS_DESC_COUNTER(VCPU, vz_cpucfg_exits),
#endif
};
static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==
sizeof(struct kvm_vcpu_stat) / sizeof(u64));

struct _kvm_stats_header kvm_vcpu_stats_header = {
{
@@ -40,9 +40,11 @@

struct _kvm_stats_desc kvm_vm_stats_desc[] = {
KVM_GENERIC_VM_STATS(),
STATS_DESC_ICOUNTER("num_2M_pages"),
STATS_DESC_ICOUNTER("num_1G_pages")
STATS_DESC_ICOUNTER(VM, num_2M_pages),
STATS_DESC_ICOUNTER(VM, num_1G_pages)
};
static_assert(ARRAY_SIZE(kvm_vm_stats_desc) ==
sizeof(struct kvm_vm_stat) / sizeof(u64));

struct _kvm_stats_header kvm_vm_stats_header = {
{
@@ -56,37 +58,39 @@ struct _kvm_stats_header kvm_vm_stats_header = {

struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
KVM_GENERIC_VCPU_STATS(),
STATS_DESC_COUNTER("sum_exits"),
STATS_DESC_COUNTER("mmio_exits"),
STATS_DESC_COUNTER("signal_exits"),
STATS_DESC_COUNTER("light_exits"),
STATS_DESC_COUNTER("itlb_real_miss_exits"),
STATS_DESC_COUNTER("itlb_virt_miss_exits"),
STATS_DESC_COUNTER("dtlb_real_miss_exits"),
STATS_DESC_COUNTER("dtlb_virt_miss_exits"),
STATS_DESC_COUNTER("syscall_exits"),
STATS_DESC_COUNTER("isi_exits"),
STATS_DESC_COUNTER("dsi_exits"),
STATS_DESC_COUNTER("emulated_inst_exits"),
STATS_DESC_COUNTER("dec_exits"),
STATS_DESC_COUNTER("ext_intr_exits"),
STATS_DESC_TIME_NSEC("halt_wait_ns"),
STATS_DESC_COUNTER("halt_successful_wait"),
STATS_DESC_COUNTER("dbell_exits"),
STATS_DESC_COUNTER("gdbell_exits"),
STATS_DESC_COUNTER("ld"),
STATS_DESC_COUNTER("st"),
STATS_DESC_COUNTER("pf_storage"),
STATS_DESC_COUNTER("pf_instruc"),
STATS_DESC_COUNTER("sp_storage"),
STATS_DESC_COUNTER("sp_instruc"),
STATS_DESC_COUNTER("queue_intr"),
STATS_DESC_COUNTER("ld_slow"),
STATS_DESC_COUNTER("st_slow"),
STATS_DESC_COUNTER("pthru_all"),
STATS_DESC_COUNTER("pthru_host"),
STATS_DESC_COUNTER("pthru_bad_aff")
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_TIME_NSEC(VCPU, halt_wait_ns),
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)
};
static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==
sizeof(struct kvm_vcpu_stat) / sizeof(u64));

struct _kvm_stats_header kvm_vcpu_stats_header = {
{
@@ -38,9 +38,11 @@ unsigned long kvmppc_booke_handlers;

struct _kvm_stats_desc kvm_vm_stats_desc[] = {
KVM_GENERIC_VM_STATS(),
STATS_DESC_ICOUNTER("num_2M_pages"),
STATS_DESC_ICOUNTER("num_1G_pages")
STATS_DESC_ICOUNTER(VM, num_2M_pages),
STATS_DESC_ICOUNTER(VM, num_1G_pages)
};
static_assert(ARRAY_SIZE(kvm_vm_stats_desc) ==
sizeof(struct kvm_vm_stat) / sizeof(u64));

struct _kvm_stats_header kvm_vm_stats_header = {
{
@@ -54,30 +56,32 @@ struct _kvm_stats_header kvm_vm_stats_header = {

struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
KVM_GENERIC_VCPU_STATS(),
STATS_DESC_COUNTER("sum_exits"),
STATS_DESC_COUNTER("mmio_exits"),
STATS_DESC_COUNTER("signal_exits"),
STATS_DESC_COUNTER("light_exits"),
STATS_DESC_COUNTER("itlb_real_miss_exits"),
STATS_DESC_COUNTER("itlb_virt_miss_exits"),
STATS_DESC_COUNTER("dtlb_real_miss_exits"),
STATS_DESC_COUNTER("dtlb_virt_miss_exits"),
STATS_DESC_COUNTER("syscall_exits"),
STATS_DESC_COUNTER("isi_exits"),
STATS_DESC_COUNTER("dsi_exits"),
STATS_DESC_COUNTER("emulated_inst_exits"),
STATS_DESC_COUNTER("dec_exits"),
STATS_DESC_COUNTER("ext_intr_exits"),
STATS_DESC_TIME_NSEC("halt_wait_ns"),
STATS_DESC_COUNTER("halt_successful_wait"),
STATS_DESC_COUNTER("dbell_exits"),
STATS_DESC_COUNTER("gdbell_exits"),
STATS_DESC_COUNTER("ld"),
STATS_DESC_COUNTER("st"),
STATS_DESC_COUNTER("pthru_all"),
STATS_DESC_COUNTER("pthru_host"),
STATS_DESC_COUNTER("pthru_bad_aff")
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_TIME_NSEC(VCPU, halt_wait_ns),
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)
};
static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==
sizeof(struct kvm_vcpu_stat) / sizeof(u64));

struct _kvm_stats_header kvm_vcpu_stats_header = {
{

0 comments on commit 2145147

Please sign in to comment.