summaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/perf_counter.h
diff options
context:
space:
mode:
authorMarkus Metzger2009-07-21 15:56:48 +0200
committerIngo Molnar2009-08-09 13:04:14 +0200
commit30dd568c912602b7dbd609a45d053e01b13422bb (patch)
tree96e970d91b3ef06301ca0f03bc4b1a0068b06122 /arch/x86/include/asm/perf_counter.h
parentperf_counter tools: Fix libbfd detection for systems with libz dependency (diff)
downloadkernel-qcow2-linux-30dd568c912602b7dbd609a45d053e01b13422bb.tar.gz
kernel-qcow2-linux-30dd568c912602b7dbd609a45d053e01b13422bb.tar.xz
kernel-qcow2-linux-30dd568c912602b7dbd609a45d053e01b13422bb.zip
x86, perf_counter, bts: Add BTS support to perfcounters
Implement a performance counter with: attr.type = PERF_TYPE_HARDWARE attr.config = PERF_COUNT_HW_BRANCH_INSTRUCTIONS attr.sample_period = 1 Using branch trace store (BTS) on x86 hardware, if available. The from and to address for each branch can be sampled using: PERF_SAMPLE_IP for the from address PERF_SAMPLE_ADDR for the to address [ v2: address review feedback, fix bugs ] Signed-off-by: Markus Metzger <markus.t.metzger@intel.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/include/asm/perf_counter.h')
-rw-r--r--arch/x86/include/asm/perf_counter.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/include/asm/perf_counter.h b/arch/x86/include/asm/perf_counter.h
index fa64e401589d..e7b7c938ae27 100644
--- a/arch/x86/include/asm/perf_counter.h
+++ b/arch/x86/include/asm/perf_counter.h
@@ -84,6 +84,16 @@ union cpuid10_edx {
#define MSR_ARCH_PERFMON_FIXED_CTR2 0x30b
#define X86_PMC_IDX_FIXED_BUS_CYCLES (X86_PMC_IDX_FIXED + 2)
+/*
+ * We model BTS tracing as another fixed-mode PMC.
+ *
+ * We choose a value in the middle of the fixed counter range, since lower
+ * values are used by actual fixed counters and higher values are used
+ * to indicate other overflow conditions in the PERF_GLOBAL_STATUS msr.
+ */
+#define X86_PMC_IDX_FIXED_BTS (X86_PMC_IDX_FIXED + 16)
+
+
#ifdef CONFIG_PERF_COUNTERS
extern void init_hw_perf_counters(void);
extern void perf_counters_lapic_init(void);