]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Revert "workqueue: Make wq_adjust_max_active() round-robin pwqs while activating"
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Apr 2024 14:36:44 +0000 (16:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 4 Apr 2024 18:23:07 +0000 (20:23 +0200)
This reverts commit 5f99fee6f2dea1228980c3e785ab1a2c69b4da3c which is
commit qc5404d4e6df6faba1007544b5f4e62c7c14416dd upstream.

The workqueue patches backported to 6.6.y caused some reported
regressions, so revert them for now.

Reported-by: Thorsten Leemhuis <regressions@leemhuis.info>
Cc: Tejun Heo <tj@kernel.org>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Sasha Levin <sashal@kernel.org>
Cc: Audra Mitchell <audra@redhat.com>
Link: https://lore.kernel.org/all/ce4c2f67-c298-48a0-87a3-f933d646c73b@leemhuis.info/
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
kernel/workqueue.c

index 76559b63ee1fca8616a7e65904bd0e727d19dd40..51dc508ac35b50e8d771ad0b117089b34b481a81 100644 (file)
@@ -4710,7 +4710,7 @@ static int init_rescuer(struct workqueue_struct *wq)
  */
 static void wq_adjust_max_active(struct workqueue_struct *wq)
 {
-       bool activated;
+       struct pool_workqueue *pwq;
 
        lockdep_assert_held(&wq->mutex);
 
@@ -4730,26 +4730,19 @@ static void wq_adjust_max_active(struct workqueue_struct *wq)
         */
        WRITE_ONCE(wq->max_active, wq->saved_max_active);
 
-       /*
-        * Round-robin through pwq's activating the first inactive work item
-        * until max_active is filled.
-        */
-       do {
-               struct pool_workqueue *pwq;
+       for_each_pwq(pwq, wq) {
+               unsigned long flags;
 
-               activated = false;
-               for_each_pwq(pwq, wq) {
-                       unsigned long flags;
+               /* this function can be called during early boot w/ irq disabled */
+               raw_spin_lock_irqsave(&pwq->pool->lock, flags);
 
-                       /* can be called during early boot w/ irq disabled */
-                       raw_spin_lock_irqsave(&pwq->pool->lock, flags);
-                       if (pwq_activate_first_inactive(pwq)) {
-                               activated = true;
-                               kick_pool(pwq->pool);
-                       }
-                       raw_spin_unlock_irqrestore(&pwq->pool->lock, flags);
-               }
-       } while (activated);
+               while (pwq_activate_first_inactive(pwq))
+                       ;
+
+               kick_pool(pwq->pool);
+
+               raw_spin_unlock_irqrestore(&pwq->pool->lock, flags);
+       }
 }
 
 __printf(1, 4)