Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rtlwifi: add protection before calling {enable|disable}_interrupt()
Detected on pcie/rtl8192ce embedded armv7/arm64 plaform Call to {enable|disable}_interrupt() seem not enought protected, so, add extra protection to avoid collision Without this patch (randomly) [ 184.243426] rcu: INFO: rcu_sched self-detected stall on CPU [ 184.249008] rcu: 0-....: (8405 ticks this GP) idle=df74/1/0x40000002 softirq=3607/3607 fqs=2972 [ 184.257790] (t=8407 jiffies g=6613 q=56899 ncpus=4) [ 184.257803] CPU: 0 PID: 1059 Comm: ifconfig Not tainted 6.2.7 #3 [ 184.257813] Hardware name: STi SoC with Flattened Device Tree [ 184.257818] PC is at pci_read32_sync+0x10/0x14 [rtl_pci] [ 184.257860] LR is at rtl92ce_enable_interrupt+0x4c/0x8c [rtl8192ce] [ 184.257921] pc : [<bf46d03c>] lr : [<bf478e44>] psr: 20060013 [ 184.257928] sp : f1375ce0 ip : bf451b34 fp : c14f3c00 [ 184.257933] r10: c2c4b780 r9 : c28f4000 r8 : c15b18bc [ 184.257938] r7 : 00000000 r6 : c15bd880 r5 : c15bc880 r4 : c15b1880 [ 184.257944] r3 : f09e8000 r2 : 00000730 r1 : f09e8120 r0 : 00001b5f [ 184.257950] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none [ 184.257959] Control: 10c5387d Table: 86c0804a DAC: 00000051 [ 184.257970] pci_read32_sync [rtl_pci] from rtl92ce_enable_interrupt+0x4c/0x8c [rtl8192ce] [ 184.258018] rtl92ce_enable_interrupt [rtl8192ce] from rtl_pci_start+0xbc/0x18c [rtl_pci] [ 184.258059] rtl_pci_start [rtl_pci] from rtl_op_start+0x58/0x7c [rtlwifi] [ 184.258269] rtl_op_start [rtlwifi] from drv_start+0x4c/0x10c [mac80211] [ 184.259512] drv_start [mac80211] from ieee80211_do_open+0x370/0x6d8 [mac80211] [ 184.260444] ieee80211_do_open [mac80211] from ieee80211_open+0x60/0x84 [mac80211] [ 184.261374] ieee80211_open [mac80211] from __dev_open+0xfc/0x1d0 [ 184.261860] __dev_open from __dev_change_flags+0x190/0x214 [ 184.261878] __dev_change_flags from dev_change_flags+0x20/0x5c [ 184.261894] dev_change_flags from devinet_ioctl+0x7a8/0x7dc [ 184.261918] devinet_ioctl from inet_ioctl+0x1a4/0x244 [ 184.261937] inet_ioctl from sock_ioctl+0x4dc/0x5b8 [ 184.261962] sock_ioctl from sys_ioctl+0x510/0xbd8 [ 184.261985] sys_ioctl from ret_fast_syscall+0x0/0x1c this can be reproduced using NetworkManager or with this simple script: (~1-2min to deadlock) $ while : ; do ifconfig wlan0 up; ifconfig wlan0 done; echo -n "."; done' Signed-off-by: Jerome AUDU <jau@free.fr>
- Loading branch information