Upgrade to 4.4.50-rt62
[kvmfornfv.git] / kernel / drivers / base / power / runtime.c
index e1a10a0..3252429 100644 (file)
@@ -515,7 +515,7 @@ static int rpm_suspend(struct device *dev, int rpmflags)
 
        callback = RPM_GET_CALLBACK(dev, runtime_suspend);
 
-       dev_pm_enable_wake_irq(dev);
+       dev_pm_enable_wake_irq_check(dev, true);
        retval = rpm_callback(callback, dev);
        if (retval)
                goto fail;
@@ -554,7 +554,7 @@ static int rpm_suspend(struct device *dev, int rpmflags)
        return retval;
 
  fail:
-       dev_pm_disable_wake_irq(dev);
+       dev_pm_disable_wake_irq_check(dev);
        __update_runtime_status(dev, RPM_ACTIVE);
        dev->power.deferred_resume = false;
        wake_up_all(&dev->power.wait_queue);
@@ -737,12 +737,12 @@ static int rpm_resume(struct device *dev, int rpmflags)
 
        callback = RPM_GET_CALLBACK(dev, runtime_resume);
 
-       dev_pm_disable_wake_irq(dev);
+       dev_pm_disable_wake_irq_check(dev);
        retval = rpm_callback(callback, dev);
        if (retval) {
                __update_runtime_status(dev, RPM_SUSPENDED);
                pm_runtime_cancel_pending(dev);
-               dev_pm_enable_wake_irq(dev);
+               dev_pm_enable_wake_irq_check(dev, false);
        } else {
  no_callback:
                __update_runtime_status(dev, RPM_ACTIVE);
@@ -1468,11 +1468,16 @@ int pm_runtime_force_resume(struct device *dev)
                goto out;
        }
 
-       ret = callback(dev);
+       ret = pm_runtime_set_active(dev);
        if (ret)
                goto out;
 
-       pm_runtime_set_active(dev);
+       ret = callback(dev);
+       if (ret) {
+               pm_runtime_set_suspended(dev);
+               goto out;
+       }
+
        pm_runtime_mark_last_busy(dev);
 out:
        pm_runtime_enable(dev);