Re: [PATCH] wifi: ath6kl: fix invalid workqueue flags in ath6kl_usb_create()
From: Tetsuo Handa
Date: Wed Jun 10 2026 - 07:09:58 EST
On 2026/06/10 18:22, wuyankun wrote:
> ath6kl_usb_create() currently creates ath6kl_wq with flags set to 0:
>
> alloc_workqueue("ath6kl_wq", 0, 0)
>
> This triggers a runtime warning in __alloc_workqueue() because the queue is
> created with neither WQ_PERCPU nor WQ_UNBOUND set:
>
> workqueue: ath6kl_wq is using neither WQ_PERCPU or WQ_UNBOUND.
> Setting WQ_PERCPU.
>
> Set WQ_PERCPU explicitly to match the actual execution model and remove the
> warning during device probe. No functional change intended.
>
> Fixes: 62ebaf2f9261 ("ath6kl: avoid flush_scheduled_work() usage")
Please use
Fixes: 21c05ca88a54 ("workqueue: Add warnings and ensure one among WQ_PERCPU or WQ_UNBOUND is present")
for this problem because this problem is caused by
WQ subsystem is about to start requiring WQ_PERCPU unless WQ_UNBOUND,
without updating all in-tree users before start emitting WARNING: message
. Also, you don't need to send to stable, but please try to send to linux.git before
7.1-final is released (because this fix should be applied before 21c05ca88a54 is
applied in order to avoid flooding of WARNING: messages).
> Reported-by: syzbot+f80c62f371ba6a1e7d79@xxxxxxxxxxxxxxxxxxxxxxxxx
> Link: https://lore.kernel.org/all/6a289c01.39669fcc.33b062.00aa.GAE@xxxxxxxxxx/T/
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: wuyankun <wuyankun@xxxxxxxxxxxxx>
> ---
> drivers/net/wireless/ath/ath6kl/usb.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/ath/ath6kl/usb.c b/drivers/net/wireless/ath/ath6kl/usb.c
> index 79c18f5ee02b..945984c3dbe6 100644
> --- a/drivers/net/wireless/ath/ath6kl/usb.c
> +++ b/drivers/net/wireless/ath/ath6kl/usb.c
> @@ -636,7 +636,7 @@ static struct ath6kl_usb *ath6kl_usb_create(struct usb_interface *interface)
> ar_usb = kzalloc_obj(struct ath6kl_usb);
> if (ar_usb == NULL)
> return NULL;
> - ar_usb->wq = alloc_workqueue("ath6kl_wq", 0, 0);
> + ar_usb->wq = alloc_workqueue("ath6kl_wq", WQ_PERCPU, 0);
> if (!ar_usb->wq) {
> kfree(ar_usb);
> return NULL;