On Thu, 23 Jun 2011, Rafael J. Wysocki wrote: > > > Index: linux-2.6/drivers/base/power/runtime.c > > > =================================================================== > > > --- linux-2.6.orig/drivers/base/power/runtime.c > > > +++ linux-2.6/drivers/base/power/runtime.c > > > @@ -455,12 +455,14 @@ static int rpm_resume(struct device *dev > > > dev_dbg(dev, "%s flags 0x%x\n", __func__, rpmflags); > > > > > > repeat: > > > - if (dev->power.runtime_error) > > > + if (dev->power.runtime_error) { > > > retval = -EINVAL; > > > - else if (dev->power.disable_depth > 0) > > > - retval = -EAGAIN; > > > - if (retval) > > > goto out; > > > + } else if (dev->power.disable_depth > 0) { > > > + if (!(rpmflags & RPM_GET_PUT)) > > > + retval = -EAGAIN; > > > > Do you also want to check the current status? If it isn't RPM_ACTIVE > > then perhaps you should return an error. > > That depends on whether or not we want RPM_ACTIVE to have any meaning for > devices whose power.disable_depth is nonzero. My opinion is that if > power.disable_depth is nonzero, the runtime PM status of the device > shouldn't matter (it may be changed on the fly in ways that need not > reflect the real status). Then maybe this disable_depth > 0 case should return something other than 0. Something new, like -EACCES. That way the caller would realize something strange was going on but wouldn't have to treat the situation as an error. After all, the return value from pm_runtime_get_sync() is documented to be the error code for the underlying pm_runtime_resume(). It doesn't refer to the increment operation -- that always succeeds. Alan Stern _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm