|
@@ -4647,7 +4647,7 @@ static void rebind_workers(struct worker_pool *pool)
|
|
* concurrency management. Note that when or whether
|
|
* concurrency management. Note that when or whether
|
|
* @worker clears REBOUND doesn't affect correctness.
|
|
* @worker clears REBOUND doesn't affect correctness.
|
|
*
|
|
*
|
|
- * ACCESS_ONCE() is necessary because @worker->flags may be
|
|
|
|
|
|
+ * WRITE_ONCE() is necessary because @worker->flags may be
|
|
* tested without holding any lock in
|
|
* tested without holding any lock in
|
|
* wq_worker_waking_up(). Without it, NOT_RUNNING test may
|
|
* wq_worker_waking_up(). Without it, NOT_RUNNING test may
|
|
* fail incorrectly leading to premature concurrency
|
|
* fail incorrectly leading to premature concurrency
|
|
@@ -4656,7 +4656,7 @@ static void rebind_workers(struct worker_pool *pool)
|
|
WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND));
|
|
WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND));
|
|
worker_flags |= WORKER_REBOUND;
|
|
worker_flags |= WORKER_REBOUND;
|
|
worker_flags &= ~WORKER_UNBOUND;
|
|
worker_flags &= ~WORKER_UNBOUND;
|
|
- ACCESS_ONCE(worker->flags) = worker_flags;
|
|
|
|
|
|
+ WRITE_ONCE(worker->flags, worker_flags);
|
|
}
|
|
}
|
|
|
|
|
|
spin_unlock_irq(&pool->lock);
|
|
spin_unlock_irq(&pool->lock);
|