diff mbox series

ath11k: fix warning of RCU usage for ath11k_mac_get_arvif_by_vdev_id()

Message ID 20211217064132.30911-1-quic_wgong@quicinc.com
State New
Headers show
Series ath11k: fix warning of RCU usage for ath11k_mac_get_arvif_by_vdev_id() | expand

Commit Message

Wen Gong Dec. 17, 2021, 6:41 a.m. UTC
When enable more debug config, it happen below warning. It is because
the caller does not add rcu_read_lock()/rcu_read_unlock() to wrap the
rcu_dereference().

Add rcu_read_lock()/rcu_read_unlock() to wrap rcu_dereference(), then
fixed it.

[ 180.716604] =============================
[ 180.716670] WARNING: suspicious RCU usage
[ 180.716734] 5.16.0-rc4-wt-ath+ #542 Not tainted
[ 180.716895] -----------------------------
[ 180.716957] drivers/net/wireless/ath/ath11k/mac.c:506 suspicious rcu_dereference_check() usage!
[ 180.717023]
               other info that might help us debug this:

[ 180.717087]
               rcu_scheduler_active = 2, debug_locks = 1
[ 180.717151] no locks held by swapper/0/0.
[ 180.717215]
               stack backtrace:
[ 180.717279] CPU: 0 PID: 0 Comm: swapper/0 Kdump: loaded Not tainted 5.16.0-rc4-wt-ath+ #542
[ 180.717346] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0067.2021.0528.1339 05/28/2021
[ 180.717411] Call Trace:
[ 180.717475] <IRQ>
[ 180.717541] dump_stack_lvl+0x57/0x7d
[ 180.717610] ath11k_mac_get_arvif_by_vdev_id+0x1ab/0x2d0 [ath11k]
[ 180.717694] ? ath11k_mac_get_arvif+0x140/0x140 [ath11k]
[ 180.717798] ? ath11k_wmi_tlv_op_rx+0xc1b/0x2520 [ath11k]
[ 180.717888] ? kfree+0xe8/0x2c0
[ 180.717959] ath11k_wmi_tlv_op_rx+0xc27/0x2520 [ath11k]
[ 180.718038] ? ath11k_mgmt_rx_event+0xda0/0xda0 [ath11k]
[ 180.718113] ? __lock_acquire+0xb72/0x1870
[ 180.718182] ? lockdep_hardirqs_on_prepare.part.0+0x18c/0x370
[ 180.718250] ? sched_clock_cpu+0x15/0x1b0
[ 180.718314] ? find_held_lock+0x33/0x110
[ 180.718381] ? __lock_release+0x4bd/0x9f0
[ 180.718447] ? lock_downgrade+0x130/0x130
[ 180.718517] ath11k_htc_rx_completion_handler+0x38f/0x5b0 [ath11k]
[ 180.718596] ? __local_bh_enable_ip+0xa0/0x110
[ 180.718662] ath11k_ce_recv_process_cb+0x5ac/0x920 [ath11k]
[ 180.718783] ? __lock_acquired+0x205/0x890
[ 180.718864] ? ath11k_ce_rx_post_pipe+0x970/0x970 [ath11k]
[ 180.718949] ? __wake_up_bit+0x100/0x100
[ 180.719020] ath11k_pci_ce_tasklet+0x5f/0xf0 [ath11k_pci]
[ 180.719085] ? tasklet_clear_sched+0x42/0xe0
[ 180.719148] tasklet_action_common.constprop.0+0x204/0x2f0
[ 180.719217] __do_softirq+0x276/0x86a
[ 180.719281] ? __common_interrupt+0x92/0x1d0
[ 180.719350] __irq_exit_rcu+0x11c/0x180
[ 180.719418] irq_exit_rcu+0x5/0x20
[ 180.719482] common_interrupt+0xa4/0xc0
[ 180.719547] </IRQ>
[ 180.719609] <TASK>
[ 180.719671] asm_common_interrupt+0x1e/0x40
[ 180.719772] RIP: 0010:cpuidle_enter_state+0x1f3/0x8d0
[ 180.719838] Code: 00 41 8b 77 04 bf ff ff ff ff e8 78 f1 ff ff 31 ff e8 81 fa 52 fe 80 7c 24 08 00 0f 85 9e 01 00 00 e8 11 13 78 fe fb 45 85 e4 <0f> 88 8c 02 00 00 49 63 ec 48 8d 44 6d 00 48 8d 44 85 00 48 8d 7c
[ 180.719909] RSP: 0018:ffffffffa4607dd0 EFLAGS: 00000202
[ 180.719982] RAX: 00000000002aea91 RBX: ffffffffa4a5fec0 RCX: 1ffffffff49ca501
[ 180.720047] RDX: 0000000000000000 RSI: ffffffffa3c6e4e0 RDI: ffffffffa3dcf2a0
[ 180.720110] RBP: 0000000000000002 R08: 0000000000000001 R09: ffffffffa4e54d17
[ 180.720173] R10: fffffbfff49ca9a2 R11: 0000000000000001 R12: 0000000000000002
[ 180.720236] R13: ffff8881169ccc04 R14: 0000002a13899598 R15: ffff8881169ccc00
[ 180.720321] cpuidle_enter+0x45/0xa0
[ 180.720413] cpuidle_idle_call+0x274/0x3f0
[ 180.720503] ? arch_cpu_idle_exit+0x30/0x30
[ 180.720869] ? tsc_verify_tsc_adjust+0x97/0x2e0
[ 180.720935] ? lockdep_hardirqs_off+0x90/0xd0
[ 180.721002] do_idle+0xe0/0x150
[ 180.721069] cpu_startup_entry+0x14/0x20
[ 180.721134] start_kernel+0x3a2/0x3c2
[ 180.721200] secondary_startup_64_no_verify+0xb0/0xbb
[ 180.721274] </TASK>

Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-02892.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1

Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
---
 drivers/net/wireless/ath/ath11k/wmi.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Kalle Valo Dec. 20, 2021, 4:08 p.m. UTC | #1
