scsi, fcoe: Fix CPU hotplug callback registration
[firefly-linux-kernel-4.4.55.git] / drivers / scsi / fcoe / fcoe.c
index f3170008ae71b9b84de3c05b443a600d96e4396d..d5e105b173f0cf121894fcb5105a5afedadc16d5 100644 (file)
@@ -2633,14 +2633,18 @@ static int __init fcoe_init(void)
                skb_queue_head_init(&p->fcoe_rx_list);
        }
 
+       cpu_notifier_register_begin();
+
        for_each_online_cpu(cpu)
                fcoe_percpu_thread_create(cpu);
 
        /* Initialize per CPU interrupt thread */
-       rc = register_hotcpu_notifier(&fcoe_cpu_notifier);
+       rc = __register_hotcpu_notifier(&fcoe_cpu_notifier);
        if (rc)
                goto out_free;
 
+       cpu_notifier_register_done();
+
        /* Setup link change notification */
        fcoe_dev_setup();
 
@@ -2655,6 +2659,9 @@ out_free:
        for_each_online_cpu(cpu) {
                fcoe_percpu_thread_destroy(cpu);
        }
+
+       cpu_notifier_register_done();
+
        mutex_unlock(&fcoe_config_mutex);
        destroy_workqueue(fcoe_wq);
        return rc;
@@ -2687,11 +2694,15 @@ static void __exit fcoe_exit(void)
        }
        rtnl_unlock();
 
-       unregister_hotcpu_notifier(&fcoe_cpu_notifier);
+       cpu_notifier_register_begin();
 
        for_each_online_cpu(cpu)
                fcoe_percpu_thread_destroy(cpu);
 
+       __unregister_hotcpu_notifier(&fcoe_cpu_notifier);
+
+       cpu_notifier_register_done();
+
        mutex_unlock(&fcoe_config_mutex);
 
        /*