summaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorRobert Richter <robert.richter@amd.com>2010-05-03 15:00:25 +0200
committerRobert Richter <robert.richter@amd.com>2010-05-06 13:15:39 +0200
commit3de668ee8d5b1e08da3200f926ff5a28aeb99bc2 (patch)
tree3fd1aa6337b39ccd8fc414cbbba3013180392c84 /arch/x86
parentd30d64c6da3ec7a0708bfffa7e05752d5b9a1093 (diff)
oprofile/x86: notify cpus only when daemon is running
This patch moves the cpu notifier registration from nmi_init() to nmi_setup(). The corresponding unregistration function is now in nmi_shutdown(). Thus, the hotplug code is only active, if the oprofile daemon is running. Cc: Andi Kleen <andi@firstfloor.org> Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/oprofile/nmi_int.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
index 7de0572b0a5..2a086726cad 100644
--- a/arch/x86/oprofile/nmi_int.c
+++ b/arch/x86/oprofile/nmi_int.c
@@ -504,6 +504,7 @@ static int nmi_setup(void)
goto fail;
get_online_cpus();
+ register_cpu_notifier(&oprofile_cpu_nb);
on_each_cpu(nmi_cpu_setup, NULL, 1);
nmi_enabled = 1;
put_online_cpus();
@@ -519,6 +520,7 @@ static void nmi_shutdown(void)
struct op_msrs *msrs;
get_online_cpus();
+ unregister_cpu_notifier(&oprofile_cpu_nb);
on_each_cpu(nmi_cpu_shutdown, NULL, 1);
nmi_enabled = 0;
ctr_running = 0;
@@ -739,12 +741,6 @@ int __init op_nmi_init(struct oprofile_operations *ops)
return -ENODEV;
}
- get_online_cpus();
- register_cpu_notifier(&oprofile_cpu_nb);
- nmi_enabled = 0;
- ctr_running = 0;
- put_online_cpus();
-
/* default values, can be overwritten by model */
ops->create_files = nmi_create_files;
ops->setup = nmi_setup;
@@ -771,14 +767,8 @@ int __init op_nmi_init(struct oprofile_operations *ops)
void op_nmi_exit(void)
{
- if (using_nmi) {
+ if (using_nmi)
exit_sysfs();
- get_online_cpus();
- unregister_cpu_notifier(&oprofile_cpu_nb);
- nmi_enabled = 0;
- ctr_running = 0;
- put_online_cpus();
- }
if (model->exit)
model->exit();
}