On Thu, Feb 15, 2024, Alejandro Jimenez wrote: > The inhibition status of APICv can currently be checked using the > 'kvm_apicv_inhibit_changed' tracepoint, but this is not accessible if > tracefs is not available (e.g. kernel lockdown, non-root user). Export > inhibition status as a binary stat that can be monitored from userspace > without elevated privileges. > > Signed-off-by: Alejandro Jimenez <alejandro.j.jimenez@xxxxxxxxxx> > --- > arch/x86/include/asm/kvm_host.h | 1 + > arch/x86/kvm/x86.c | 10 +++++++++- > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index ad5319a503f0..9b960a523715 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -1524,6 +1524,7 @@ struct kvm_vm_stat { > u64 nx_lpage_splits; > u64 max_mmu_page_hash_collisions; > u64 max_mmu_rmap_size; > + u64 apicv_inhibited; Tracking the negative is odd, i.e. if we add a stat, KVM should probably track if APICv is fully enabled, not if it's inhibited. This also should be a boolean, not a u64. Precisely enumerating _why_ APICv is inhibited is firmly in debug territory, i.e. not in scope for "official" stats. Oh, and this should be a per-vCPU stat, not a VM-wide stat. As for whether or not we should add a stat for this, I'm leaning towards "yes". APICv can have such a profound impact on performance (and functionality) that definitively knowing that it's enabled seems justified.