Wen Gong <quic_wgong@quicinc.com> wrote:

> When enable more debug config, it happen below warning. It is because
> the caller does not add rcu_read_lock()/rcu_read_unlock() to wrap the
> rcu_dereference().
> 
> Add rcu_read_lock()/rcu_read_unlock() to wrap rcu_dereference(), then
> fixed it.
> 
> [ 180.716604] =============================
> [ 180.716670] WARNING: suspicious RCU usage
> [ 180.716734] 5.16.0-rc4-wt-ath+ #542 Not tainted
> [ 180.716895] -----------------------------
> [ 180.716957] drivers/net/wireless/ath/ath11k/mac.c:506 suspicious rcu_dereference_check() usage!
> [ 180.717023]
>                other info that might help us debug this:
> 
> [ 180.717087]
>                rcu_scheduler_active = 2, debug_locks = 1
> [ 180.717151] no locks held by swapper/0/0.
> [ 180.717215]
>                stack backtrace:
> [ 180.717279] CPU: 0 PID: 0 Comm: swapper/0 Kdump: loaded Not tainted 5.16.0-rc4-wt-ath+ #542
> [ 180.717346] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0067.2021.0528.1339 05/28/2021
> [ 180.717411] Call Trace:
> [ 180.717475] <IRQ>
> [ 180.717541] dump_stack_lvl+0x57/0x7d
> [ 180.717610] ath11k_mac_get_arvif_by_vdev_id+0x1ab/0x2d0 [ath11k]
> [ 180.717694] ? ath11k_mac_get_arvif+0x140/0x140 [ath11k]
> [ 180.717798] ? ath11k_wmi_tlv_op_rx+0xc1b/0x2520 [ath11k]
> [ 180.717888] ? kfree+0xe8/0x2c0
> [ 180.717959] ath11k_wmi_tlv_op_rx+0xc27/0x2520 [ath11k]
> [ 180.718038] ? ath11k_mgmt_rx_event+0xda0/0xda0 [ath11k]
> [ 180.718113] ? __lock_acquire+0xb72/0x1870
> [ 180.718182] ? lockdep_hardirqs_on_prepare.part.0+0x18c/0x370
> [ 180.718250] ? sched_clock_cpu+0x15/0x1b0
> [ 180.718314] ? find_held_lock+0x33/0x110
> [ 180.718381] ? __lock_release+0x4bd/0x9f0
> [ 180.718447] ? lock_downgrade+0x130/0x130
> [ 180.718517] ath11k_htc_rx_completion_handler+0x38f/0x5b0 [ath11k]
> [ 180.718596] ? __local_bh_enable_ip+0xa0/0x110
> [ 180.718662] ath11k_ce_recv_process_cb+0x5ac/0x920 [ath11k]
> [ 180.718783] ? __lock_acquired+0x205/0x890
> [ 180.718864] ? ath11k_ce_rx_post_pipe+0x970/0x970 [ath11k]
> [ 180.718949] ? __wake_up_bit+0x100/0x100
> [ 180.719020] ath11k_pci_ce_tasklet+0x5f/0xf0 [ath11k_pci]
> [ 180.719085] ? tasklet_clear_sched+0x42/0xe0
> [ 180.719148] tasklet_action_common.constprop.0+0x204/0x2f0
> [ 180.719217] __do_softirq+0x276/0x86a
> [ 180.719281] ? __common_interrupt+0x92/0x1d0
> [ 180.719350] __irq_exit_rcu+0x11c/0x180
> [ 180.719418] irq_exit_rcu+0x5/0x20
> [ 180.719482] common_interrupt+0xa4/0xc0
> [ 180.719547] </IRQ>
> [ 180.719609] <TASK>
> [ 180.719671] asm_common_interrupt+0x1e/0x40
> [ 180.719772] RIP: 0010:cpuidle_enter_state+0x1f3/0x8d0
> [ 180.719838] Code: 00 41 8b 77 04 bf ff ff ff ff e8 78 f1 ff ff 31 ff e8 81 fa 52 fe 80 7c 24 08 00 0f 85 9e 01 00 00 e8 11 13 78 fe fb 45 85 e4 <0f> 88 8c 02 00 00 49 63 ec 48 8d 44 6d 00 48 8d 44 85 00 48 8d 7c
> [ 180.719909] RSP: 0018:ffffffffa4607dd0 EFLAGS: 00000202
> [ 180.719982] RAX: 00000000002aea91 RBX: ffffffffa4a5fec0 RCX: 1ffffffff49ca501
> [ 180.720047] RDX: 0000000000000000 RSI: ffffffffa3c6e4e0 RDI: ffffffffa3dcf2a0
> [ 180.720110] RBP: 0000000000000002 R08: 0000000000000001 R09: ffffffffa4e54d17
> [ 180.720173] R10: fffffbfff49ca9a2 R11: 0000000000000001 R12: 0000000000000002
> [ 180.720236] R13: ffff8881169ccc04 R14: 0000002a13899598 R15: ffff8881169ccc00
> [ 180.720321] cpuidle_enter+0x45/0xa0
> [ 180.720413] cpuidle_idle_call+0x274/0x3f0
> [ 180.720503] ? arch_cpu_idle_exit+0x30/0x30
> [ 180.720869] ? tsc_verify_tsc_adjust+0x97/0x2e0
> [ 180.720935] ? lockdep_hardirqs_off+0x90/0xd0
> [ 180.721002] do_idle+0xe0/0x150
> [ 180.721069] cpu_startup_entry+0x14/0x20
> [ 180.721134] start_kernel+0x3a2/0x3c2
> [ 180.721200] secondary_startup_64_no_verify+0xb0/0xbb
> [ 180.721274] </TASK>
> 
> Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-02892.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
> 
> Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>

