mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 14:04:54 +02:00
There are variables(power.may_skip_resume and dev->power.must_resume) and DPM_FLAG_MAY_SKIP_RESUME flags to control the resume of devices after a system wide suspend transition. Setting the DPM_FLAG_MAY_SKIP_RESUME flag means that the driver allows its "noirq" and "early" resume callbacks to be skipped if the device can be left in suspend after a system-wide transition into the working state. PM core determines that the driver's "noirq" and "early" resume callbacks should be skipped or not with dev_pm_skip_resume() function by checking power.may_skip_resume variable. power.must_resume variable is getting set to false in __device_suspend() function without checking device's DPM_FLAG_MAY_SKIP_RESUME settings. In problematic scenario, where all the devices in the suspend_late stage are successful and some device can fail to suspend in suspend_noirq phase. So some devices successfully suspended in suspend_late stage are not getting chance to execute __device_suspend_noirq() to set dev->power.must_resume variable to true and not getting resumed in early_resume phase. Add a check for device's DPM_FLAG_MAY_SKIP_RESUME flag before setting power.must_resume variable in __device_suspend function. Fixes: |
||
|---|---|---|
| .. | ||
| clock_ops.c | ||
| common.c | ||
| domain_governor.c | ||
| domain.c | ||
| generic_ops.c | ||
| main.c | ||
| Makefile | ||
| power.h | ||
| qos-test.c | ||
| qos.c | ||
| runtime.c | ||
| sysfs.c | ||
| trace.c | ||
| wakeirq.c | ||
| wakeup_stats.c | ||
| wakeup.c | ||