[PATCH v5 0/2] workqueue: Make WQ_UNBOUND the default behavior

From: Marco Crivellari

Date: Mon Nov 02 2026 - 06:07:08 EST


Hi,

Currently alloc_workqueue() make sure one among WQ_UNBOUND or WQ_PERCPU is
present with the current default being WQ_PERCPU.

This default is suboptimal: most workloads benefit from unbound queues,
allowing the scheduler to place worker threads where they're needed and
reducing noise when CPUs are isolated.

This series changes this behavior as follows:

[ P1 ]

- keep WARN_ON() if WQ_PERCPU and WQ_UNBOUND are present and drop
WQ_PERCPU.

- defaults to WQ_UNBOUND except for WQ_BH, that it is always per-CPU.

[ P2 ]

Documentation updated accordingly.

Thanks!

---
Changes in v5:
>From Tejun / Breno:

- Dropped the pr_warn_once() when neither among WQ_PERCPU | WQ_UNBOUND is
present and add WQ_UNBOUND.

- move wq_dropped_percpu declaration on top

- improve comments and commit log, so that it better describe also the
reasons of this change.

- prefix "workqueue: doc:" on documentation improving descriptions about
the flags.

Link to v4: https://lore.kernel.org/all/20261015140148.231126-1-marco.crivellari@xxxxxxxx/

Changes in v4:
- WQ_BH: add documentation about BH workqueue implying WQ_PERCPU

Link to v3: https://lore.kernel.org/all/20260904141421.287647-1-marco.crivellari@xxxxxxxx/

Changes in v3:
- WQ_BH require WQ_PERCPU

Link to v2: https://lore.kernel.org/all/20260903165251.481362-1-marco.crivellari@xxxxxxxx/

Changes in v2:
- if/else to add/drop WQ_UNBOUND/WQ_PERCPU moved before wq_size assignment

Link to v1: https://lore.kernel.org/all/20260903152204.401638-1-marco.crivellari@xxxxxxxx/


Marco Crivellari (2):
workqueue: Make alloc_workqueue() unbound by default
workqueue: doc: Update WQ_UNBOUND and WQ_BH documentation

Documentation/core-api/workqueue.rst | 14 +++++++-----
include/linux/workqueue.h | 4 ++--
kernel/workqueue.c | 32 ++++++++++++++--------------
3 files changed, 27 insertions(+), 23 deletions(-)

--
2.56.0