]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PM: wakeup: Delete timer before removing wakeup source from list
authorKaushlendra Kumar <kaushlendra.kumar@intel.com>
Mon, 27 Oct 2025 04:41:27 +0000 (10:11 +0530)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 8 Nov 2025 11:17:28 +0000 (12:17 +0100)
Replace timer_delete_sync() with timer_shutdown_sync() and move
it before list_del_rcu() in wakeup_source_remove() to improve the
cleanup ordering and code clarity.

This ensures that the timer is stopped before removing the wakeup
source from the events list, providing a more logical cleanup
sequence.

While the current ordering is functionally correct, stopping the
timer first makes the cleanup flow more intuitive and follows the
general pattern of disabling active components before removing data
structures.

Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
[ rjw: Subject and changelog edits ]
Link: https://patch.msgid.link/20251027044127.2456365-1-kaushlendra.kumar@intel.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/base/power/wakeup.c

index d1283ff1080bbdb9fec1ff3e213f6036cda6c969..ab3eee23a52dc2f4920870290641373a5f2d57ad 100644 (file)
@@ -189,17 +189,11 @@ static void wakeup_source_remove(struct wakeup_source *ws)
        if (WARN_ON(!ws))
                return;
 
+       timer_shutdown_sync(&ws->timer);
        raw_spin_lock_irqsave(&events_lock, flags);
        list_del_rcu(&ws->entry);
        raw_spin_unlock_irqrestore(&events_lock, flags);
        synchronize_srcu(&wakeup_srcu);
-
-       timer_delete_sync(&ws->timer);
-       /*
-        * Clear timer.function to make wakeup_source_not_registered() treat
-        * this wakeup source as not registered.
-        */
-       ws->timer.function = NULL;
 }
 
 /**