Re: [PATCH v3 2/2] workqueue: Add warnings and ensure one among WQ_PERCPU or WQ_UNBOUND is present

From: Marco Crivellari

Date: Fri May 29 2026 - 04:53:51 EST


Hi,

On Thu, May 28, 2026 at 6:25 PM Tejun Heo <tj@xxxxxxxxxx> wrote:
>
> On Thu, May 28, 2026 at 06:01:59PM +0200, Marco Crivellari wrote:
> ...
> > @@ -5850,6 +5850,23 @@ static struct workqueue_struct *__alloc_workqueue(const char *fmt,
> > pr_warn_once("workqueue: name exceeds WQ_NAME_LEN. Truncating to: %s\n",
> > wq->name);
> >
> > + /*
> > + * One among WQ_PERCPU and WQ_UNBOUND must be set, but not both.
> > + * - If neither is set, default to WQ_PERCPU
> > + * - If both are set, default to WQ_UNBOUND
> > + *
> > + * This code can be removed after workqueue are unbound by default
> > + */
> > + if (!(flags & (WQ_UNBOUND | WQ_PERCPU))) {
> > + pr_warn_ratelimited("workqueue: %s is using neither WQ_PERCPU or WQ_UNBOUND. "
> > + "Setting WQ_PERCPU.\n", wq->name);
> > + flags |= WQ_PERCPU;
> > + } else if((flags & WQ_PERCPU) && (flags & WQ_UNBOUND)) {
> > + pr_warn_ratelimited("workqueue: %s uses both WQ_PERCPU and WQ_UNBOUND. "
> > + "Dropped WQ_PERCPU, keeping WQ_UNBOUND.\n", wq->name);
> > + flags &= (~WQ_PERCPU);
> > + }
>
> Let's just WARN_ONCE() on these. These are outright bugs, right?

Yes, they are. I will change this to use WARN_ONCE() for the next version.

Thanks!
--

Marco Crivellari

SUSE Labs