]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - kernel/workqueue.c
genirq: Remove setup_irq() and remove_irq()
[mirror_ubuntu-jammy-kernel.git] / kernel / workqueue.c
index 3816a18c251e11b7ecd7e2ce25c7a2ab2f4a121b..891ccad5f2716370046c17e48fa181a9b3a88708 100644 (file)
@@ -858,7 +858,8 @@ void wq_worker_running(struct task_struct *task)
  * @task: task going to sleep
  *
  * This function is called from schedule() when a busy worker is
- * going to sleep.
+ * going to sleep. Preemption needs to be disabled to protect ->sleeping
+ * assignment.
  */
 void wq_worker_sleeping(struct task_struct *task)
 {
@@ -875,7 +876,8 @@ void wq_worker_sleeping(struct task_struct *task)
 
        pool = worker->pool;
 
-       if (WARN_ON_ONCE(worker->sleeping))
+       /* Return if preempted before wq_worker_running() was reached */
+       if (worker->sleeping)
                return;
 
        worker->sleeping = 1;