HWMON: coretemp, suspend fix
authorRafael J. Wysocki <rjw@sisk.pl>
Mon, 3 Dec 2007 17:01:50 +0000 (18:01 +0100)
committerLen Brown <len.brown@intel.com>
Tue, 4 Dec 2007 06:35:32 +0000 (01:35 -0500)
It's not permitted to unregister a device after devices have been suspended.
It causes deadlocks to appear on systems with coretemp hwmon loaded.  To avoid
this, we can make coretemp_cpu_callback() do nothing if the _FROZEN bit is set
in action.
 
Also, in other cases it's generally too late to unregister the coretemp device
if the CPU is already dead, so it should be unregistered on CPU_DOWN_PREPARE.
 
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Mark M. Hoffman <mhoffman@lightlink.com>
Cc: Jiri Slaby <jirislaby@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/hwmon/coretemp.c

index 5c82ec7f8bbda7fea7ec8a1f81c14add4a25c6d8..3ee60d26e3a2e5cbad5e08a6c83353059f43a524 100644 (file)
@@ -337,11 +337,10 @@ static int coretemp_cpu_callback(struct notifier_block *nfb,
 
        switch (action) {
        case CPU_ONLINE:
-       case CPU_ONLINE_FROZEN:
+       case CPU_DOWN_FAILED:
                coretemp_device_add(cpu);
                break;
-       case CPU_DEAD:
-       case CPU_DEAD_FROZEN:
+       case CPU_DOWN_PREPARE:
                coretemp_device_remove(cpu);
                break;
        }