lkml.org 
[lkml]   [2024]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 1/3] x86: KVM: stats: Add a stat to report status of APICv inhibition
    Date
    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@oracle.com>
    ---
    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;
    };

    struct kvm_vcpu_stat {
    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index b66c45e7f6f8..f7f598f066e7 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -255,7 +255,8 @@ const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
    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)
    + STATS_DESC_PCOUNTER(VM, max_mmu_page_hash_collisions),
    + STATS_DESC_IBOOLEAN(VM, apicv_inhibited)
    };

    const struct kvm_stats_header kvm_vm_stats_header = {
    @@ -10588,6 +10589,13 @@ void __kvm_set_or_clear_apicv_inhibit(struct kvm *kvm,
    */
    kvm_make_all_cpus_request(kvm, KVM_REQ_APICV_UPDATE);
    kvm->arch.apicv_inhibit_reasons = new;
    +
    + /*
    + * Update inhibition statistic only when toggling APICv
    + * activation status.
    + */
    + kvm->stat.apicv_inhibited = !!new;
    +
    if (new) {
    unsigned long gfn = gpa_to_gfn(APIC_DEFAULT_PHYS_BASE);
    int idx = srcu_read_lock(&kvm->srcu);
    --
    2.39.3

    \
     
     \ /
      Last update: 2024-05-27 15:05    [W:2.091 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site