Re: [PATCH 1/1] PM / Runtime: let rpm_resume fail if rpm disabled and device suspended.

Rafael J. Wysocki
2014-06-22T13:22:39Z

On Friday, June 20, 2014 02:34:14 PM Kevin Hilman wrote:
> Alan Stern <stern@rowland.harvard.edu> writes:
>
> > On Fri, 20 Jun 2014, Rafael J. Wysocki wrote:
> >
> >> > For a general device, the fact that dev->power.is_suspended is set
> >> > means the device _has_ been powered down. Even though the
> >> > runtime_status may not have changed, the PM core has to assume the
> >> > device is not available for use.
> >>
> >> This seems to go a bit too far. What power.is_suspended actually means is
> >> that __device_suspend() has run for the device successfully. What the
> >> implications of that are depends on the bus type (or subsystem in general)
> >> and device driver.
> >>
> >> > While your I2C devices may be useable even after the ->suspend callback
> >> > returns, for most devices this isn't true. So we shouldn't allow
> >> > rpm_resume() to return imediately when is_suspended is set.
> >>
> >> I can agree with that.
> >
> > We really do need to decide more precisely how runtime PM and system PM
> > will interact.
>
> Yes!
>
> > Should ->runtime_resume callbacks be allowed after ->suspend has
> > returned?
>
> Abolutely.
>
> > Kevin has stated that some devices do need this ability. But most
> > don't.
>
> Does it matter if most don't? As long a some do, we need to support
> this. It may not be "most" devices, but on the (mostly embedded) SoCs I
> work on, the devices that do need this tend to be rather crucial core
> devices that are used during the PM of other devices (e.g. I2C, SPI,
> GPIOs, etc. etc.)
>
> > The PM core needs to handle these conflicting requirements
> > somehow.
>
> I agree. We've gone back and forth a few times on the various
> interactions between system PM and runtime PM over the years but it
> seems there are still things to clarify.

Well, we only considered a specific use case every time without looking at
the big picture, mostly because we didn't really know what the big picture
was. I guess today we have enough experience to try to address all of these
problems together.

I guess we need to start with making a list of different types of bus type/driver
behavior existing today and how the core is supposed to interact with them.

Rafael