diff mbox series

[ath-next,v2] wifi: ath12k: Prevent sending WMI commands to firmware during firmware crash

Message ID 20250416020414.2161545-1-maharaja.kennadyrajan@oss.qualcomm.com (mailing list archive)
State Accepted
Delegated to: Jeff Johnson
Headers show
Series [ath-next,v2] wifi: ath12k: Prevent sending WMI commands to firmware during firmware crash | expand

Checks

Context Check Description
wifibot/fixes_present success Fixes tag not required for -next series
wifibot/series_format success Single patches do not need cover letters
wifibot/tree_selection success Clearly marked for ath-next
wifibot/ynl success Generated files up to date; no warnings/errors; no diff in generated;
wifibot/build_clang success Errors and warnings before: 0 this patch: 0
wifibot/build_32bit success Errors and warnings before: 0 this patch: 0
wifibot/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
wifibot/build_clang_rust success No Rust files in patch. Skipping build
wifibot/build_tools success No tools touched, skip
wifibot/check_selftest success No net selftest shell script
wifibot/checkpatch success total: 0 errors, 0 warnings, 0 checks, 20 lines checked
wifibot/deprecated_api success None detected
wifibot/header_inline success No static functions without inline keyword in header files
wifibot/kdoc success Errors and warnings before: 0 this patch: 0
wifibot/source_inline success Was 0 now: 0
wifibot/verify_fixes success Fixes tag looks correct
wifibot/verify_signedoff success Signed-off-by tag matches author and committer

Commit Message

Maharaja Kennadyrajan April 16, 2025, 2:04 a.m. UTC
Currently, we encounter the following kernel call trace when a firmware
crash occurs. This happens because the host sends WMI commands to the
firmware while it is in recovery, causing the commands to fail and
resulting in the kernel call trace.

Set the ATH12K_FLAG_CRASH_FLUSH and ATH12K_FLAG_RECOVERY flags when the
host driver receives the firmware crash notification from MHI. This
prevents sending WMI commands to the firmware during recovery.

Call Trace:
 <TASK>
 dump_stack_lvl+0x75/0xc0
 register_lock_class+0x6be/0x7a0
 ? __lock_acquire+0x644/0x19a0
 __lock_acquire+0x95/0x19a0
 lock_acquire+0x265/0x310
 ? ath12k_ce_send+0xa2/0x210 [ath12k]
 ? find_held_lock+0x34/0xa0
 ? ath12k_ce_send+0x56/0x210 [ath12k]
 _raw_spin_lock_bh+0x33/0x70
 ? ath12k_ce_send+0xa2/0x210 [ath12k]
 ath12k_ce_send+0xa2/0x210 [ath12k]
 ath12k_htc_send+0x178/0x390 [ath12k]
 ath12k_wmi_cmd_send_nowait+0x76/0xa0 [ath12k]
 ath12k_wmi_cmd_send+0x62/0x190 [ath12k]
 ath12k_wmi_pdev_bss_chan_info_request+0x62/0xc0 [ath1
 ath12k_mac_op_get_survey+0x2be/0x310 [ath12k]
 ieee80211_dump_survey+0x99/0x240 [mac80211]
 nl80211_dump_survey+0xe7/0x470 [cfg80211]
 ? kmalloc_reserve+0x59/0xf0
 genl_dumpit+0x24/0x70
 netlink_dump+0x177/0x360
 __netlink_dump_start+0x206/0x280
 genl_family_rcv_msg_dumpit.isra.22+0x8a/0xe0
 ? genl_family_rcv_msg_attrs_parse.isra.23+0xe0/0xe0
 ? genl_op_lock.part.12+0x10/0x10
 ? genl_dumpit+0x70/0x70
 genl_rcv_msg+0x1d0/0x290
 ? nl80211_del_station+0x330/0x330 [cfg80211]
 ? genl_get_cmd_both+0x50/0x50
 netlink_rcv_skb+0x4f/0x100
 genl_rcv+0x1f/0x30
 netlink_unicast+0x1b6/0x260
 netlink_sendmsg+0x31a/0x450
 __sock_sendmsg+0xa8/0xb0
 ____sys_sendmsg+0x1e4/0x260
 ___sys_sendmsg+0x89/0xe0
 ? local_clock_noinstr+0xb/0xc0
 ? rcu_is_watching+0xd/0x40
 ? kfree+0x1de/0x370
 ? __sys_sendmsg+0x7a/0xc0

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1

Fixes: a9b46dd2e483 ("wifi: ath12k: Add firmware coredump collection support")
Signed-off-by: Maharaja Kennadyrajan <maharaja.kennadyrajan@oss.qualcomm.com>
---

v2: Added the tag in the commit title.

 drivers/net/wireless/ath/ath12k/mhi.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)


base-commit: 176f3009ae598d0523b267db319fe16f69577231

Comments

