lkml.org 
[lkml]   [2021]   [Nov]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v4 15/17] KVM: arm64: Hide kvm_arm_pmu_available behind CONFIG_HW_PERF_EVENTS=y
    From
    Move the definition of kvm_arm_pmu_available to pmu-emul.c and, out of
    "necessity", hide it behind CONFIG_HW_PERF_EVENTS. Provide a stub for
    the key's wrapper, kvm_arm_support_pmu_v3(). Moving the key's definition
    out of perf.c will allow a future commit to delete perf.c entirely.

    Signed-off-by: Sean Christopherson <seanjc@google.com>
    ---
    arch/arm64/kernel/image-vars.h | 2 ++
    arch/arm64/kvm/perf.c | 2 --
    arch/arm64/kvm/pmu-emul.c | 2 ++
    include/kvm/arm_pmu.h | 19 ++++++++++++-------
    4 files changed, 16 insertions(+), 9 deletions(-)

    diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h
    index c96a9a0043bf..7eaf1f7c4168 100644
    --- a/arch/arm64/kernel/image-vars.h
    +++ b/arch/arm64/kernel/image-vars.h
    @@ -102,7 +102,9 @@ KVM_NVHE_ALIAS(__stop___kvm_ex_table);
    KVM_NVHE_ALIAS(kvm_arm_hyp_percpu_base);

    /* PMU available static key */
    +#ifdef CONFIG_HW_PERF_EVENTS
    KVM_NVHE_ALIAS(kvm_arm_pmu_available);
    +#endif

    /* Position-independent library routines */
    KVM_NVHE_ALIAS_HYP(clear_page, __pi_clear_page);
    diff --git a/arch/arm64/kvm/perf.c b/arch/arm64/kvm/perf.c
    index 374c496a3f1d..52cfab253c65 100644
    --- a/arch/arm64/kvm/perf.c
    +++ b/arch/arm64/kvm/perf.c
    @@ -11,8 +11,6 @@

    #include <asm/kvm_emulate.h>

    -DEFINE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
    -
    void kvm_perf_init(void)
    {
    kvm_register_perf_callbacks(NULL);
    diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c
    index a5e4bbf5e68f..3308ceefa129 100644
    --- a/arch/arm64/kvm/pmu-emul.c
    +++ b/arch/arm64/kvm/pmu-emul.c
    @@ -14,6 +14,8 @@
    #include <kvm/arm_pmu.h>
    #include <kvm/arm_vgic.h>

    +DEFINE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
    +
    static void kvm_pmu_create_perf_event(struct kvm_vcpu *vcpu, u64 select_idx);
    static void kvm_pmu_update_pmc_chained(struct kvm_vcpu *vcpu, u64 select_idx);
    static void kvm_pmu_stop_counter(struct kvm_vcpu *vcpu, struct kvm_pmc *pmc);
    diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h
    index 90f21898aad8..f9ed4c171d7b 100644
    --- a/include/kvm/arm_pmu.h
    +++ b/include/kvm/arm_pmu.h
    @@ -13,13 +13,6 @@
    #define ARMV8_PMU_CYCLE_IDX (ARMV8_PMU_MAX_COUNTERS - 1)
    #define ARMV8_PMU_MAX_COUNTER_PAIRS ((ARMV8_PMU_MAX_COUNTERS + 1) >> 1)

    -DECLARE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
    -
    -static __always_inline bool kvm_arm_support_pmu_v3(void)
    -{
    - return static_branch_likely(&kvm_arm_pmu_available);
    -}
    -
    #ifdef CONFIG_HW_PERF_EVENTS

    struct kvm_pmc {
    @@ -36,6 +29,13 @@ struct kvm_pmu {
    struct irq_work overflow_work;
    };

    +DECLARE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
    +
    +static __always_inline bool kvm_arm_support_pmu_v3(void)
    +{
    + return static_branch_likely(&kvm_arm_pmu_available);
    +}
    +
    #define kvm_arm_pmu_irq_initialized(v) ((v)->arch.pmu.irq_num >= VGIC_NR_SGIS)
    u64 kvm_pmu_get_counter_value(struct kvm_vcpu *vcpu, u64 select_idx);
    void kvm_pmu_set_counter_value(struct kvm_vcpu *vcpu, u64 select_idx, u64 val);
    @@ -65,6 +65,11 @@ int kvm_arm_pmu_v3_enable(struct kvm_vcpu *vcpu);
    struct kvm_pmu {
    };

    +static inline bool kvm_arm_support_pmu_v3(void)
    +{
    + return false;
    +}
    +
    #define kvm_arm_pmu_irq_initialized(v) (false)
    static inline u64 kvm_pmu_get_counter_value(struct kvm_vcpu *vcpu,
    u64 select_idx)
    --
    2.34.0.rc0.344.g81b53c2807-goog
    \
     
     \ /
      Last update: 2021-11-11 03:10    [W:3.714 / U:0.216 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site