mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 14:05:08 +07:00
42880f726c
If PEBS declares ability to output its data to Intel PT stream, use the aux_output attribute bit to enable PEBS data output to PT. This requires a PT event to be present and scheduled in the same context. Unlike the DS area, the kernel does not extract PEBS records from the PT stream to generate corresponding records in the perf stream, because that would require real time in-kernel PT decoding, which is not feasible. The PMI, however, can still be used. The output setting is per-CPU, so all PEBS events must be either writing to PT or to the DS area, therefore, in case of conflict, the conflicting event will fail to schedule, allowing the rotation logic to alternate between the PEBS->PT and PEBS->DS events. Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: kan.liang@linux.intel.com Link: https://lkml.kernel.org/r/20190806084606.4021-3-alexander.shishkin@linux.intel.com
40 lines
1.2 KiB
C
40 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#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_output_subsys,
|
|
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 intel_pt_validate_hw_cap(enum pt_capabilities cap);
|
|
extern u32 intel_pt_validate_cap(u32 *caps, enum pt_capabilities cap);
|
|
extern int is_intel_pt_event(struct perf_event *event);
|
|
#else
|
|
static inline void cpu_emergency_stop_pt(void) {}
|
|
static inline u32 intel_pt_validate_hw_cap(enum pt_capabilities cap) { return 0; }
|
|
static inline u32 intel_pt_validate_cap(u32 *caps, enum pt_capabilities capability) { return 0; }
|
|
static inline int is_intel_pt_event(struct perf_event *event) { return 0; }
|
|
#endif
|
|
|
|
#endif /* _ASM_X86_INTEL_PT_H */
|