On Tue, 13 May 2014, Rafael J. Wysocki wrote: > > It would be surprising if ->prepare() needed to make any difficult > > checks. This would imply that the device could have multiple > > runtime-suspend states, some of which are appropriate for system > > suspend while others aren't. Not impossible, but I wouldn't expect it > > to come up often. > > That is the case for every device with ACPI power management in principle. :-) > > Please see patch [3/3] for details. I don't understand enough about the ACPI subsystem to follow the details of that patch. > OK, I've updated the $subject patch in the meantime and the result is appended > Former patch [1/3] is not necessary any more now and patch [3/3] is still valid. > > Rafael > > --- > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > Subject: PM / sleep: Mechanism to avoid resuming runtime-suspended devices unnecessarily > > Currently, some subsystems (e.g. PCI and the ACPI PM domain) have to > resume all runtime-suspended devices during system suspend, mostly > because those devices may need to be reprogrammed due to different > wakeup settings for system sleep and for runtime PM. ... > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> This is looking quite good. I have one suggestion for a small improvement... > @@ -1332,6 +1338,16 @@ static int __device_suspend(struct devic > if (dev->power.syscore) > goto Complete; > > + if (dev->power.direct_complete) { > + pm_runtime_disable(dev); > + if (dev->power.disable_depth == 1 > + && pm_runtime_status_suspended(dev)) > + goto Complete; > + > + dev->power.direct_complete = false; > + pm_runtime_enable(dev); > + } Do we want to allow ->prepare() to return > 0 if the device isn't runtime suspended? If we do then non-suspended devices may be a common case. We should then avoid the extra overhead of disable + enable. So I would write: if (dev->power.direct_complete) { if (pm_runtime_status_suspended(dev)) { pm_runtime_disable(dev); if (dev->power.disable_depth == 1 && pm_runtime_status_suspended(dev)) goto Complete; pm_runtime_enable(dev); } dev->power.direct_complete = false; } Also, now that we have finally settled on the appropriate API, there needs to ba a patch updating the PM documentation. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html