diff options
Diffstat (limited to 'drivers/base/power/runtime.c')
-rw-r--r-- | drivers/base/power/runtime.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 872eac4cb1df..a14fac6a01d3 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c | |||
@@ -966,13 +966,13 @@ int __pm_runtime_idle(struct device *dev, int rpmflags) | |||
966 | unsigned long flags; | 966 | unsigned long flags; |
967 | int retval; | 967 | int retval; |
968 | 968 | ||
969 | might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); | ||
970 | |||
971 | if (rpmflags & RPM_GET_PUT) { | 969 | if (rpmflags & RPM_GET_PUT) { |
972 | if (!atomic_dec_and_test(&dev->power.usage_count)) | 970 | if (!atomic_dec_and_test(&dev->power.usage_count)) |
973 | return 0; | 971 | return 0; |
974 | } | 972 | } |
975 | 973 | ||
974 | might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); | ||
975 | |||
976 | spin_lock_irqsave(&dev->power.lock, flags); | 976 | spin_lock_irqsave(&dev->power.lock, flags); |
977 | retval = rpm_idle(dev, rpmflags); | 977 | retval = rpm_idle(dev, rpmflags); |
978 | spin_unlock_irqrestore(&dev->power.lock, flags); | 978 | spin_unlock_irqrestore(&dev->power.lock, flags); |
@@ -998,13 +998,13 @@ int __pm_runtime_suspend(struct device *dev, int rpmflags) | |||
998 | unsigned long flags; | 998 | unsigned long flags; |
999 | int retval; | 999 | int retval; |
1000 | 1000 | ||
1001 | might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); | ||
1002 | |||
1003 | if (rpmflags & RPM_GET_PUT) { | 1001 | if (rpmflags & RPM_GET_PUT) { |
1004 | if (!atomic_dec_and_test(&dev->power.usage_count)) | 1002 | if (!atomic_dec_and_test(&dev->power.usage_count)) |
1005 | return 0; | 1003 | return 0; |
1006 | } | 1004 | } |
1007 | 1005 | ||
1006 | might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); | ||
1007 | |||
1008 | spin_lock_irqsave(&dev->power.lock, flags); | 1008 | spin_lock_irqsave(&dev->power.lock, flags); |
1009 | retval = rpm_suspend(dev, rpmflags); | 1009 | retval = rpm_suspend(dev, rpmflags); |
1010 | spin_unlock_irqrestore(&dev->power.lock, flags); | 1010 | spin_unlock_irqrestore(&dev->power.lock, flags); |
@@ -1029,7 +1029,8 @@ int __pm_runtime_resume(struct device *dev, int rpmflags) | |||
1029 | unsigned long flags; | 1029 | unsigned long flags; |
1030 | int retval; | 1030 | int retval; |
1031 | 1031 | ||
1032 | might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); | 1032 | might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe && |
1033 | dev->power.runtime_status != RPM_ACTIVE); | ||
1033 | 1034 | ||
1034 | if (rpmflags & RPM_GET_PUT) | 1035 | if (rpmflags & RPM_GET_PUT) |
1035 | atomic_inc(&dev->power.usage_count); | 1036 | atomic_inc(&dev->power.usage_count); |