[PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue

Marco Crivellari posted 3 patches 2 months, 3 weeks ago
There is a newer version of this series
drivers/net/wireless/ath/ath6kl/usb.c | 2 +-
drivers/net/wireless/st/cw1200/bh.c   | 5 +++--
net/wireless/core.c                   | 4 ++--
net/wireless/sysfs.c                  | 2 +-
4 files changed, 7 insertions(+), 6 deletions(-)
[PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue
Posted by Marco Crivellari 2 months, 3 weeks ago
Hi,

=== Current situation: problems ===

Let's consider a nohz_full system with isolated CPUs: wq_unbound_cpumask is
set to the housekeeping CPUs, for !WQ_UNBOUND the local CPU is selected.

This leads to different scenarios if a work item is scheduled on an
isolated CPU where "delay" value is 0 or greater then 0:
        schedule_delayed_work(, 0);

This will be handled by __queue_work() that will queue the work item on the
current local (isolated) CPU, while:

        schedule_delayed_work(, 1);

Will move the timer on an housekeeping CPU, and schedule the work there.

Currently if a user enqueue a work item using schedule_delayed_work() the
used wq is "system_wq" (per-cpu wq) while queue_delayed_work() use
WORK_CPU_UNBOUND (used when a cpu is not specified). The same applies to
schedule_work() that is using system_wq and queue_work(), that makes use
again of WORK_CPU_UNBOUND.

This lack of consistency cannot be addressed without refactoring the API.

=== Recent changes to the WQ API ===

The following, address the recent changes in the Workqueue API:

- commit 128ea9f6ccfb ("workqueue: Add system_percpu_wq and system_dfl_wq")
- commit 930c2ea566af ("workqueue: Add new WQ_PERCPU flag")

The old workqueues will be removed in a future release cycle.

=== Introduced Changes by this series ===

1) [P 1-2] WQ_PERCPU to alloc_workqueue()

    Add a new WQ_PERCPU flag to explicitly request alloc_workqueue() to be
	per-cpu when WQ_UNBOUND has not been specified.

1) [P 3]  Replace uses of system_unbound_wq

    system_unbound_wq is to be used when locality is not required.

	Switch to using system_dfl_wq because system_unbound_wq is going away as
	part of a workqueue restructuring.


Thanks!

Marco Crivellari (3):
  ath6kl: add WQ_PERCPU to alloc_workqueue users
  cw1200: add WQ_PERCPU to alloc_workqueue users
  wifi: replace use of system_unbound_wq with system_dfl_wq

 drivers/net/wireless/ath/ath6kl/usb.c | 2 +-
 drivers/net/wireless/st/cw1200/bh.c   | 5 +++--
 net/wireless/core.c                   | 4 ++--
 net/wireless/sysfs.c                  | 2 +-
 4 files changed, 7 insertions(+), 6 deletions(-)