Patch applied to ath-next branch of ath.git, thanks.

01e782c89108 ath11k: fix warning of RCU usage for ath11k_mac_get_arvif_by_vdev_id()
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
index 146fc0dcee6c..7cbade7fc47a 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -3595,6 +3595,8 @@  ath11k_wmi_obss_color_collision_event(struct ath11k_base *ab, struct sk_buff *sk
 		return;
 	}
 
+	rcu_read_lock();
+
 	ev = tb[WMI_TAG_OBSS_COLOR_COLLISION_EVT];
 	if (!ev) {
 		ath11k_warn(ab, "failed to fetch obss color collision ev");
@@ -3625,6 +3627,7 @@  ath11k_wmi_obss_color_collision_event(struct ath11k_base *ab, struct sk_buff *sk
 
 exit:
 	kfree(tb);
+	rcu_read_unlock();
 }
 
 static void
@@ -6395,13 +6398,16 @@  static void ath11k_bcn_tx_status_event(struct ath11k_base *ab, struct sk_buff *s
 		return;
 	}
 
+	rcu_read_lock();
 	arvif = ath11k_mac_get_arvif_by_vdev_id(ab, vdev_id);
 	if (!arvif) {
 		ath11k_warn(ab, "invalid vdev id %d in bcn_tx_status",
 			    vdev_id);
+		rcu_read_unlock();
 		return;
 	}
 	ath11k_mac_bcn_tx_event(arvif);
+	rcu_read_unlock();
 }
 
 static void ath11k_vdev_stopped_event(struct ath11k_base *ab, struct sk_buff *skb)