]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/oprofile/nmi_timer_int.c
Merge git://git.infradead.org/users/willy/linux-nvme
[karo-tx-linux.git] / drivers / oprofile / nmi_timer_int.c
index 76f1c9357f39d2a285c6bd8af17eb2c4aac5dcad..9559829fb234de4088602ca6e942e8dd11bd43ff 100644 (file)
@@ -108,8 +108,8 @@ static void nmi_timer_shutdown(void)
        struct perf_event *event;
        int cpu;
 
-       get_online_cpus();
-       unregister_cpu_notifier(&nmi_timer_cpu_nb);
+       cpu_notifier_register_begin();
+       __unregister_cpu_notifier(&nmi_timer_cpu_nb);
        for_each_possible_cpu(cpu) {
                event = per_cpu(nmi_timer_events, cpu);
                if (!event)
@@ -119,7 +119,7 @@ static void nmi_timer_shutdown(void)
                perf_event_release_kernel(event);
        }
 
-       put_online_cpus();
+       cpu_notifier_register_done();
 }
 
 static int nmi_timer_setup(void)
@@ -132,20 +132,23 @@ static int nmi_timer_setup(void)
        do_div(period, HZ);
        nmi_timer_attr.sample_period = period;
 
-       get_online_cpus();
-       err = register_cpu_notifier(&nmi_timer_cpu_nb);
+       cpu_notifier_register_begin();
+       err = __register_cpu_notifier(&nmi_timer_cpu_nb);
        if (err)
                goto out;
+
        /* can't attach events to offline cpus: */
        for_each_online_cpu(cpu) {
                err = nmi_timer_start_cpu(cpu);
-               if (err)
-                       break;
+               if (err) {
+                       cpu_notifier_register_done();
+                       nmi_timer_shutdown();
+                       return err;
+               }
        }
-       if (err)
-               nmi_timer_shutdown();
+
 out:
-       put_online_cpus();
+       cpu_notifier_register_done();
        return err;
 }