• R
    PM / Sleep: Fix possible infinite loop during wakeup source destruction · d94aff87
    Rafael J. Wysocki 提交于
    If wakeup_source_destroy() is called for an active wakeup source that
    is never deactivated, it will spin forever.  To prevent that from
    happening, make wakeup_source_destroy() call __pm_relax() for the
    wakeup source object it is about to free instead of waiting until
    it will be deactivated by someone else.  However, for this to work
    it also needs to make sure that the timer function will not be
    executed after the final __pm_relax(), so make it run
    del_timer_sync() on the wakeup source's timer beforehand.
    
    Additionally, update the kerneldoc comment to document the
    requirement that __pm_stay_awake() and __pm_wakeup_event() must not
    be run in parallel with wakeup_source_destroy().
    Reported-by: NArve Hjønnevåg <arve@android.com>
    Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
    d94aff87
wakeup.c 20.1 KB