mirror of
https://github.com/torvalds/linux.git
synced 2025-11-04 10:40:15 +02:00
When rpm_resume() desactivates the autosuspend timer, it should only
try to cancel hrtimer but not wait for the handler to finish, because
both rpm_resume() and pm_suspend_timer_fn() take the power.lock.
A deadlock is possible as follows:
CPU0 CPU1
rpm_resume()
spin_lock_irqsave
pm_suspend_timer_fn()
spin_lock_irqsave
pm_runtime_deactivate_timer()
hrtimer_cancel()
It is sufficient to call hrtimer_try_to_cancel() from
pm_runtime_deactivate_timer(), because dev->power.timer_expires
reset to 0 by it, so use that function instead of hrtimer_cancel().
Fixes:
|
||
|---|---|---|
| .. | ||
| clock_ops.c | ||
| common.c | ||
| domain.c | ||
| domain_governor.c | ||
| generic_ops.c | ||
| main.c | ||
| Makefile | ||
| power.h | ||
| qos.c | ||
| runtime.c | ||
| sysfs.c | ||
| trace.c | ||
| wakeirq.c | ||
| wakeup.c | ||