diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2012-03-09 12:59:44 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2012-03-09 12:59:44 +0900 |
commit | 048be431e40ee32df8e6c1a2c216693afe3ee358 (patch) | |
tree | 293a7fb0064235266683579c98acd3ad18c2bd68 /crypto/lzo.c | |
parent | 948c46a195691a214811538ee4b6c0312ec15cb5 (diff) |
sh-sci / PM: Avoid deadlocking runtime PM
The runtime PM of sh-sci devices is enabled when sci_probe() returns,
so the pm_runtime_put_sync() executed by driver_probe_device()
attempts to suspend the device. Then, in some situations, a
diagnostic message is printed to the console by one of the runtime
suspend routines handling the sh-sci device, which causes synchronous
runtime resume to be started from the device's own runtime suspend
callback. This causes rpm_resume() to be run eventually, which sees
the RPM_SUSPENDING status set by rpm_suspend() and waits for it to
change. However, the device's runtime PM status cannot change at
that point, because the routine that has set it waits for the
rpm_suspend() to return. A deadlock occurs as a result.
To avoid that make sci_init_single() increment the device's
runtime PM usage counter, so that it cannot be suspended by
driver_probe_device(). That counter has to be decremented
eventually, so make sci_startup() do that before starting to
actually use the device and make sci_shutdown() increment it
again before returning to balance the incrementation carried out by
sci_startup().
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Tested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'crypto/lzo.c')
0 files changed, 0 insertions, 0 deletions