x86/oprofile: Enable multiplexing only if the model supports it
authorRobert Richter <robert.richter@amd.com>
Thu, 9 Jul 2009 14:02:44 +0000 (16:02 +0200)
committerRobert Richter <robert.richter@amd.com>
Mon, 20 Jul 2009 14:43:21 +0000 (16:43 +0200)
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>
arch/x86/oprofile/nmi_int.c

index dca7240..f0fb447 100644 (file)
@@ -258,6 +258,12 @@ static int nmi_switch_event(void)
        return 0;
 }
 
+static inline void mux_init(struct oprofile_operations *ops)
+{
+       if (has_mux())
+               ops->switch_events = nmi_switch_event;
+}
+
 #else
 
 inline int op_x86_phys_to_virt(int phys) { return phys; }
@@ -265,6 +271,7 @@ static inline void nmi_shutdown_mux(void) { }
 static inline int nmi_setup_mux(void) { return 1; }
 static inline void
 nmi_cpu_setup_mux(int cpu, struct op_msrs const * const msrs) { }
+static inline void mux_init(struct oprofile_operations *ops) { }
 
 #endif
 
@@ -682,9 +689,6 @@ int __init op_nmi_init(struct oprofile_operations *ops)
        ops->start              = nmi_start;
        ops->stop               = nmi_stop;
        ops->cpu_type           = cpu_type;
-#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
-       ops->switch_events      = nmi_switch_event;
-#endif
 
        if (model->init)
                ret = model->init(ops);
@@ -694,6 +698,8 @@ int __init op_nmi_init(struct oprofile_operations *ops)
        if (!model->num_virt_counters)
                model->num_virt_counters = model->num_counters;
 
+       mux_init(ops);
+
        init_sysfs();
        using_nmi = 1;
        printk(KERN_INFO "oprofile: using NMI interrupt.\n");