]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Revert "wifi: rtw88: add WQ_UNBOUND to alloc_workqueue users"
authorBitterblue Smith <rtl8821cerfe2@gmail.com>
Sat, 6 Dec 2025 18:32:43 +0000 (20:32 +0200)
committerPing-Ke Shih <pkshih@realtek.com>
Mon, 15 Dec 2025 08:48:47 +0000 (16:48 +0800)
This reverts commit 9c194fe4625db18f93d5abcfb7f7997557a0b29d.

This commit breaks all USB wifi adapters supported by rtw88:

usb 1-2: new high-speed USB device number 6 using xhci_hcd
usb 1-2: New USB device found, idVendor=2357, idProduct=0138, bcdDevice= 2.10
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2: Product: 802.11ac NIC
usb 1-2: Manufacturer: Realtek
usb 1-2: SerialNumber: 123456
------------[ cut here ]------------
WARNING: CPU: 3 PID: 152 at kernel/workqueue.c:5667 alloc_workqueue_noprof+0x676/0x770

[...]

Call Trace:
 <TASK>
 ? rtw_usb_probe+0x30e/0xa5c [rtw88_usb 4af3cb64eedafeecbfb08f80c1e9e2893e2ee7a6]
 rtw_usb_probe+0x3eb/0xa5c [rtw88_usb 4af3cb64eedafeecbfb08f80c1e9e2893e2ee7a6]
 usb_probe_interface+0xdd/0x2c0
 really_probe+0xdb/0x340
 ? pm_runtime_barrier+0x55/0x90
 ? __pfx___device_attach_driver+0x10/0x10
 __driver_probe_device+0x78/0x140
 driver_probe_device+0x1f/0xa0
 __device_attach_driver+0x89/0x110
 bus_for_each_drv+0x8f/0xe0
 __device_attach+0xb0/0x1c0
 bus_probe_device+0x90/0xa0
 device_add+0x663/0x880
 usb_set_configuration+0x5a5/0x870
 usb_generic_driver_probe+0x4a/0x70
 usb_probe_device+0x3d/0x140
 ? driver_sysfs_add+0x59/0xd0
 really_probe+0xdb/0x340
 ? pm_runtime_barrier+0x55/0x90
 ? __pfx___device_attach_driver+0x10/0x10
 __driver_probe_device+0x78/0x140
 driver_probe_device+0x1f/0xa0
 __device_attach_driver+0x89/0x110
 bus_for_each_drv+0x8f/0xe0
 __device_attach+0xb0/0x1c0
 bus_probe_device+0x90/0xa0
 device_add+0x663/0x880
 usb_new_device.cold+0x141/0x3b5
 hub_event+0x1132/0x1900
 ? page_counter_uncharge+0x4a/0x90
 process_one_work+0x190/0x350
 worker_thread+0x2d7/0x410
 ? __pfx_worker_thread+0x10/0x10
 kthread+0xf9/0x240
 ? __pfx_kthread+0x10/0x10
 ? __pfx_kthread+0x10/0x10
 ret_from_fork+0x1c1/0x1f0
 ? __pfx_kthread+0x10/0x10
 ret_from_fork_asm+0x1a/0x30
 </TASK>
---[ end trace 0000000000000000 ]---
rtw88_8822bu 1-2:1.0: failed to create RX work queue
rtw88_8822bu 1-2:1.0: failed to init USB RX
rtw88_8822bu 1-2:1.0: Firmware version 27.2.0, H2C version 13
rtw88_8822bu 1-2:1.0: probe with driver rtw88_8822bu failed with error -12

WQ_UNBOUND is not compatible with WQ_BH. Comment in enum wq_flags in
workqueue.h says:

/* BH wq only allows the following flags */
__WQ_BH_ALLOWS = WQ_BH | WQ_HIGHPRI | WQ_PERCPU,

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/d57efe48-b8ff-4bf1-942c-7e808535eda6@gmail.com
drivers/net/wireless/realtek/rtw88/usb.c

index 009202c627d2574b7f13c3e372cad90d0f77a5b3..3b5126ffc81a1c4b869c3c1fc3314a1fd591b709 100644 (file)
@@ -965,8 +965,7 @@ static int rtw_usb_init_rx(struct rtw_dev *rtwdev)
        struct sk_buff *rx_skb;
        int i;
 
-       rtwusb->rxwq = alloc_workqueue("rtw88_usb: rx wq", WQ_BH | WQ_UNBOUND,
-                                      0);
+       rtwusb->rxwq = alloc_workqueue("rtw88_usb: rx wq", WQ_BH, 0);
        if (!rtwusb->rxwq) {
                rtw_err(rtwdev, "failed to create RX work queue\n");
                return -ENOMEM;