aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/oprofile
diff options
context:
space:
mode:
authorRobert Richter <robert.richter@amd.com>2009-07-09 10:02:44 -0400
committerRobert Richter <robert.richter@amd.com>2009-07-20 10:43:21 -0400
commit5280514471c2803776701c43c027038decac1103 (patch)
tree2a3514de1759ad1929568e207509bf964608d5bd /arch/x86/oprofile
parent39e97f40c3a5e71de0532368deaa683e09b74ba2 (diff)
x86/oprofile: Enable multiplexing only if the model supports it
This patch checks if the model supports multiplexing. Only then multiplexing will be enabled. The code is added to the common x86 initialization. Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'arch/x86/oprofile')
-rw-r--r--arch/x86/oprofile/nmi_int.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
index dca7240aeb2..f0fb44725d8 100644
--- a/arch/x86/oprofile/nmi_int.c
+++ b/arch/x86/oprofile/nmi_int.c
@@ -258,6 +258,12 @@ static int nmi_switch_event(void)
258 return 0; 258 return 0;
259} 259}
260 260
261static inline void mux_init(struct oprofile_operations *ops)
262{
263 if (has_mux())
264 ops->switch_events = nmi_switch_event;
265}
266
261#else 267#else
262 268
263inline int op_x86_phys_to_virt(int phys) { return phys; } 269inline int op_x86_phys_to_virt(int phys) { return phys; }
@@ -265,6 +271,7 @@ static inline void nmi_shutdown_mux(void) { }
265static inline int nmi_setup_mux(void) { return 1; } 271static inline int nmi_setup_mux(void) { return 1; }
266static inline void 272static inline void
267nmi_cpu_setup_mux(int cpu, struct op_msrs const * const msrs) { } 273nmi_cpu_setup_mux(int cpu, struct op_msrs const * const msrs) { }
274static inline void mux_init(struct oprofile_operations *ops) { }
268 275
269#endif 276#endif
270 277
@@ -682,9 +689,6 @@ int __init op_nmi_init(struct oprofile_operations *ops)
682 ops->start = nmi_start; 689 ops->start = nmi_start;
683 ops->stop = nmi_stop; 690 ops->stop = nmi_stop;
684 ops->cpu_type = cpu_type; 691 ops->cpu_type = cpu_type;
685#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
686 ops->switch_events = nmi_switch_event;
687#endif
688 692
689 if (model->init) 693 if (model->init)
690 ret = model->init(ops); 694 ret = model->init(ops);
@@ -694,6 +698,8 @@ int __init op_nmi_init(struct oprofile_operations *ops)
694 if (!model->num_virt_counters) 698 if (!model->num_virt_counters)
695 model->num_virt_counters = model->num_counters; 699 model->num_virt_counters = model->num_counters;
696 700
701 mux_init(ops);
702
697 init_sysfs(); 703 init_sysfs();
698 using_nmi = 1; 704 using_nmi = 1;
699 printk(KERN_INFO "oprofile: using NMI interrupt.\n"); 705 printk(KERN_INFO "oprofile: using NMI interrupt.\n");