|
@@ -732,13 +732,16 @@ EXPORT_SYMBOL_GPL(pm_schedule_suspend);
|
|
|
* return immediately if it is larger than zero. Then carry out an idle
|
|
|
* notification, either synchronous or asynchronous.
|
|
|
*
|
|
|
- * This routine may be called in atomic context if the RPM_ASYNC flag is set.
|
|
|
+ * This routine may be called in atomic context if the RPM_ASYNC flag is set,
|
|
|
+ * or if pm_runtime_irq_safe() has been called.
|
|
|
*/
|
|
|
int __pm_runtime_idle(struct device *dev, int rpmflags)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
int retval;
|
|
|
|
|
|
+ might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
|
|
|
+
|
|
|
if (rpmflags & RPM_GET_PUT) {
|
|
|
if (!atomic_dec_and_test(&dev->power.usage_count))
|
|
|
return 0;
|
|
@@ -761,13 +764,16 @@ EXPORT_SYMBOL_GPL(__pm_runtime_idle);
|
|
|
* return immediately if it is larger than zero. Then carry out a suspend,
|
|
|
* either synchronous or asynchronous.
|
|
|
*
|
|
|
- * This routine may be called in atomic context if the RPM_ASYNC flag is set.
|
|
|
+ * This routine may be called in atomic context if the RPM_ASYNC flag is set,
|
|
|
+ * or if pm_runtime_irq_safe() has been called.
|
|
|
*/
|
|
|
int __pm_runtime_suspend(struct device *dev, int rpmflags)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
int retval;
|
|
|
|
|
|
+ might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
|
|
|
+
|
|
|
if (rpmflags & RPM_GET_PUT) {
|
|
|
if (!atomic_dec_and_test(&dev->power.usage_count))
|
|
|
return 0;
|
|
@@ -789,13 +795,16 @@ EXPORT_SYMBOL_GPL(__pm_runtime_suspend);
|
|
|
* If the RPM_GET_PUT flag is set, increment the device's usage count. Then
|
|
|
* carry out a resume, either synchronous or asynchronous.
|
|
|
*
|
|
|
- * This routine may be called in atomic context if the RPM_ASYNC flag is set.
|
|
|
+ * This routine may be called in atomic context if the RPM_ASYNC flag is set,
|
|
|
+ * or if pm_runtime_irq_safe() has been called.
|
|
|
*/
|
|
|
int __pm_runtime_resume(struct device *dev, int rpmflags)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
int retval;
|
|
|
|
|
|
+ might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
|
|
|
+
|
|
|
if (rpmflags & RPM_GET_PUT)
|
|
|
atomic_inc(&dev->power.usage_count);
|
|
|
|