Merge branch 'pm-assorted'
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 27 Apr 2013 23:54:29 +0000 (01:54 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 27 Apr 2013 23:54:29 +0000 (01:54 +0200)
* pm-assorted:
  PM / OPP: add documentation to RCU head in struct opp
  PM / sleep: invalidate TEST_CPUS and TEST_CORE support for freeze state
  PM / sleep: add TEST_PLATFORM support for freeze state

drivers/base/power/opp.c
kernel/power/suspend.c

index 32ee0fc7ea54587241f7f3ac22ffc679e0b371de..f0077cb8e249e5f0fac3ef302d9a1ded177a479b 100644 (file)
@@ -55,6 +55,7 @@
  * @rate:      Frequency in hertz
  * @u_volt:    Nominal voltage in microvolts corresponding to this OPP
  * @dev_opp:   points back to the device_opp struct this opp belongs to
+ * @head:      RCU callback head used for deferred freeing
  *
  * This structure stores the OPP information for a given device.
  */
index d4feda084a3aa9880611666352283deb1b28b3ef..bef86d121eb2ca5bcba2001a447f38e90476c5b5 100644 (file)
@@ -76,8 +76,20 @@ EXPORT_SYMBOL_GPL(suspend_set_ops);
 
 bool valid_state(suspend_state_t state)
 {
-       if (state == PM_SUSPEND_FREEZE)
-               return true;
+       if (state == PM_SUSPEND_FREEZE) {
+#ifdef CONFIG_PM_DEBUG
+               if (pm_test_level != TEST_NONE &&
+                   pm_test_level != TEST_FREEZER &&
+                   pm_test_level != TEST_DEVICES &&
+                   pm_test_level != TEST_PLATFORM) {
+                       printk(KERN_WARNING "Unsupported pm_test mode for "
+                                       "freeze state, please choose "
+                                       "none/freezer/devices/platform.\n");
+                       return false;
+               }
+#endif
+                       return true;
+       }
        /*
         * PM_SUSPEND_STANDBY and PM_SUSPEND_MEMORY states need lowlevel
         * support and need to be valid to the lowlevel
@@ -184,6 +196,9 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
                        goto Platform_wake;
        }
 
+       if (suspend_test(TEST_PLATFORM))
+               goto Platform_wake;
+
        /*
         * PM_SUSPEND_FREEZE equals
         * frozen processes + suspended devices + idle processors.
@@ -195,9 +210,6 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
                goto Platform_wake;
        }
 
-       if (suspend_test(TEST_PLATFORM))
-               goto Platform_wake;
-
        error = disable_nonboot_cpus();
        if (error || suspend_test(TEST_CPUS))
                goto Enable_cpus;