Commit 8f43470
staging: rtl8723bs: Fix access-point mode deadlock
Commit 54659ca ("staging: rtl8723bs: remove possible deadlock when
disconnect (v2)") split the locking of pxmitpriv->lock vs sleep_q/lock
into 2 locks in attempt to fix a lockdep reported issue with the locking
order of the sta_hash_lock vs pxmitpriv->lock.
But in the end this turned out to not fully solve the sta_hash_lock issue
so commit a7ac783 ("staging: rtl8723bs: remove a second possible
deadlock") was added to fix this in another way.
The original fix was kept as it was still seen as a good thing to have,
but now it turns out that it creates a deadlock in access-point mode:
[Feb20 23:47] ======================================================
[ +0.074085] WARNING: possible circular locking dependency detected
[ +0.074077] 5.16.0-1-amd64 #1 Tainted: G C E
[ +0.064710] ------------------------------------------------------
[ +0.074075] ksoftirqd/3/29 is trying to acquire lock:
[ +0.060542] ffffb8b30062ab00 (&pxmitpriv->lock){+.-.}-{2:2}, at: rtw_xmit_classifier+0x8a/0x140 [r8723bs]
[ +0.114921]
but task is already holding lock:
[ +0.069908] ffffb8b3007ab704 (&psta->sleep_q.lock){+.-.}-{2:2}, at: wakeup_sta_to_xmit+0x3b/0x300 [r8723bs]
[ +0.116976]
which lock already depends on the new lock.
[ +0.098037]
the existing dependency chain (in reverse order) is:
[ +0.089704]
-> #1 (&psta->sleep_q.lock){+.-.}-{2:2}:
[ +0.077232] _raw_spin_lock_bh+0x34/0x40
[ +0.053261] xmitframe_enqueue_for_sleeping_sta+0xc1/0x2f0 [r8723bs]
[ +0.082572] rtw_xmit+0x58b/0x940 [r8723bs]
[ +0.056528] _rtw_xmit_entry+0xba/0x350 [r8723bs]
[ +0.062755] dev_hard_start_xmit+0xf1/0x320
[ +0.056381] sch_direct_xmit+0x9e/0x360
[ +0.052212] __dev_queue_xmit+0xce4/0x1080
[ +0.055334] ip6_finish_output2+0x18f/0x6e0
[ +0.056378] ndisc_send_skb+0x2c8/0x870
[ +0.052209] ndisc_send_ns+0xd3/0x210
[ +0.050130] addrconf_dad_work+0x3df/0x5a0
[ +0.055338] process_one_work+0x274/0x5a0
[ +0.054296] worker_thread+0x52/0x3b0
[ +0.050124] kthread+0x16c/0x1a0
[ +0.044925] ret_from_fork+0x1f/0x30
[ +0.049092]
-> #0 (&pxmitpriv->lock){+.-.}-{2:2}:
[ +0.074101] __lock_acquire+0x10f5/0x1d80
[ +0.054298] lock_acquire+0xd7/0x300
[ +0.049088] _raw_spin_lock_bh+0x34/0x40
[ +0.053248] rtw_xmit_classifier+0x8a/0x140 [r8723bs]
[ +0.066949] rtw_xmitframe_enqueue+0xa/0x20 [r8723bs]
[ +0.066946] rtl8723bs_hal_xmitframe_enqueue+0x14/0x50 [r8723bs]
[ +0.078386] wakeup_sta_to_xmit+0xa6/0x300 [r8723bs]
[ +0.065903] rtw_recv_entry+0xe36/0x1160 [r8723bs]
[ +0.063809] rtl8723bs_recv_tasklet+0x349/0x6c0 [r8723bs]
[ +0.071093] tasklet_action_common.constprop.0+0xe5/0x110
[ +0.070966] __do_softirq+0x16f/0x50a
[ +0.050134] __irq_exit_rcu+0xeb/0x140
[ +0.051172] irq_exit_rcu+0xa/0x20
[ +0.047006] common_interrupt+0xb8/0xd0
[ +0.052214] asm_common_interrupt+0x1e/0x40
[ +0.056381] finish_task_switch.isra.0+0x100/0x3a0
[ +0.063670] __schedule+0x3ad/0xd20
[ +0.048047] schedule+0x4e/0xc0
[ +0.043880] smpboot_thread_fn+0xc4/0x220
[ +0.054298] kthread+0x16c/0x1a0
[ +0.044922] ret_from_fork+0x1f/0x30
[ +0.049088]
other info that might help us debug this:
[ +0.095950] Possible unsafe locking scenario:
[ +0.070952] CPU0 CPU1
[ +0.054282] ---- ----
[ +0.054285] lock(&psta->sleep_q.lock);
[ +0.047004] lock(&pxmitpriv->lock);
[ +0.074082] lock(&psta->sleep_q.lock);
[ +0.077209] lock(&pxmitpriv->lock);
[ +0.043873]
*** DEADLOCK ***
[ +0.070950] 1 lock held by ksoftirqd/3/29:
[ +0.049082] #0: ffffb8b3007ab704 (&psta->sleep_q.lock){+.-.}-{2:2}, at: wakeup_sta_to_xmit+0x3b/0x300 [r8723bs]
Analysis shows that in hindsight the splitting of the lock was not
a good idea, so revert this to fix the access-point mode deadlock.
Note this is a straight-forward revert done with git revert, the commented
out "/* spin_lock_bh(&psta_bmc->sleep_q.lock); */" lines were part of the
code before the reverted changes.
Fixes: 54659ca ("staging: rtl8723bs: remove possible deadlock when disconnect (v2)")
Cc: stable <stable@vger.kernel.org>
Cc: Fabio Aiuto <fabioaiuto83@gmail.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=215542
Link: https://lore.kernel.org/r/20220302101637.26542-1-hdegoede@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>1 parent fc7f750 commit 8f43470
5 files changed
Lines changed: 33 additions & 24 deletions
File tree
- drivers/staging/rtl8723bs
- core
- hal
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5907 | 5907 | | |
5908 | 5908 | | |
5909 | 5909 | | |
| 5910 | + | |
5910 | 5911 | | |
5911 | 5912 | | |
5912 | 5913 | | |
| |||
5917 | 5918 | | |
5918 | 5919 | | |
5919 | 5920 | | |
5920 | | - | |
| 5921 | + | |
| 5922 | + | |
5921 | 5923 | | |
5922 | 5924 | | |
5923 | 5925 | | |
| |||
5940 | 5942 | | |
5941 | 5943 | | |
5942 | 5944 | | |
5943 | | - | |
| 5945 | + | |
| 5946 | + | |
5944 | 5947 | | |
5945 | 5948 | | |
5946 | 5949 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
957 | 957 | | |
958 | 958 | | |
959 | 959 | | |
| 960 | + | |
960 | 961 | | |
961 | | - | |
| 962 | + | |
| 963 | + | |
962 | 964 | | |
963 | 965 | | |
964 | 966 | | |
| |||
989 | 991 | | |
990 | 992 | | |
991 | 993 | | |
992 | | - | |
| 994 | + | |
| 995 | + | |
993 | 996 | | |
994 | 997 | | |
995 | | - | |
| 998 | + | |
| 999 | + | |
996 | 1000 | | |
997 | 1001 | | |
998 | 1002 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
293 | 293 | | |
294 | 294 | | |
295 | 295 | | |
296 | | - | |
| 296 | + | |
| 297 | + | |
297 | 298 | | |
298 | 299 | | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | 300 | | |
303 | 301 | | |
304 | | - | |
| 302 | + | |
305 | 303 | | |
306 | 304 | | |
307 | 305 | | |
308 | 306 | | |
309 | 307 | | |
310 | | - | |
| 308 | + | |
311 | 309 | | |
312 | 310 | | |
313 | | - | |
| 311 | + | |
314 | 312 | | |
315 | 313 | | |
316 | 314 | | |
317 | 315 | | |
318 | 316 | | |
319 | | - | |
| 317 | + | |
320 | 318 | | |
321 | 319 | | |
322 | | - | |
| 320 | + | |
323 | 321 | | |
324 | 322 | | |
325 | 323 | | |
326 | 324 | | |
327 | 325 | | |
328 | | - | |
| 326 | + | |
329 | 327 | | |
330 | 328 | | |
331 | | - | |
| 329 | + | |
332 | 330 | | |
333 | 331 | | |
334 | 332 | | |
335 | 333 | | |
336 | 334 | | |
337 | | - | |
| 335 | + | |
338 | 336 | | |
339 | 337 | | |
340 | 338 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1734 | 1734 | | |
1735 | 1735 | | |
1736 | 1736 | | |
| 1737 | + | |
| 1738 | + | |
1737 | 1739 | | |
1738 | 1740 | | |
1739 | 1741 | | |
1740 | 1742 | | |
1741 | 1743 | | |
1742 | 1744 | | |
| 1745 | + | |
1743 | 1746 | | |
1744 | 1747 | | |
1745 | 1748 | | |
| |||
1794 | 1797 | | |
1795 | 1798 | | |
1796 | 1799 | | |
1797 | | - | |
1798 | 1800 | | |
1799 | 1801 | | |
1800 | 1802 | | |
| |||
1812 | 1814 | | |
1813 | 1815 | | |
1814 | 1816 | | |
1815 | | - | |
1816 | 1817 | | |
1817 | 1818 | | |
1818 | 1819 | | |
1819 | 1820 | | |
1820 | 1821 | | |
1821 | 1822 | | |
1822 | | - | |
1823 | 1823 | | |
1824 | 1824 | | |
1825 | 1825 | | |
| |||
2202 | 2202 | | |
2203 | 2203 | | |
2204 | 2204 | | |
| 2205 | + | |
2205 | 2206 | | |
2206 | 2207 | | |
2207 | 2208 | | |
2208 | | - | |
| 2209 | + | |
2209 | 2210 | | |
2210 | 2211 | | |
2211 | 2212 | | |
| |||
2306 | 2307 | | |
2307 | 2308 | | |
2308 | 2309 | | |
2309 | | - | |
| 2310 | + | |
2310 | 2311 | | |
2311 | 2312 | | |
2312 | 2313 | | |
| |||
2318 | 2319 | | |
2319 | 2320 | | |
2320 | 2321 | | |
| 2322 | + | |
2321 | 2323 | | |
2322 | | - | |
| 2324 | + | |
2323 | 2325 | | |
2324 | 2326 | | |
2325 | 2327 | | |
| |||
2372 | 2374 | | |
2373 | 2375 | | |
2374 | 2376 | | |
2375 | | - | |
| 2377 | + | |
2376 | 2378 | | |
2377 | 2379 | | |
2378 | 2380 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
502 | 502 | | |
503 | 503 | | |
504 | 504 | | |
| 505 | + | |
505 | 506 | | |
| 507 | + | |
506 | 508 | | |
507 | 509 | | |
508 | 510 | | |
| |||
0 commit comments