There is no reason to allow "syscore" devices to runtime-suspend
during system-wide PM transitions, because they are subject to the
same possible failure modes as any other devices in that respect.
Accordingly, change device_prepare() and device_complete() to call
pm_runtime_get_noresume() and pm_runtime_put(), respectively, for
"syscore" devices too.
Fixes: 057d51a1268f ("Merge branch 'pm-sleep'")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: 3.10+ <stable@vger.kernel.org> # 3.10+
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
        const char *info = NULL;
 
        if (dev->power.syscore)
-               return;
+               goto out;
 
        device_lock(dev);
 
 
        device_unlock(dev);
 
+out:
        pm_runtime_put(dev);
 }
 
        int (*callback)(struct device *) = NULL;
        int ret = 0;
 
-       if (dev->power.syscore)
-               return 0;
-
        /*
         * If a device's parent goes into runtime suspend at the wrong time,
         * it won't be possible to resume the device.  To prevent this we
         */
        pm_runtime_get_noresume(dev);
 
+       if (dev->power.syscore)
+               return 0;
+
        device_lock(dev);
 
        dev->power.wakeup_path = false;