PM / Runtime: Return special error code if runtime PM is disabled
Some callers of pm_runtime_get_sync() and other runtime PM helper functions, scsi_autopm_get_host() and scsi_autopm_get_device() in particular, need to distinguish error codes returned when runtime PM is disabled (i.e. power.disable_depth is nonzero for the given device) from error codes returned in other situations. For this reason, make the runtime PM helper functions return -EACCES when power.disable_depth is nonzero and ensure that this error code won't be returned by them in any other circumstances. Modify scsi_autopm_get_host() and scsi_autopm_get_device() to check the error code returned by pm_runtime_get_sync() and ignore -EACCES. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
This commit is contained in:
@@ -135,8 +135,9 @@ static int rpm_check_suspend_allowed(struct device *dev)
|
||||
|
||||
if (dev->power.runtime_error)
|
||||
retval = -EINVAL;
|
||||
else if (atomic_read(&dev->power.usage_count) > 0
|
||||
|| dev->power.disable_depth > 0)
|
||||
else if (dev->power.disable_depth > 0)
|
||||
retval = -EACCES;
|
||||
else if (atomic_read(&dev->power.usage_count) > 0)
|
||||
retval = -EAGAIN;
|
||||
else if (!pm_children_suspended(dev))
|
||||
retval = -EBUSY;
|
||||
@@ -262,7 +263,7 @@ static int rpm_callback(int (*cb)(struct device *), struct device *dev)
|
||||
spin_lock_irq(&dev->power.lock);
|
||||
}
|
||||
dev->power.runtime_error = retval;
|
||||
return retval;
|
||||
return retval != -EACCES ? retval : -EIO;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -458,7 +459,7 @@ static int rpm_resume(struct device *dev, int rpmflags)
|
||||
if (dev->power.runtime_error)
|
||||
retval = -EINVAL;
|
||||
else if (dev->power.disable_depth > 0)
|
||||
retval = -EAGAIN;
|
||||
retval = -EACCES;
|
||||
if (retval)
|
||||
goto out;
|
||||
|
||||
|
Reference in New Issue
Block a user