lkml.org 
[lkml]   [2018]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v7 02/13] perf/x86/intel/pt: Change pt_cap_get() to a public function
    Date
    From: Chao Peng <chao.p.peng@linux.intel.com>

    Change pt_cap_get() to a public function that KVM
    can access this function to check if specific
    feature is supported on hardware.

    Signed-off-by: Chao Peng <chao.p.peng@linux.intel.com>
    Signed-off-by: Luwei Kang <luwei.kang@intel.com>
    ---
    arch/x86/events/intel/pt.c | 3 ++-
    arch/x86/events/intel/pt.h | 21 ---------------------
    arch/x86/include/asm/intel_pt.h | 23 +++++++++++++++++++++++
    3 files changed, 25 insertions(+), 22 deletions(-)

    diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c
    index 81fd41d..a5a7e44 100644
    --- a/arch/x86/events/intel/pt.c
    +++ b/arch/x86/events/intel/pt.c
    @@ -75,7 +75,7 @@
    PT_CAP(psb_periods, 1, CPUID_EBX, 0xffff0000),
    };

    -static u32 pt_cap_get(enum pt_capabilities cap)
    +u32 pt_cap_get(enum pt_capabilities cap)
    {
    struct pt_cap_desc *cd = &pt_caps[cap];
    u32 c = pt_pmu.caps[cd->leaf * PT_CPUID_REGS_NUM + cd->reg];
    @@ -83,6 +83,7 @@ static u32 pt_cap_get(enum pt_capabilities cap)

    return (c & cd->mask) >> shift;
    }
    +EXPORT_SYMBOL_GPL(pt_cap_get);

    static ssize_t pt_cap_show(struct device *cdev,
    struct device_attribute *attr,
    diff --git a/arch/x86/events/intel/pt.h b/arch/x86/events/intel/pt.h
    index 0050ca1..269e15a 100644
    --- a/arch/x86/events/intel/pt.h
    +++ b/arch/x86/events/intel/pt.h
    @@ -45,30 +45,9 @@ struct topa_entry {
    u64 rsvd4 : 16;
    };

    -#define PT_CPUID_LEAVES 2
    -#define PT_CPUID_REGS_NUM 4 /* number of regsters (eax, ebx, ecx, edx) */
    -
    /* TSC to Core Crystal Clock Ratio */
    #define CPUID_TSC_LEAF 0x15

    -enum pt_capabilities {
    - PT_CAP_max_subleaf = 0,
    - PT_CAP_cr3_filtering,
    - PT_CAP_psb_cyc,
    - PT_CAP_ip_filtering,
    - PT_CAP_mtc,
    - PT_CAP_ptwrite,
    - PT_CAP_power_event_trace,
    - PT_CAP_topa_output,
    - PT_CAP_topa_multiple_entries,
    - PT_CAP_single_range_output,
    - PT_CAP_payloads_lip,
    - PT_CAP_num_address_ranges,
    - PT_CAP_mtc_periods,
    - PT_CAP_cycle_thresholds,
    - PT_CAP_psb_periods,
    -};
    -
    struct pt_pmu {
    struct pmu pmu;
    u32 caps[PT_CPUID_REGS_NUM * PT_CPUID_LEAVES];
    diff --git a/arch/x86/include/asm/intel_pt.h b/arch/x86/include/asm/intel_pt.h
    index b523f51..4270421 100644
    --- a/arch/x86/include/asm/intel_pt.h
    +++ b/arch/x86/include/asm/intel_pt.h
    @@ -2,10 +2,33 @@
    #ifndef _ASM_X86_INTEL_PT_H
    #define _ASM_X86_INTEL_PT_H

    +#define PT_CPUID_LEAVES 2
    +#define PT_CPUID_REGS_NUM 4 /* number of regsters (eax, ebx, ecx, edx) */
    +
    +enum pt_capabilities {
    + PT_CAP_max_subleaf = 0,
    + PT_CAP_cr3_filtering,
    + PT_CAP_psb_cyc,
    + PT_CAP_ip_filtering,
    + PT_CAP_mtc,
    + PT_CAP_ptwrite,
    + PT_CAP_power_event_trace,
    + PT_CAP_topa_output,
    + PT_CAP_topa_multiple_entries,
    + PT_CAP_single_range_output,
    + PT_CAP_payloads_lip,
    + PT_CAP_num_address_ranges,
    + PT_CAP_mtc_periods,
    + PT_CAP_cycle_thresholds,
    + PT_CAP_psb_periods,
    +};
    +
    #if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL)
    void cpu_emergency_stop_pt(void);
    +extern u32 pt_cap_get(enum pt_capabilities cap);
    #else
    static inline void cpu_emergency_stop_pt(void) {}
    +static inline u32 pt_cap_get(enum pt_capabilities cap) { return 0; }
    #endif

    #endif /* _ASM_X86_INTEL_PT_H */
    --
    1.8.3.1
    \
     
     \ /
      Last update: 2018-05-03 12:15    [W:4.150 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site