[PATCH] wifi: ath11k: pci: Fix msi_irq crash on driver unload with QCN9074 PCIe WiFi 6 modules

Vasanthakumar Thiagarajan quic_vthiagar at quicinc.com
Fri Apr 25 21:33:05 PDT 2025



On 4/25/2025 3:20 PM, Vasanthakumar Thiagarajan wrote:
> 
> 
> On 4/25/2025 12:35 PM, Baochen Qiang wrote:
>>
>>
>> On 4/24/2025 10:07 PM, Balsam Chihi wrote:
>>> I just rebuilt a clean disto and enabled the debug_mask=0x1020.
>>> There are the logs bellow :
>>>
>>> root at OpenWrt-WAP:~# uname --all
>>> Linux OpenWrt-WAP 6.6.86 #0 SMP Sun Apr 13 16:38:32 2025 aarch64 GNU/Linux
>>>
>>> root at OpenWrt-WAP:~# cat /etc/modules.conf
>>> # examples:
>>> # options mod1 option=val
>>> # blacklist mod2
>>> options ath11k debug_mask=0x1020
>>>
>>> root at OpenWrt-WAP:~# cat /sys/module/ath11k/parameters/debug_mask
>>> 4128
>>>
>>> root at OpenWrt-WAP:~# dmesg | grep ath
>>> [   15.093627] ath11k_pci 0001:01:00.0: Adding to iommu group 2
>>> [   15.099326] ath11k_pci 0001:01:00.0: assign IRQ: got 0
>>> [   15.099512] ath11k_pci 0001:01:00.0: BAR 0: assigned [mem
>>> 0x2840000000-0x28401fffff 64bit]
>>> [   15.107879] ath11k_pci 0001:01:00.0: boot pci_mem 0x00000000880f25e0
>>> [   15.107886] ath11k_pci 0001:01:00.0: boot pci probe 17cb:1104 17cb:1104
>>> [   15.108483] ath11k_pci 0001:01:00.0: MSI vectors: 16
>>> [   15.113538] ath11k_pci 0001:01:00.0: pci msi base data is 0
>>> [   15.113545] ath11k_pci 0001:01:00.0: qcn9074 hw1.0
>>> [   15.118336] ath11k_pci 0001:01:00.0: FW memory mode: 2
>>> [   15.125643] ath11k_pci 0001:01:00.0: boot failed to load firmware-2.bin: -2
>>> [   15.125658] ath11k_pci 0001:01:00.0: boot using fw api 1
>>> [   15.125668] ath11k_pci 0001:01:00.0: pci msi assignment MHI
>>> num_vectors 3 user_base_data 0 base_vector 0
>>> [   15.125675] ath11k_pci 0001:01:00.0: pci num_vectors 3 base_vector 0
>>> [   15.129780] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   15.129933] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   15.129964] ath11k_pci 0001:01:00.0: pci irq 369 group 0
>>> [   15.130013] ath11k_pci 0001:01:00.0: pci irq 370 group 1
>>> [   15.130059] ath11k_pci 0001:01:00.0: pci irq 371 group 2
>>> [   15.130110] ath11k_pci 0001:01:00.0: pci irq 372 group 3
>>> [   15.130157] ath11k_pci 0001:01:00.0: pci irq 373 group 4
>>> [   15.130204] ath11k_pci 0001:01:00.0: pci irq 374 group 5
>>> [   15.130250] ath11k_pci 0001:01:00.0: pci irq 375 group 6
>>> [   15.130295] ath11k_pci 0001:01:00.0: pci irq 376 group 7
>>> [   15.130359] ath11k_pci 0001:01:00.0: pci after request_irq msi_ep_base_data 0
>>> [   15.230443] ath11k_pci 0001:01:00.0: pci ltssm 0x111
>>> [   15.230456] ath11k_pci 0001:01:00.0: pci pcie_hot_rst 0x11
>>> [   15.235499] ath11k_pci 0001:01:00.0: pci pcie_q6_cookie_addr 0x0
>>> [   15.235514] ath11k_pci 0001:01:00.0: pci wlaon_warm_sw_entry 0x0
>>> [   15.255530] ath11k_pci 0001:01:00.0: pci wlaon_warm_sw_entry 0x0
>>> [   15.255545] ath11k_pci 0001:01:00.0: pci soc reset cause 0
>>> [   15.275554] ath11k_pci 0001:01:00.0: pci mhistatus 0xff04
>>> [   15.285571] ath11k_pci 0001:01:00.0: pci link_ctl 0x0000 L0s 0 L1 0
>>> [   15.446403] ath11k_pci 0001:01:00.0: boot notify status reason
>>> MHI_CB_EE_SBL_MODE
>>> [   15.494739] ath11k_pci 0001:01:00.0: boot notify status reason
>>> MHI_CB_EE_MISSION_MODE
>>> [   15.515587] ath11k_pci 0001:01:00.0: chip_id 0x0 chip_family 0x0
>>> board_id 0xff soc_id 0xffffffff
>>> [   15.524423] ath11k_pci 0001:01:00.0: fw_version 0x290b8862
>>> fw_build_timestamp 2024-09-23 10:51 fw_build_id
>>> [   15.534202] ath11k_pci 0001:01:00.0: boot using board name
>>> 'bus=pci,qmi-chip-id=0,qmi-board-id=255'
>>> [   15.551970] ath11k_pci 0001:01:00.0: boot firmware request
>>> ath11k/QCN9074/hw1.0/board-2.bin size 786836
>>> [   15.551992] ath11k_pci 0001:01:00.0: boot board name
>>> [   15.552001] ath11k_pci 0001:01:00.0: 00000000: 62 75 73 3d 70 63 69
>>> 2c 71 6d 69 2d 63 68 69 70  bus=pci,qmi-chip
>>> [   15.552007] ath11k_pci 0001:01:00.0: 00000010: 2d 69 64 3d 30 2c 71
>>> 6d 69 2d 62 6f 61 72 64 2d  -id=0,qmi-board-
>>> [   15.552013] ath11k_pci 0001:01:00.0: 00000020: 69 64 3d 31 36 30
>>>                              id=160
>>> [   15.552018] ath11k_pci 0001:01:00.0: boot board name
>>> [   15.552024] ath11k_pci 0001:01:00.0: 00000000: 62 75 73 3d 70 63 69
>>> 2c 71 6d 69 2d 63 68 69 70  bus=pci,qmi-chip
>>> [   15.552030] ath11k_pci 0001:01:00.0: 00000010: 2d 69 64 3d 30 2c 71
>>> 6d 69 2d 62 6f 61 72 64 2d  -id=0,qmi-board-
>>> [   15.552036] ath11k_pci 0001:01:00.0: 00000020: 69 64 3d 31 36 31
>>>                              id=161
>>> [   15.552041] ath11k_pci 0001:01:00.0: boot board name
>>> [   15.552047] ath11k_pci 0001:01:00.0: 00000000: 62 75 73 3d 70 63 69
>>> 2c 71 6d 69 2d 63 68 69 70  bus=pci,qmi-chip
>>> [   15.552053] ath11k_pci 0001:01:00.0: 00000010: 2d 69 64 3d 30 2c 71
>>> 6d 69 2d 62 6f 61 72 64 2d  -id=0,qmi-board-
>>> [   15.552059] ath11k_pci 0001:01:00.0: 00000020: 69 64 3d 31 36 32
>>>                              id=162
>>> [   15.552064] ath11k_pci 0001:01:00.0: boot board name
>>> [   15.552070] ath11k_pci 0001:01:00.0: 00000000: 62 75 73 3d 70 63 69
>>> 2c 71 6d 69 2d 63 68 69 70  bus=pci,qmi-chip
>>> [   15.552076] ath11k_pci 0001:01:00.0: 00000010: 2d 69 64 3d 30 2c 71
>>> 6d 69 2d 62 6f 61 72 64 2d  -id=0,qmi-board-
>>> [   15.552082] ath11k_pci 0001:01:00.0: 00000020: 69 64 3d 32 35 35
>>>                              id=255
>>> [   15.552087] ath11k_pci 0001:01:00.0: boot found match board data
>>> for name 'bus=pci,qmi-chip-id=0,qmi-board-id=255'
>>> [   15.552093] ath11k_pci 0001:01:00.0: boot found board data for
>>> 'bus=pci,qmi-chip-id=0,qmi-board-id=255'
>>> [   15.552100] ath11k_pci 0001:01:00.0: boot using board api 2
>>> [   16.910820] ath11k_pci 0001:01:00.0: boot firmware request
>>> ath11k/QCN9074/hw1.0/m3.bin size 340108
>>> [   16.934188] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   16.934216] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   16.934228] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   16.934238] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   16.934249] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   16.934258] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   16.934273] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   16.934284] ath11k_pci 0001:01:00.0: pci msi assignment CE
>>> num_vectors 5 user_base_data 3 base_vector 3
>>> [   16.935322] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.935333] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 11,ring_num 0
>>> [   16.937172] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.937185] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 12,ring_num 0
>>> [   16.937196] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.937203] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 6,ring_num 0
>>> [   16.937212] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.937219] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 7,ring_num 0
>>> [   16.937489] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.937497] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 5,ring_num 0
>>> [   16.937934] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.938396] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.938405] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 5,ring_num 1
>>> [   16.938823] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.939059] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.939068] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 5,ring_num 2
>>> [   16.939468] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.939635] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.939642] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 2,ring_num 0
>>> [   16.939765] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.939872] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.939959] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.939967] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 3,ring_num 0
>>> [   16.940135] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.940417] ath11k_pci 0001:01:00.0: boot htc service 'Control' ul
>>> pipe 0 dl pipe 1 eid 0 ready
>>> [   16.940425] ath11k_pci 0001:01:00.0: boot htc service 'Control' eid
>>> 0 tx flow control disabled
>>> [   16.941453] ath11k_pci 0001:01:00.0: boot htc service HTT Data does
>>> not allocate target credits
>>> [   16.941570] ath11k_pci 0001:01:00.0: boot htc service 'HTT Data' ul
>>> pipe 4 dl pipe 1 eid 1 ready
>>> [   16.941578] ath11k_pci 0001:01:00.0: boot htc service 'HTT Data'
>>> eid 1 tx flow control disabled
>>> [   16.941633] ath11k_pci 0001:01:00.0: boot htc service 'WMI' ul pipe
>>> 3 dl pipe 2 eid 2 ready
>>> [   16.941641] ath11k_pci 0001:01:00.0: boot htc service 'WMI' eid 2
>>> tx flow control disabled
>>> [   16.943010] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.943267] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.943476] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   16.943604] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   17.246410] ath11k_pci 0001:01:00.0: htt event 48 not handled
>>> [   17.252661] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   17.253260] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   17.253871] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   17.254512] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   17.254528] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 16,ring_num 0
>>> [   17.255170] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   17.255743] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   17.255759] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 19,ring_num 0
>>> [   17.284419] ath11k_pci 0001:01:00.0: pci msi assignment DP
>>> num_vectors 8 user_base_data 8 base_vector 8
>>> [   17.284438] ath11k_pci 0001:01:00.0: pci ring not part of an
>>> ext_group; ring_type: 20,ring_num 0
>>> [   22.039565] ath11k_pci 0001:01:00.0 phy0-ap0: entered allmulticast mode
>>> [   22.050081] ath11k_pci 0001:01:00.0 phy0-ap0: entered promiscuous mode
>>> [   30.709682] ath11k_pci 0001:01:00.0 phy0-ap0: left allmulticast mode
>>> [   30.716078] ath11k_pci 0001:01:00.0 phy0-ap0: left promiscuous mode
>>> [   36.330610] ath11k_pci 0001:01:00.0 phy0-ap0: entered allmulticast mode
>>> [   36.337503] ath11k_pci 0001:01:00.0 phy0-ap0: entered promiscuous mode
>>>
>>> root at OpenWrt-WAP:~# iw dev
>>> phy#0
>>> Interface phy0-ap0
>>> ifindex 14
>>> wdev 0x2
>>> addr 04:f0:21:bd:d7:99
>>> type AP
>>> channel 100 (5500 MHz), width: 160 MHz, center1: 5570 MHz
>>> multicast TXQ:
>>> qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
>>> 0 0 0 0 0 0 0 0 0
>>>
>>> root at OpenWrt-WAP:~# iwinfo
>>> phy0-ap0  ESSID: "OpenWrt-WAP-5GHz"
>>>            Access Point: 04:F0:21:BD:D7:99
>>>            Mode: Master  Channel: 100 (5.500 GHz)  HT Mode: HE160
>>>            Center Channel 1: 114 2: unknown
>>>            Tx-Power: 0 dBm  Link Quality: unknown/70
>>>            Signal: unknown  Noise: -101 dBm
>>>            Bit Rate: unknown
>>>            Encryption: none
>>>            Type: nl80211  HW Mode(s): 802.11ac/ax/n
>>>            Hardware: 17CB:1104 17CB:1104 [Qualcomm Atheros QCN6024/9024/9074]
>>>            TX power offset: none
>>>            Frequency offset: none
>>>            Supports VAPs: yes  PHY name: phy0
>>>
>>> root at OpenWrt-WAP:~# reboot
>>> [  343.663492] Internal error: synchronous external abort:
>>> 0000000096000210 [#1] SMP
>>> [  343.670992] Modules linked in: nft_fib_inet nft_connlimit
>>> nf_flow_table_inet nf_conncount ath11k_pci(O) ath11k(O) rndis_host
>>> nft_socket nft_reject_ipv6 nft_reject_ipv4 nft_reject_inet nft_reject
>>> nft_redir nft_quota nft_queue nft_numgen nft_nat nft_masq nft_log
>>> nft_limit nft_hash nft_fwd_netdev nft_flow_offload nft_fib_ipv6
>>> nft_fib_ipv4 nft_fib nft_dup_netdev nft_dup_ipv6 nft_dup_ipv4 nft_ct
>>> nft_chain_nat nfnetlink_cttimeout nfnetlink_cthelper nf_tables nf_nat
>>> nf_flow_table nf_conntrack_netlink nf_conntrack mmc_spi mac80211(O)
>>> ftdi_sio ch348 ch341 cfg80211(O) cdc_subset cdc_ether cdc_eem
>>> usbserial usbnet usbmon usbhid ums_usbat ums_sddr55 ums_sddr09
>>> ums_karma ums_jumpshot ums_isd200 ums_freecom ums_datafab ums_cypress
>>> ums_alauda tps23861 tmp103 tmp102 spidev spi_gpio spi_bitbang sfp
>>> rtc_pcf8563 rtc_pcf2123 rtc_ds1672 rtc_ds1374 qrtr_mhi qrtr
>>> qmi_helpers(O) of_mmc_spi nfnetlink_queue nfnetlink nf_socket_ipv6
>>> nf_socket_ipv4 nf_reject_ipv6 nf_reject_ipv4 nf_log_syslog
>>> nf_dup_netdev nf_dup_ipv6 nf_dup_ipv4 nf_defrag_ipv6
>>> [  343.671198]  nf_defrag_ipv4 mhi_pci_generic mhi_net mhi mdio_i2c
>>> mdio_gpio max6697 ltc4151 lm95241 lm92 lm90 lm85 lm77 lm70 lm63 jc42
>>> ina2xx ina209 hid_generic compat(O) cdc_acm at25 adt7475 ntfs3 configs
>>> sg hid tmp421 tc654 adt7410 adt7x10 adcxx ad7418 i2c_gpio
>>> i2c_designware_pci i2c_ccgx_ucsi i2c_algo_bit gpio_pcf857x i2c_mux_reg
>>> i2c_mux_pca954x i2c_mux_pca9541 i2c_mux_gpio cryptodev(O) hwmon_vid
>>> msdos bonding nls_utf8 zram zsmalloc eeprom_93cx6 crypto_user
>>> algif_skcipher algif_rng algif_hash algif_aead af_alg sha512_generic
>>> sha512_arm64 seqiv sha3_generic jitterentropy_rng drbg michael_mic md5
>>> hmac geniv cmac uas usb_storage xhci_plat_hcd xhci_pci xhci_hcd dwc3
>>> dwc2_pci dwc2 roles ohci_pci uhci_hcd ohci_platform ohci_hcd ehci_pci
>>> fsl_mph_dr_of ehci_platform ehci_fsl ahci_platform ahci_qoriq
>>> libahci_platform libahci ehci_hcd nvme nvme_core exfat gpio_cascade
>>> mux_gpio phy_generic usbcore usb_common microchip mii
>>> [  343.842432] CPU: 7 PID: 9435 Comm: procd Tainted: G           O
>>>    6.6.86 #0
>>> [  343.849746] Hardware name: LS1088A
>>> [  343.856969] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
>>> [  343.863933] pc : ath11k_pci_get_msi_irq+0x18a0/0x1900 [ath11k_pci]
>>
>> is this instruction causing the synchronous external abort? which src line is it 
>> pointing to?
>>
> 
> Below data points may be useful along with the above one.
> 
> i) Was this working before for you and broken recently or it has been
>     like this since you tried first?
> 
> ii) Running into same issue during rmmod of ath12k driver instead of
>      reboot?
> 
> iii) Is it possible to attach the console log during reboot also?

I mean kernel log during reboot with previously suggested ath12k debug_mask.



More information about the ath11k mailing list