Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1257785 > unrolled thread
| Started by | Takao Indoh <indou.takao@jp.fujitsu.com> |
|---|---|
| First post | 2015-10-28 09:30 +0100 |
| Last post | 2015-10-28 09:40 +0100 |
| Articles | 2 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH 0/2] Stop Intel Processor Trace logging on panic Takao Indoh <indou.takao@jp.fujitsu.com> - 2015-10-28 09:30 +0100
[PATCH 1/2] perf/x86/intel/pt: Add interface to stop Intel PT logging Takao Indoh <indou.takao@jp.fujitsu.com> - 2015-10-28 09:40 +0100
| From | Takao Indoh <indou.takao@jp.fujitsu.com> |
|---|---|
| Date | 2015-10-28 09:30 +0100 |
| Subject | [PATCH 0/2] Stop Intel Processor Trace logging on panic |
| Message-ID | <qouhk-af-7@gated-at.bofh.it> |
Hi all, These patch series provide a feature to stop Intel Processor Trace (Intel PT) logging and save its registers in the memory on panic. Intel PT is a new feature of Intel CPU "Broadwell", it captures information about program execution flow. Here is a article about Intel PT. https://software.intel.com/en-us/blogs/2013/09/18/processor-tracing Once Intel PT is enabled, the events which change program flow, like branch instructions, exceptions, interruptions, traps and so on are logged in the memory. This is very useful for debugging because we can know the detailed behavior of software. When kernel panic occurs while you are running a perf command with Intel PT (with -e intel_pt// option), these patches disable Intel PT and save its registers in the memory. After crash dump is captured by kdump, you can retrieve Intel PT log buffer from vmcore and investigate kernel behavior. I have not made a tool yet to salvage Intel PT log buffer from vmcore, but I'll do once these patches are accepted. These patches are a part of patch series I posted before, the original discussion is bellow. x86: Intel Processor Trace Logger v1: https://lkml.org/lkml/2015/7/29/6 v2: https://lkml.org/lkml/2015/9/8/24 The purpose of the original patches is introducing in-kernel logger using Intel PT. To implement it I need to add some APIs to control perf counter and ring buffer in kernel. Alexander Shishkin is working on such APIs for his work to make use of Intel PT for process core dump. Apart from such APIs, the feature to save Intel PT registers on panic is helpful for normal perf command user as I described above, therefore I separate the feature from original patches. Takao Indoh (2): perf/x86/intel/pt: Add interface to stop Intel PT logging x86: Stop Intel PT before kdump starts arch/x86/include/asm/intel_pt.h | 10 ++++++++++ arch/x86/kernel/cpu/perf_event_intel_pt.c | 9 +++++++++ arch/x86/kernel/crash.c | 11 +++++++++++ 3 files changed, 30 insertions(+), 0 deletions(-) create mode 100644 arch/x86/include/asm/intel_pt.h -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Takao Indoh <indou.takao@jp.fujitsu.com> |
|---|---|
| Date | 2015-10-28 09:40 +0100 |
| Subject | [PATCH 1/2] perf/x86/intel/pt: Add interface to stop Intel PT logging |
| Message-ID | <qouqZ-dw-3@gated-at.bofh.it> |
| In reply to | #1257785 |
This patch add a function for external component to stop Intel PT.
Basically this function is used when kernel panic occurs. When it is
called, 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 user need to
call it for each cpu to stop all logging.
Signed-off-by: Takao Indoh <indou.takao@jp.fujitsu.com>
---
arch/x86/include/asm/intel_pt.h | 10 ++++++++++
arch/x86/kernel/cpu/perf_event_intel_pt.c | 9 +++++++++
2 files changed, 19 insertions(+), 0 deletions(-)
create mode 100644 arch/x86/include/asm/intel_pt.h
diff --git a/arch/x86/include/asm/intel_pt.h b/arch/x86/include/asm/intel_pt.h
new file mode 100644
index 0000000..3bfe971
--- /dev/null
+++ b/arch/x86/include/asm/intel_pt.h
@@ -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
+void cpu_emergency_stop_pt(void) {}
+#endif
+
+#endif /* _ASM_X86_INTEL_PT_H */
diff --git a/arch/x86/kernel/cpu/perf_event_intel_pt.c b/arch/x86/kernel/cpu/perf_event_intel_pt.c
index 4216928..a638b5b 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_pt.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c
@@ -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"
@@ -1125,6 +1126,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;
--
1.7.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web