hwmon: (via-cputemp) sync hotplug handling with coretemp/pkgtemp
authorJan Beulich <JBeulich@novell.com>
Mon, 6 Dec 2010 16:48:35 +0000 (11:48 -0500)
committerGuenter Roeck <guenter.roeck@ericsson.com>
Sat, 8 Jan 2011 18:55:48 +0000 (10:55 -0800)
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
drivers/hwmon/via-cputemp.c

index 45b08c78b5319451dd6822c950b75bb650533fc4..0d18de424c66dca941cb2540c8f1d6aeb508fdd1 100644 (file)
@@ -238,13 +238,16 @@ exit:
 
 static void __cpuinit via_cputemp_device_remove(unsigned int cpu)
 {
-       struct pdev_entry *p, *n;
+       struct pdev_entry *p;
+
        mutex_lock(&pdev_list_mutex);
-       list_for_each_entry_safe(p, n, &pdev_list, list) {
+       list_for_each_entry(p, &pdev_list, list) {
                if (p->cpu == cpu) {
                        platform_device_unregister(p->pdev);
                        list_del(&p->list);
+                       mutex_unlock(&pdev_list_mutex);
                        kfree(p);
+                       return;
                }
        }
        mutex_unlock(&pdev_list_mutex);
@@ -274,7 +277,6 @@ static struct notifier_block via_cputemp_cpu_notifier __refdata = {
 static int __init via_cputemp_init(void)
 {
        int i, err;
-       struct pdev_entry *p, *n;
 
        if (cpu_data(0).x86_vendor != X86_VENDOR_CENTAUR) {
                printk(KERN_DEBUG DRVNAME ": Not a VIA CPU\n");
@@ -300,28 +302,23 @@ static int __init via_cputemp_init(void)
                        continue;
                }
 
-               err = via_cputemp_device_add(i);
-               if (err)
-                       goto exit_devices_unreg;
+               via_cputemp_device_add(i);
        }
+
+#ifndef CONFIG_HOTPLUG_CPU
        if (list_empty(&pdev_list)) {
                err = -ENODEV;
                goto exit_driver_unreg;
        }
+#endif
 
        register_hotcpu_notifier(&via_cputemp_cpu_notifier);
        return 0;
 
-exit_devices_unreg:
-       mutex_lock(&pdev_list_mutex);
-       list_for_each_entry_safe(p, n, &pdev_list, list) {
-               platform_device_unregister(p->pdev);
-               list_del(&p->list);
-               kfree(p);
-       }
-       mutex_unlock(&pdev_list_mutex);
+#ifndef CONFIG_HOTPLUG_CPU
 exit_driver_unreg:
        platform_driver_unregister(&via_cputemp_driver);
+#endif
 exit:
        return err;
 }