workqueue: Remove the mb() pair between wq_worker_sleeping() and insert_work()
authorLai Jiangshan <laijs@linux.alibaba.com>
Thu, 23 Dec 2021 12:31:37 +0000 (20:31 +0800)
committerTejun Heo <tj@kernel.org>
Wed, 12 Jan 2022 17:37:28 +0000 (07:37 -1000)
In wq_worker_sleeping(), the access to worklist is protected by the
pool->lock, so the memory barrier is unneeded.

Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/workqueue.c

index 33f1106..29b0701 100644 (file)
@@ -918,10 +918,6 @@ void wq_worker_sleeping(struct task_struct *task)
        }
 
        /*
-        * The counterpart of the following dec_and_test, implied mb,
-        * worklist not empty test sequence is in insert_work().
-        * Please read comment there.
-        *
         * NOT_RUNNING is clear.  This means that we're bound to and
         * running on the local cpu w/ rq lock held and preemption
         * disabled, which in turn means that none else could be
@@ -1372,13 +1368,6 @@ static void insert_work(struct pool_workqueue *pwq, struct work_struct *work,
        list_add_tail(&work->entry, head);
        get_pwq(pwq);
 
-       /*
-        * Ensure either wq_worker_sleeping() sees the above
-        * list_add_tail() or we see zero nr_running to avoid workers lying
-        * around lazily while there are works to be processed.
-        */
-       smp_mb();
-
        if (__need_more_worker(pool))
                wake_up_worker(pool);
 }