mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-10 03:20:49 +00:00
perf/x86/intel/pt: Add interface to stop Intel PT logging
This patch add a function for external components to stop Intel PT. Basically this function is used when kernel panic occurs. When it is called, the intel_pt driver disables Intel PT and saves its registers using pt_event_stop(), which is also used by pmu.stop handler. This function stops Intel PT on the CPU where it is working, therefore users of it need to call it for each CPU to stop all logging. Signed-off-by: Takao Indoh <indou.takao@jp.fujitsu.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Alexander Shishkin<alexander.shishkin@linux.intel.com> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: H.Peter Anvin <hpa@zytor.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vince Weaver <vincent.weaver@maine.edu> Cc: Vivek Goyal <vgoyal@redhat.com> Link: http://lkml.kernel.org/r/1446614553-6072-2-git-send-email-indou.takao@jp.fujitsu.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
b16a5b52eb
commit
24cc12b176
10
arch/x86/include/asm/intel_pt.h
Normal file
10
arch/x86/include/asm/intel_pt.h
Normal file
@ -0,0 +1,10 @@
|
||||
#ifndef _ASM_X86_INTEL_PT_H
|
||||
#define _ASM_X86_INTEL_PT_H
|
||||
|
||||
#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL)
|
||||
void cpu_emergency_stop_pt(void);
|
||||
#else
|
||||
static inline void cpu_emergency_stop_pt(void) {}
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_X86_INTEL_PT_H */
|
@ -27,6 +27,7 @@
|
||||
#include <asm/perf_event.h>
|
||||
#include <asm/insn.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/intel_pt.h>
|
||||
|
||||
#include "perf_event.h"
|
||||
#include "intel_pt.h"
|
||||
@ -1122,6 +1123,14 @@ static int pt_event_init(struct perf_event *event)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cpu_emergency_stop_pt(void)
|
||||
{
|
||||
struct pt *pt = this_cpu_ptr(&pt_ctx);
|
||||
|
||||
if (pt->handle.event)
|
||||
pt_event_stop(pt->handle.event, PERF_EF_UPDATE);
|
||||
}
|
||||
|
||||
static __init int pt_init(void)
|
||||
{
|
||||
int ret, cpu, prior_warn = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user