From: Rafael J. Wysocki Date: Fri, 9 Mar 2012 03:59:44 +0000 (+0900) Subject: sh-sci / PM: Avoid deadlocking runtime PM X-Git-Tag: v3.3~26^2 X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=048be431e40ee32df8e6c1a2c216693afe3ee358;p=pandora-kernel.git 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 Tested-by: Kuninori Morimoto Signed-off-by: Paul Mundt --- Reading git-diff-tree failed