-- 
2.51.1
Re: [PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue
Posted by Marco Crivellari 3 weeks, 4 days ago
On Thu, Nov 13, 2025 at 5:20 PM Marco Crivellari
<marco.crivellari@suse.com> wrote:
> [...]
> Marco Crivellari (3):
>   ath6kl: add WQ_PERCPU to alloc_workqueue users
>   cw1200: add WQ_PERCPU to alloc_workqueue users
>   wifi: replace use of system_unbound_wq with system_dfl_wq
>
>  drivers/net/wireless/ath/ath6kl/usb.c | 2 +-
>  drivers/net/wireless/st/cw1200/bh.c   | 5 +++--
>  net/wireless/core.c                   | 4 ++--
>  net/wireless/sysfs.c                  | 2 +-
>  4 files changed, 7 insertions(+), 6 deletions(-)

Gentle ping.

Thanks!

-- 

Marco Crivellari

L3 Support Engineer
Re: [PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue
Posted by Johannes Berg 3 weeks, 4 days ago
On Tue, 2026-01-13 at 11:28 +0100, Marco Crivellari wrote:
> On Thu, Nov 13, 2025 at 5:20 PM Marco Crivellari
> <marco.crivellari@suse.com> wrote:
> > [...]
> > Marco Crivellari (3):
> >   ath6kl: add WQ_PERCPU to alloc_workqueue users
> >   cw1200: add WQ_PERCPU to alloc_workqueue users
> >   wifi: replace use of system_unbound_wq with system_dfl_wq
> > 
> >  drivers/net/wireless/ath/ath6kl/usb.c | 2 +-
> >  drivers/net/wireless/st/cw1200/bh.c   | 5 +++--
> >  net/wireless/core.c                   | 4 ++--
> >  net/wireless/sysfs.c                  | 2 +-
> >  4 files changed, 7 insertions(+), 6 deletions(-)
> 
> Gentle ping.

I have none of these pending now - if I didn't accept them then they're
lost. I did try to apply another similar one yesterday but it was
already there in a slightly different format, so maybe things have
gotten out of sync?

johannes
Re: [PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue
Posted by Marco Crivellari 3 weeks, 4 days ago
On Tue, Jan 13, 2026 at 12:05 PM Johannes Berg
<johannes@sipsolutions.net> wrote:
> I have none of these pending now - if I didn't accept them then they're
> lost. I did try to apply another similar one yesterday but it was
> already there in a slightly different format, so maybe things have
> gotten out of sync?
>
> johannes

Hi Johannes,

That's likely.
I rebased now on v6.19-rc5 and I can only see in my branch:
"ath6kl: add WQ_PERCPU to alloc_workqueue users".

The others seem already applied.

Well, sorry for the noise.

Thank you!

-- 

Marco Crivellari

L3 Support Engineer
Re: [PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue
Posted by Johannes Berg 3 weeks, 4 days ago
On Tue, 2026-01-13 at 12:16 +0100, Marco Crivellari wrote:
> On Tue, Jan 13, 2026 at 12:05 PM Johannes Berg
> <johannes@sipsolutions.net> wrote:
> > I have none of these pending now - if I didn't accept them then they're
> > lost. I did try to apply another similar one yesterday but it was
> > already there in a slightly different format, so maybe things have
> > gotten out of sync?
> > 
> > johannes
> 
> Hi Johannes,
> 
> That's likely.
> I rebased now on v6.19-rc5 and I can only see in my branch:
> "ath6kl: add WQ_PERCPU to alloc_workqueue users".
> 
> The others seem already applied.
> 
> Well, sorry for the noise.

OK cool, no worries. FWIW I might have even more in wireless-next:
https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git/

If you want to see what's pending, we have it in patchwork for wireless:
https://patchwork.kernel.org/project/linux-wireless/list/

The ath6kl one seems to be pending still on Jeff:
https://patchwork.kernel.org/project/linux-wireless/patch/20251113162032.394804-2-marco.crivellari@suse.com/

johannes
Re: [PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue
Posted by Marco Crivellari 3 weeks, 4 days ago
On Tue, Jan 13, 2026 at 12:19 PM Johannes Berg
<johannes@sipsolutions.net> wrote:
> OK cool, no worries. FWIW I might have even more in wireless-next:
> https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git/
>
> If you want to see what's pending, we have it in patchwork for wireless:
> https://patchwork.kernel.org/project/linux-wireless/list/
>
> The ath6kl one seems to be pending still on Jeff:
> https://patchwork.kernel.org/project/linux-wireless/patch/20251113162032.394804-2-marco.crivellari@suse.com/

Aha, nice, many thanks!

-- 

Marco Crivellari

L3 Support Engineer
RE: [PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue
Posted by Ping-Ke Shih 3 weeks, 3 days ago
Marco Crivellari <marco.crivellari@suse.com> wrote:
> On Tue, Jan 13, 2026 at 12:19 PM Johannes Berg
> <johannes@sipsolutions.net> wrote:
> > OK cool, no worries. FWIW I might have even more in wireless-next:
> > https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git/
> >
> > If you want to see what's pending, we have it in patchwork for wireless:
> > https://patchwork.kernel.org/project/linux-wireless/list/
> >
> > The ath6kl one seems to be pending still on Jeff:
> >
> https://patchwork.kernel.org/project/linux-wireless/patch/20251113162032.394804-2-marco.crivellari@sus
> e.com/
> 
> Aha, nice, many thanks!
> 

The rtw88 one [1] is still queued on my hand, because it was wrongly applied [2]
causing regression and reverted by [3]. However, I have not rebased rtw-next
tree on top of wireless tree, so I can't apply [1]. Do you think this is urgent?
If so, I'd send a pull request to wireless-next right now since it is 6.19-rc5.
I don't want frequent pull-request that maintainers have extra load. 

[1] https://patchwork.kernel.org/project/linux-wireless/patch/20251113160605.381777-3-marco.crivellari@suse.com/
[2] 9c194fe4625d ("wifi: rtw88: add WQ_UNBOUND to alloc_workqueue users")
[3] 0ff5e81e1518 ("Revert "wifi: rtw88: add WQ_UNBOUND to alloc_workqueue users"")


Re: [PATCH 0/3] replace system_unbound_wq, add WQ_PERCPU to alloc_workqueue
Posted by Marco Crivellari 3 weeks, 3 days ago
On Wed, Jan 14, 2026 at 1:42 AM Ping-Ke Shih <pkshih@realtek.com> wrote:
> [...]
> The rtw88 one [1] is still queued on my hand, because it was wrongly applied [2]
> causing regression and reverted by [3]. However, I have not rebased rtw-next
> tree on top of wireless tree, so I can't apply [1]. Do you think this is urgent?
> If so, I'd send a pull request to wireless-next right now since it is 6.19-rc5.
> I don't want frequent pull-request that maintainers have extra load.
>
> [1] https://patchwork.kernel.org/project/linux-wireless/patch/20251113160605.381777-3-marco.crivellari@suse.com/
> [2] 9c194fe4625d ("wifi: rtw88: add WQ_UNBOUND to alloc_workqueue users")
> [3] 0ff5e81e1518 ("Revert "wifi: rtw88: add WQ_UNBOUND to alloc_workqueue users"")

Hi,

I still have some other patches around, so if you have to posticipate
this to the next release is fine with me, no need to rush.

Thanks!

-- 

Marco Crivellari

L3 Support Engineer