Vasanthakumar Thiagarajan April 17, 2025, 4:49 a.m. UTC | #1
On 4/16/2025 7:34 AM, Maharaja Kennadyrajan wrote:
> Currently, we encounter the following kernel call trace when a firmware
> crash occurs. This happens because the host sends WMI commands to the
> firmware while it is in recovery, causing the commands to fail and
> resulting in the kernel call trace.
> 
> Set the ATH12K_FLAG_CRASH_FLUSH and ATH12K_FLAG_RECOVERY flags when the
> host driver receives the firmware crash notification from MHI. This
> prevents sending WMI commands to the firmware during recovery.
> 
> Call Trace:
>   <TASK>
>   dump_stack_lvl+0x75/0xc0
>   register_lock_class+0x6be/0x7a0
>   ? __lock_acquire+0x644/0x19a0
>   __lock_acquire+0x95/0x19a0
>   lock_acquire+0x265/0x310
>   ? ath12k_ce_send+0xa2/0x210 [ath12k]
>   ? find_held_lock+0x34/0xa0
>   ? ath12k_ce_send+0x56/0x210 [ath12k]
>   _raw_spin_lock_bh+0x33/0x70
>   ? ath12k_ce_send+0xa2/0x210 [ath12k]
>   ath12k_ce_send+0xa2/0x210 [ath12k]
>   ath12k_htc_send+0x178/0x390 [ath12k]
>   ath12k_wmi_cmd_send_nowait+0x76/0xa0 [ath12k]
>   ath12k_wmi_cmd_send+0x62/0x190 [ath12k]
>   ath12k_wmi_pdev_bss_chan_info_request+0x62/0xc0 [ath1
>   ath12k_mac_op_get_survey+0x2be/0x310 [ath12k]
>   ieee80211_dump_survey+0x99/0x240 [mac80211]
>   nl80211_dump_survey+0xe7/0x470 [cfg80211]
>   ? kmalloc_reserve+0x59/0xf0
>   genl_dumpit+0x24/0x70
>   netlink_dump+0x177/0x360
>   __netlink_dump_start+0x206/0x280
>   genl_family_rcv_msg_dumpit.isra.22+0x8a/0xe0
>   ? genl_family_rcv_msg_attrs_parse.isra.23+0xe0/0xe0
>   ? genl_op_lock.part.12+0x10/0x10
>   ? genl_dumpit+0x70/0x70
>   genl_rcv_msg+0x1d0/0x290
>   ? nl80211_del_station+0x330/0x330 [cfg80211]
>   ? genl_get_cmd_both+0x50/0x50
>   netlink_rcv_skb+0x4f/0x100
>   genl_rcv+0x1f/0x30
>   netlink_unicast+0x1b6/0x260
>   netlink_sendmsg+0x31a/0x450
>   __sock_sendmsg+0xa8/0xb0
>   ____sys_sendmsg+0x1e4/0x260
>   ___sys_sendmsg+0x89/0xe0
>   ? local_clock_noinstr+0xb/0xc0
>   ? rcu_is_watching+0xd/0x40
>   ? kfree+0x1de/0x370
>   ? __sys_sendmsg+0x7a/0xc0
> 
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
> 
> Fixes: a9b46dd2e483 ("wifi: ath12k: Add firmware coredump collection support")
> Signed-off-by: Maharaja Kennadyrajan <maharaja.kennadyrajan@oss.qualcomm.com>

Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Jeff Johnson April 17, 2025, 10:57 p.m. UTC | #2
On Wed, 16 Apr 2025 07:34:14 +0530, Maharaja Kennadyrajan wrote:
> Currently, we encounter the following kernel call trace when a firmware
> crash occurs. This happens because the host sends WMI commands to the
> firmware while it is in recovery, causing the commands to fail and
> resulting in the kernel call trace.
> 
> Set the ATH12K_FLAG_CRASH_FLUSH and ATH12K_FLAG_RECOVERY flags when the
> host driver receives the firmware crash notification from MHI. This
> prevents sending WMI commands to the firmware during recovery.
> 
> [...]

Applied, thanks!

[1/1] wifi: ath12k: Prevent sending WMI commands to firmware during firmware crash
      commit: e9e094a9734ea3bd4d4d117c915ccf129ac61ba1

Best regards,
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/ath12k/mhi.c b/drivers/net/wireless/ath/ath12k/mhi.c
index 9c929c4ad8a8..08f44baf182a 100644
--- a/drivers/net/wireless/ath/ath12k/mhi.c
+++ b/drivers/net/wireless/ath/ath12k/mhi.c
@@ -1,7 +1,7 @@ 
 // SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include <linux/msi.h>
@@ -285,8 +285,11 @@  static void ath12k_mhi_op_status_cb(struct mhi_controller *mhi_cntrl,
 			break;
 		}
 
-		if (!(test_bit(ATH12K_FLAG_UNREGISTERING, &ab->dev_flags)))
+		if (!(test_bit(ATH12K_FLAG_UNREGISTERING, &ab->dev_flags))) {
+			set_bit(ATH12K_FLAG_CRASH_FLUSH, &ab->dev_flags);
+			set_bit(ATH12K_FLAG_RECOVERY, &ab->dev_flags);
 			queue_work(ab->workqueue_aux, &ab->reset_work);
+		}
 		break;
 	default:
 		break;