Re: [PATCH v3 1/2] workqueue: Add warnings and fallback if system_{unbound}_wq is used
From: Marco Crivellari
Date: Fri May 29 2026 - 04:34:54 EST
On Thu, May 28, 2026 at 6:18 PM Breno Leitao <leitao@xxxxxxxxxx> wrote:
>
> On Thu, May 28, 2026 at 06:01:58PM +0000, Marco Crivellari wrote:
> > Currently many users transitioned already to the new introduced workqueue
> > (system_percpu_wq, system_dfl_wq), but there are new users who still use the
> > older system_wq and system_unbound_wq.
> >
> > This change try to push this transition forward, by warning whether the old
> > workqueus are used.
> >
> > Link: https://lore.kernel.org/all/20250221112003.1dSuoGyc@xxxxxxxxxxxxx/
> > Suggested-by: Tejun Heo <tj@xxxxxxxxxx>
> > Signed-off-by: Marco Crivellari <marco.crivellari@xxxxxxxx>
> > ---
> > include/linux/workqueue.h | 1 +
> > kernel/workqueue.c | 12 ++++++++++--
> > 2 files changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
> > index 6177624539b3..a283766a192a 100644
> > --- a/include/linux/workqueue.h
> > +++ b/include/linux/workqueue.h
> > @@ -409,6 +409,7 @@ enum wq_flags {
> > __WQ_DRAINING = 1 << 16, /* internal: workqueue is draining */
> > __WQ_ORDERED = 1 << 17, /* internal: workqueue is ordered */
> > __WQ_LEGACY = 1 << 18, /* internal: create*_workqueue() */
> > + __WQ_DEPRECATED = 1 << 19, /* internal: workqueue is deprecated */
> >
> > /* BH wq only allows the following flags */
> > __WQ_BH_ALLOWS = WQ_BH | WQ_HIGHPRI | WQ_PERCPU,
> > diff --git a/kernel/workqueue.c b/kernel/workqueue.c
> > index 33b721a9af02..0b55f8009eed 100644
> > --- a/kernel/workqueue.c
> > +++ b/kernel/workqueue.c
> > @@ -2280,6 +2280,14 @@ static void __queue_work(int cpu, struct workqueue_struct *wq,
> > unsigned int work_flags;
> > unsigned int req_cpu = cpu;
> >
> > + /*
> > + * NOTE: Check whether the used workqueue is deprecated and warn
> > + */
> > + if (unlikely(wq->flags & __WQ_DEPRECATED))
> > + pr_warn_once("workqueue: work func %ps enqueued on deprecated workqueue. "
> > + "Use system_{percpu|dfl}_wq instead.\n",
> > + work->func);
>
> Silly question, can we make this a build warning?
Mmh not sure. I tried something similar before the v1 to warn about
the workqueue, but I realized it doesn't work in every case, so at
least both should be kept if we go that way.
There is already something similar for users who try to flush the
system workqueue.
Thanks!
--
Marco Crivellari
SUSE Labs