Commit 9954d489 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq

Pull workqueue updates from Tejun Heo:
 "Nothing major. I introduced a flag collsion bug during v4.13 cycle
  which is fixed in this pull request. Fortunately, the flag is for
  debugging / verification and the bug isn't critical"

* 'for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:
  workqueue: Fix flag collision
  workqueue: Use TASK_IDLE
  workqueue: fix path to documentation
  workqueue: doc change for ST behavior on NUMA systems
parents a7cbfd05 fbf1c41f
...@@ -243,11 +243,15 @@ throttling the number of active work items, specifying '0' is ...@@ -243,11 +243,15 @@ throttling the number of active work items, specifying '0' is
recommended. recommended.
Some users depend on the strict execution ordering of ST wq. The Some users depend on the strict execution ordering of ST wq. The
combination of ``@max_active`` of 1 and ``WQ_UNBOUND`` is used to combination of ``@max_active`` of 1 and ``WQ_UNBOUND`` used to
achieve this behavior. Work items on such wq are always queued to the achieve this behavior. Work items on such wq were always queued to the
unbound worker-pools and only one work item can be active at any given unbound worker-pools and only one work item could be active at any given
time thus achieving the same ordering property as ST wq. time thus achieving the same ordering property as ST wq.
In the current implementation the above configuration only guarantees
ST behavior within a given NUMA node. Instead alloc_ordered_queue should
be used to achieve system wide ST behavior.
Example Execution Scenarios Example Execution Scenarios
=========================== ===========================
......
...@@ -323,8 +323,8 @@ enum { ...@@ -323,8 +323,8 @@ enum {
__WQ_DRAINING = 1 << 16, /* internal: workqueue is draining */ __WQ_DRAINING = 1 << 16, /* internal: workqueue is draining */
__WQ_ORDERED = 1 << 17, /* internal: workqueue is ordered */ __WQ_ORDERED = 1 << 17, /* internal: workqueue is ordered */
__WQ_ORDERED_EXPLICIT = 1 << 18, /* internal: alloc_ordered_workqueue() */
__WQ_LEGACY = 1 << 18, /* internal: create*_workqueue() */ __WQ_LEGACY = 1 << 18, /* internal: create*_workqueue() */
__WQ_ORDERED_EXPLICIT = 1 << 19, /* internal: alloc_ordered_workqueue() */
WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */ WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */
WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */ WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
* pools for workqueues which are not bound to any specific CPU - the * pools for workqueues which are not bound to any specific CPU - the
* number of these backing pools is dynamic. * number of these backing pools is dynamic.
* *
* Please read Documentation/workqueue.txt for details. * Please read Documentation/core-api/workqueue.rst for details.
*/ */
#include <linux/export.h> #include <linux/export.h>
...@@ -2269,7 +2269,7 @@ static int worker_thread(void *__worker) ...@@ -2269,7 +2269,7 @@ static int worker_thread(void *__worker)
* event. * event.
*/ */
worker_enter_idle(worker); worker_enter_idle(worker);
__set_current_state(TASK_INTERRUPTIBLE); __set_current_state(TASK_IDLE);
spin_unlock_irq(&pool->lock); spin_unlock_irq(&pool->lock);
schedule(); schedule();
goto woke_up; goto woke_up;
...@@ -2311,7 +2311,7 @@ static int rescuer_thread(void *__rescuer) ...@@ -2311,7 +2311,7 @@ static int rescuer_thread(void *__rescuer)
*/ */
rescuer->task->flags |= PF_WQ_WORKER; rescuer->task->flags |= PF_WQ_WORKER;
repeat: repeat:
set_current_state(TASK_INTERRUPTIBLE); set_current_state(TASK_IDLE);
/* /*
* By the time the rescuer is requested to stop, the workqueue * By the time the rescuer is requested to stop, the workqueue
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment