aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRobert Richter <robert.richter@amd.com>2008-07-22 15:09:06 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-26 05:48:13 -0400
commit852402cc27bfa1200164e9e8dc7f6e5f0a4fbd46 (patch)
tree0194e23373230888de9115f5ffaacb09e005b57a /drivers
parent6aa360e6c16c145edf1837690e0f7aaea6b86ef3 (diff)
x86/oprofile: add CONFIG_OPROFILE_IBS option
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Robert Richter <robert.richter@amd.com> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/oprofile/buffer_sync.c6
-rw-r--r--drivers/oprofile/cpu_buffer.c4
2 files changed, 10 insertions, 0 deletions
diff --git a/drivers/oprofile/buffer_sync.c b/drivers/oprofile/buffer_sync.c
index e1782d2df09f..ed982273fb8b 100644
--- a/drivers/oprofile/buffer_sync.c
+++ b/drivers/oprofile/buffer_sync.c
@@ -328,6 +328,8 @@ static void add_trace_begin(void)
328 add_event_entry(TRACE_BEGIN_CODE); 328 add_event_entry(TRACE_BEGIN_CODE);
329} 329}
330 330
331#ifdef CONFIG_OPROFILE_IBS
332
331#define IBS_FETCH_CODE_SIZE 2 333#define IBS_FETCH_CODE_SIZE 2
332#define IBS_OP_CODE_SIZE 5 334#define IBS_OP_CODE_SIZE 5
333#define IBS_EIP(offset) \ 335#define IBS_EIP(offset) \
@@ -390,6 +392,8 @@ static void add_ibs_begin(struct oprofile_cpu_buffer *cpu_buf, int code,
390 } 392 }
391} 393}
392 394
395#endif
396
393static void add_sample_entry(unsigned long offset, unsigned long event) 397static void add_sample_entry(unsigned long offset, unsigned long event)
394{ 398{
395 add_event_entry(offset); 399 add_event_entry(offset);
@@ -586,6 +590,7 @@ void sync_buffer(int cpu)
586 } else if (s->event == CPU_TRACE_BEGIN) { 590 } else if (s->event == CPU_TRACE_BEGIN) {
587 state = sb_bt_start; 591 state = sb_bt_start;
588 add_trace_begin(); 592 add_trace_begin();
593#ifdef CONFIG_OPROFILE_IBS
589 } else if (s->event == IBS_FETCH_BEGIN) { 594 } else if (s->event == IBS_FETCH_BEGIN) {
590 state = sb_bt_start; 595 state = sb_bt_start;
591 add_ibs_begin(cpu_buf, 596 add_ibs_begin(cpu_buf,
@@ -594,6 +599,7 @@ void sync_buffer(int cpu)
594 state = sb_bt_start; 599 state = sb_bt_start;
595 add_ibs_begin(cpu_buf, 600 add_ibs_begin(cpu_buf,
596 IBS_OP_CODE, in_kernel, mm); 601 IBS_OP_CODE, in_kernel, mm);
602#endif
597 } else { 603 } else {
598 struct mm_struct *oldmm = mm; 604 struct mm_struct *oldmm = mm;
599 605
diff --git a/drivers/oprofile/cpu_buffer.c b/drivers/oprofile/cpu_buffer.c
index c9ac4e156918..aba905b3afb8 100644
--- a/drivers/oprofile/cpu_buffer.c
+++ b/drivers/oprofile/cpu_buffer.c
@@ -253,6 +253,8 @@ void oprofile_add_sample(struct pt_regs * const regs, unsigned long event)
253 oprofile_add_ext_sample(pc, regs, event, is_kernel); 253 oprofile_add_ext_sample(pc, regs, event, is_kernel);
254} 254}
255 255
256#ifdef CONFIG_OPROFILE_IBS
257
256#define MAX_IBS_SAMPLE_SIZE 14 258#define MAX_IBS_SAMPLE_SIZE 14
257static int log_ibs_sample(struct oprofile_cpu_buffer *cpu_buf, 259static int log_ibs_sample(struct oprofile_cpu_buffer *cpu_buf,
258 unsigned long pc, int is_kernel, unsigned int *ibs, int ibs_code) 260 unsigned long pc, int is_kernel, unsigned int *ibs, int ibs_code)
@@ -318,6 +320,8 @@ void oprofile_add_ibs_sample(struct pt_regs *const regs,
318 oprofile_ops.backtrace(regs, backtrace_depth); 320 oprofile_ops.backtrace(regs, backtrace_depth);
319} 321}
320 322
323#endif
324
321void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event) 325void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)
322{ 326{
323 struct oprofile_cpu_buffer *cpu_buf = &__get_cpu_var(cpu_buffer); 327 struct oprofile_cpu_buffer *cpu_buf = &__get_cpu_var(cpu_buffer);