PM regression with commit 5de85b9d57ab PM runtime re-init in v4.5-rc1
Alan Stern
stern at rowland.harvard.edu
Tue Feb 2 11:16:30 PST 2016
On Tue, 2 Feb 2016, Tony Lindgren wrote:
> > I'm still not clear on what you want to accomplish. It sounds like you
> > want to perform a runtime suspend following the last probe (if the
> > probe fails), and in between probes you don't really care (although it
> > would be preferable to avoid suspending).
>
> I'd like to have pm_runtime_put_sync() disable the hardware after
> the initial failed probe. Currently that does not happen unless
> pm_runtime_dont_use_autosuspend() is called before pm_runtime_put_sync().
pm_runtime_put_sync() doesn't do anything to the hardware if the usage
count was > 1, because after the decrement it's still nonzero. Where
is the particular call of pm_runtime_put_sync() that you're interested
in, and what is the usage count when it runs? It's not at all unusual
for the usage count to be > 1 during a probe.
Also, what is autosuspend_delay set to for your device? And is
runtime_auto set?
> > Does pm_runtime_use_autosuspend() get called by the probe routine? If
> > it does, then perhaps you can get what you want by having the probe
> > routine call pm_runtime_dont_use_autosuspend() whenever it's about to
> > return an error -- particularly -EDEFER.
>
> Yes so far that's the only fix that seems to work like I posted
> earlier. But is that the right fix though?
No, not really. Ideally you would leave autosuspend turned on. The
delay would be long enough to that after -EDEFER, another probe would
start before the delay expired. But shortly after the last probe
attempt, the delay would expire and the device would then be put in low
power.
> If we wanted to have some generic fix, it seems we would have to pass
> a new flag in pm_runtime_put_sync() to ignore any autosuspend
> configuration. But I don't know if that's what we want to or should
> do though?
I don't think so.
Alan Stern
More information about the linux-arm-kernel
mailing list