2023-11-22 06:40:14

by Tamizh Chelvam Raja

[permalink] [raw]
Subject: [PATCH 0/3] wifi: ath12k: Remove unsupported and unused ring configurations

Currently in driver doing memory allocation for tx_monitor, tcl_cmd_ring
and tcl_status ring. Here driver support for tx_monitor mode is not
there and memory for tcl_cmd and tcl_status rings are allocated by
firmware and it uses that memory instead of host allocated. So avoid
these unused ring setup configuration.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Tamizh Chelvam Raja (3):
wifi: ath12k: fix calling correct function for rx monitor mode
wifi: ath12k: Remove unsupported tx monitor handling
wifi: ath12k: Remove unused tcl_*_ring configuration

drivers/net/wireless/ath/ath12k/dp.c | 16 -------
drivers/net/wireless/ath/ath12k/dp.h | 2 -
drivers/net/wireless/ath/ath12k/dp_mon.c | 40 +----------------
drivers/net/wireless/ath/ath12k/dp_rx.c | 57 ------------------------
drivers/net/wireless/ath/ath12k/dp_tx.c | 43 +-----------------
drivers/net/wireless/ath/ath12k/dp_tx.h | 1 -
6 files changed, 2 insertions(+), 157 deletions(-)


base-commit: 9a36440d929d134c56030a8492405708a143f580
--
2.17.1


2023-11-22 06:40:15

by Tamizh Chelvam Raja

[permalink] [raw]
Subject: [PATCH 3/3] wifi: ath12k: Remove unused tcl_*_ring configuration

Currently memory allocation for multiple hardware rings
done in host as these memory will be used by firmware/hardware.
But in case of tcl_cmd_ring and tcl_status_ring neither firmware
nor hardware uses host allocated memory and it uses memory allocated
by firmware itself. So avoid tcl_cmd_ring and tcl_status_ring setup
in host.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Tamizh Chelvam Raja <[email protected]>
---
drivers/net/wireless/ath/ath12k/dp.c | 16 ----------------
drivers/net/wireless/ath/ath12k/dp.h | 2 --
2 files changed, 18 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp.c b/drivers/net/wireless/ath/ath12k/dp.c
index 6893466f61f0..22e91ecd908f 100644
--- a/drivers/net/wireless/ath/ath12k/dp.c
+++ b/drivers/net/wireless/ath/ath12k/dp.c
@@ -452,8 +452,6 @@ static void ath12k_dp_srng_common_cleanup(struct ath12k_base *ab)
ath12k_dp_srng_cleanup(ab, &dp->tx_ring[i].tcl_comp_ring);
ath12k_dp_srng_cleanup(ab, &dp->tx_ring[i].tcl_data_ring);
}
- ath12k_dp_srng_cleanup(ab, &dp->tcl_status_ring);
- ath12k_dp_srng_cleanup(ab, &dp->tcl_cmd_ring);
ath12k_dp_srng_cleanup(ab, &dp->wbm_desc_rel_ring);
}

@@ -474,20 +472,6 @@ static int ath12k_dp_srng_common_setup(struct ath12k_base *ab)
goto err;
}

- ret = ath12k_dp_srng_setup(ab, &dp->tcl_cmd_ring, HAL_TCL_CMD, 0, 0,
- DP_TCL_CMD_RING_SIZE);
- if (ret) {
- ath12k_warn(ab, "failed to set up tcl_cmd ring :%d\n", ret);
- goto err;
- }
-
- ret = ath12k_dp_srng_setup(ab, &dp->tcl_status_ring, HAL_TCL_STATUS,
- 0, 0, DP_TCL_STATUS_RING_SIZE);
- if (ret) {
- ath12k_warn(ab, "failed to set up tcl_status ring :%d\n", ret);
- goto err;
- }
-
for (i = 0; i < ab->hw_params->max_tx_ring; i++) {
map = ab->hw_params->hal_ops->tcl_to_wbm_rbm_map;
tx_comp_ring_num = map[i].wbm_ring_num;
diff --git a/drivers/net/wireless/ath/ath12k/dp.h b/drivers/net/wireless/ath/ath12k/dp.h
index 61f765432516..5653a1f4964b 100644
--- a/drivers/net/wireless/ath/ath12k/dp.h
+++ b/drivers/net/wireless/ath/ath12k/dp.h
@@ -316,8 +316,6 @@ struct ath12k_dp {
struct dp_link_desc_bank link_desc_banks[DP_LINK_DESC_BANKS_MAX];
struct dp_srng wbm_idle_ring;
struct dp_srng wbm_desc_rel_ring;
- struct dp_srng tcl_cmd_ring;
- struct dp_srng tcl_status_ring;
struct dp_srng reo_reinject_ring;
struct dp_srng rx_rel_ring;
struct dp_srng reo_except_ring;
--
2.17.1

2023-11-22 06:40:21

by Tamizh Chelvam Raja

[permalink] [raw]
Subject: [PATCH 2/3] wifi: ath12k: Remove unsupported tx monitor handling

Currently tx monitor is not supported in driver. So remove
the tx monitor ring configuration, allocation and handling.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Tamizh Chelvam Raja <[email protected]>
---
drivers/net/wireless/ath/ath12k/dp_mon.c | 40 +----------------
drivers/net/wireless/ath/ath12k/dp_rx.c | 57 ------------------------
drivers/net/wireless/ath/ath12k/dp_tx.c | 41 -----------------
drivers/net/wireless/ath/ath12k/dp_tx.h | 1 -
4 files changed, 1 insertion(+), 138 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireless/ath/ath12k/dp_mon.c
index f44bc5494ce7..bb898c8f17d2 100644
--- a/drivers/net/wireless/ath/ath12k/dp_mon.c
+++ b/drivers/net/wireless/ath/ath12k/dp_mon.c
@@ -1901,43 +1901,6 @@ ath12k_dp_mon_tx_parse_status_tlv(struct ath12k_base *ab,
break;
}

- case HAL_MON_BUF_ADDR: {
- struct dp_rxdma_ring *buf_ring = &ab->dp.tx_mon_buf_ring;
- struct dp_mon_packet_info *packet_info =
- (struct dp_mon_packet_info *)tlv_data;
- int buf_id = u32_get_bits(packet_info->cookie,
- DP_RXDMA_BUF_COOKIE_BUF_ID);
- struct sk_buff *msdu;
- struct dp_mon_mpdu *mon_mpdu = tx_ppdu_info->tx_mon_mpdu;
- struct ath12k_skb_rxcb *rxcb;
-
- spin_lock_bh(&buf_ring->idr_lock);
- msdu = idr_remove(&buf_ring->bufs_idr, buf_id);
- spin_unlock_bh(&buf_ring->idr_lock);
-
- if (unlikely(!msdu)) {
- ath12k_warn(ab, "monitor destination with invalid buf_id %d\n",
- buf_id);
- return DP_MON_TX_STATUS_PPDU_NOT_DONE;
- }
-
- rxcb = ATH12K_SKB_RXCB(msdu);
- dma_unmap_single(ab->dev, rxcb->paddr,
- msdu->len + skb_tailroom(msdu),
- DMA_FROM_DEVICE);
-
- if (!mon_mpdu->head)
- mon_mpdu->head = msdu;
- else if (mon_mpdu->tail)
- mon_mpdu->tail->next = msdu;
-
- mon_mpdu->tail = msdu;
-
- ath12k_dp_mon_buf_replenish(ab, buf_ring, 1);
- status = DP_MON_TX_BUFFER_ADDR;
- break;
- }
-
case HAL_TX_MPDU_END:
list_add_tail(&tx_ppdu_info->tx_mon_mpdu->list,
&tx_ppdu_info->dp_tx_mon_mpdu_list);
@@ -2086,8 +2049,7 @@ int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id, int *budget,
mon_dst_ring = &pdev_dp->rxdma_mon_dst_ring[srng_id];
buf_ring = &dp->rxdma_mon_buf_ring;
} else {
- mon_dst_ring = &pdev_dp->tx_mon_dst_ring[srng_id];
- buf_ring = &dp->tx_mon_buf_ring;
+ return 0;
}

srng = &ab->hal.srng_list[mon_dst_ring->ring_id];
diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index 9f831e3971f9..b4b156aea391 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -418,9 +418,6 @@ static int ath12k_dp_rxdma_buf_free(struct ath12k_base *ab)
rx_ring = &dp->rxdma_mon_buf_ring;
ath12k_dp_rxdma_buf_ring_free(ab, rx_ring);

- rx_ring = &dp->tx_mon_buf_ring;
- ath12k_dp_rxdma_buf_ring_free(ab, rx_ring);
-
return 0;
}

@@ -466,15 +463,6 @@ static int ath12k_dp_rxdma_buf_setup(struct ath12k_base *ab)
"failed to setup HAL_RXDMA_MONITOR_BUF\n");
return ret;
}
-
- rx_ring = &dp->tx_mon_buf_ring;
- ret = ath12k_dp_rxdma_ring_buf_setup(ab, rx_ring,
- HAL_TX_MONITOR_BUF);
- if (ret) {
- ath12k_warn(ab,
- "failed to setup HAL_TX_MONITOR_BUF\n");
- return ret;
- }
}

return 0;
@@ -488,7 +476,6 @@ static void ath12k_dp_rx_pdev_srng_free(struct ath12k *ar)

for (i = 0; i < ab->hw_params->num_rxmda_per_pdev; i++) {
ath12k_dp_srng_cleanup(ab, &dp->rxdma_mon_dst_ring[i]);
- ath12k_dp_srng_cleanup(ab, &dp->tx_mon_dst_ring[i]);
}
}

@@ -544,17 +531,6 @@ static int ath12k_dp_rx_pdev_srng_alloc(struct ath12k *ar)
"failed to setup HAL_RXDMA_MONITOR_DST\n");
return ret;
}
-
- ret = ath12k_dp_srng_setup(ar->ab,
- &dp->tx_mon_dst_ring[i],
- HAL_TX_MONITOR_DST,
- 0, mac_id + i,
- DP_TX_MONITOR_DEST_RING_SIZE);
- if (ret) {
- ath12k_warn(ar->ab,
- "failed to setup HAL_TX_MONITOR_DST\n");
- return ret;
- }
}

return 0;
@@ -3925,7 +3901,6 @@ void ath12k_dp_rx_free(struct ath12k_base *ab)
ath12k_dp_srng_cleanup(ab, &dp->rxdma_err_dst_ring[i]);

ath12k_dp_srng_cleanup(ab, &dp->rxdma_mon_buf_ring.refill_buf_ring);
- ath12k_dp_srng_cleanup(ab, &dp->tx_mon_buf_ring.refill_buf_ring);

ath12k_dp_rxdma_buf_free(ab);
}
@@ -4062,15 +4037,6 @@ int ath12k_dp_rx_htt_setup(struct ath12k_base *ab)
ret);
return ret;
}
-
- ring_id = dp->tx_mon_buf_ring.refill_buf_ring.ring_id;
- ret = ath12k_dp_tx_htt_srng_setup(ab, ring_id,
- 0, HAL_TX_MONITOR_BUF);
- if (ret) {
- ath12k_warn(ab, "failed to configure rxdma_mon_buf_ring %d\n",
- ret);
- return ret;
- }
}

ret = ab->hw_params->hw_ops->rxdma_ring_sel_config(ab);
@@ -4093,9 +4059,6 @@ int ath12k_dp_rx_alloc(struct ath12k_base *ab)
idr_init(&dp->rxdma_mon_buf_ring.bufs_idr);
spin_lock_init(&dp->rxdma_mon_buf_ring.idr_lock);

- idr_init(&dp->tx_mon_buf_ring.bufs_idr);
- spin_lock_init(&dp->tx_mon_buf_ring.idr_lock);
-
ret = ath12k_dp_srng_setup(ab,
&dp->rx_refill_buf_ring.refill_buf_ring,
HAL_RXDMA_BUF, 0, 0,
@@ -4138,15 +4101,6 @@ int ath12k_dp_rx_alloc(struct ath12k_base *ab)
ath12k_warn(ab, "failed to setup HAL_RXDMA_MONITOR_BUF\n");
return ret;
}
-
- ret = ath12k_dp_srng_setup(ab,
- &dp->tx_mon_buf_ring.refill_buf_ring,
- HAL_TX_MONITOR_BUF, 0, 0,
- DP_TX_MONITOR_BUF_RING_SIZE);
- if (ret) {
- ath12k_warn(ab, "failed to setup DP_TX_MONITOR_BUF_RING_SIZE\n");
- return ret;
- }
}

ret = ath12k_dp_rxdma_buf_setup(ab);
@@ -4186,17 +4140,6 @@ int ath12k_dp_rx_pdev_alloc(struct ath12k_base *ab, int mac_id)
i, ret);
return ret;
}
-
- ring_id = dp->tx_mon_dst_ring[i].ring_id;
- ret = ath12k_dp_tx_htt_srng_setup(ab, ring_id,
- mac_id + i,
- HAL_TX_MONITOR_DST);
- if (ret) {
- ath12k_warn(ab,
- "failed to configure tx_mon_dst_ring %d %d\n",
- i, ret);
- return ret;
- }
}
out:
return 0;
diff --git a/drivers/net/wireless/ath/ath12k/dp_tx.c b/drivers/net/wireless/ath/ath12k/dp_tx.c
index 8b5ca90d4f17..71b8fce29d2c 100644
--- a/drivers/net/wireless/ath/ath12k/dp_tx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_tx.c
@@ -669,14 +669,6 @@ ath12k_dp_tx_get_ring_id_type(struct ath12k_base *ab,
*htt_ring_id = HTT_RXDMA_MONITOR_DESC_RING;
*htt_ring_type = HTT_SW_TO_HW_RING;
break;
- case HAL_TX_MONITOR_BUF:
- *htt_ring_id = HTT_TX_MON_HOST2MON_BUF_RING;
- *htt_ring_type = HTT_SW_TO_HW_RING;
- break;
- case HAL_TX_MONITOR_DST:
- *htt_ring_id = HTT_TX_MON_MON2HOST_DEST_RING;
- *htt_ring_type = HTT_HW_TO_SW_RING;
- break;
default:
ath12k_warn(ab, "Unsupported ring type in DP :%d\n", ring_type);
ret = -EINVAL;
@@ -1024,12 +1016,6 @@ int ath12k_dp_tx_htt_monitor_mode_ring_config(struct ath12k *ar, bool reset)
struct ath12k_base *ab = ar->ab;
int ret;

- ret = ath12k_dp_tx_htt_tx_monitor_mode_ring_config(ar, reset);
- if (ret) {
- ath12k_err(ab, "failed to setup tx monitor filter %d\n", ret);
- return ret;
- }
-
ret = ath12k_dp_tx_htt_rx_monitor_mode_ring_config(ar, reset);
if (ret) {
ath12k_err(ab, "failed to setup rx monitor filter %d\n", ret);
@@ -1190,30 +1176,3 @@ int ath12k_dp_tx_htt_tx_filter_setup(struct ath12k_base *ab, u32 ring_id,
return ret;
}

-int ath12k_dp_tx_htt_tx_monitor_mode_ring_config(struct ath12k *ar, bool reset)
-{
- struct ath12k_base *ab = ar->ab;
- struct ath12k_dp *dp = &ab->dp;
- struct htt_tx_ring_tlv_filter tlv_filter = {0};
- int ret, ring_id;
-
- ring_id = dp->tx_mon_buf_ring.refill_buf_ring.ring_id;
-
- /* TODO: Need to set upstream/downstream tlv filters
- * here
- */
-
- if (ab->hw_params->rxdma1_enable) {
- ret = ath12k_dp_tx_htt_tx_filter_setup(ar->ab, ring_id, 0,
- HAL_TX_MONITOR_BUF,
- DP_RXDMA_REFILL_RING_SIZE,
- &tlv_filter);
- if (ret) {
- ath12k_err(ab,
- "failed to setup filter for monitor buf %d\n", ret);
- return ret;
- }
- }
-
- return 0;
-}
diff --git a/drivers/net/wireless/ath/ath12k/dp_tx.h b/drivers/net/wireless/ath/ath12k/dp_tx.h
index 436d77e5e9ee..5f2fa3b69577 100644
--- a/drivers/net/wireless/ath/ath12k/dp_tx.h
+++ b/drivers/net/wireless/ath/ath12k/dp_tx.h
@@ -36,6 +36,5 @@ int ath12k_dp_tx_htt_tx_filter_setup(struct ath12k_base *ab, u32 ring_id,
int mac_id, enum hal_ring_type ring_type,
int tx_buf_size,
struct htt_tx_ring_tlv_filter *htt_tlv_filter);
-int ath12k_dp_tx_htt_tx_monitor_mode_ring_config(struct ath12k *ar, bool reset);
int ath12k_dp_tx_htt_monitor_mode_ring_config(struct ath12k *ar, bool reset);
#endif
--
2.17.1

2023-11-22 16:33:26

by Jeff Johnson

[permalink] [raw]
Subject: Re: [PATCH 3/3] wifi: ath12k: Remove unused tcl_*_ring configuration

On 11/21/2023 10:39 PM, Tamizh Chelvam Raja wrote:
> Currently memory allocation for multiple hardware rings
> done in host as these memory will be used by firmware/hardware.
> But in case of tcl_cmd_ring and tcl_status_ring neither firmware
> nor hardware uses host allocated memory and it uses memory allocated
> by firmware itself. So avoid tcl_cmd_ring and tcl_status_ring setup
> in host.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: Tamizh Chelvam Raja <[email protected]>
Acked-by: Jeff Johnson <[email protected]>

2023-11-22 16:33:55

by Jeff Johnson

[permalink] [raw]
Subject: Re: [PATCH 2/3] wifi: ath12k: Remove unsupported tx monitor handling

On 11/21/2023 10:39 PM, Tamizh Chelvam Raja wrote:
> Currently tx monitor is not supported in driver. So remove
> the tx monitor ring configuration, allocation and handling.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: Tamizh Chelvam Raja <[email protected]>
Acked-by: Jeff Johnson <[email protected]>

2024-01-17 13:46:04

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 0/3] wifi: ath12k: Remove unsupported and unused ring configurations

Tamizh Chelvam Raja <[email protected]> writes:

> Currently in driver doing memory allocation for tx_monitor, tcl_cmd_ring
> and tcl_status ring. Here driver support for tx_monitor mode is not
> there and memory for tcl_cmd and tcl_status rings are allocated by
> firmware and it uses that memory instead of host allocated. So avoid
> these unused ring setup configuration.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>
> Tamizh Chelvam Raja (3):
> wifi: ath12k: fix calling correct function for rx monitor mode
> wifi: ath12k: Remove unsupported tx monitor handling
> wifi: ath12k: Remove unused tcl_*_ring configuration

I had several conflict, please double check:

https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=cfb7ae2dc5d32206d6978625bac055e1f431f450
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=d9e193e606e87fc4da445c1aed12113d2ae72151
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=23c88b95ce6a67eb422ab858e22c90312028b69d

--
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

2024-01-17 14:02:34

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 0/3] wifi: ath12k: Remove unsupported and unused ring configurations

Kalle Valo <[email protected]> writes:

> Tamizh Chelvam Raja <[email protected]> writes:
>
>> Currently in driver doing memory allocation for tx_monitor, tcl_cmd_ring
>> and tcl_status ring. Here driver support for tx_monitor mode is not
>> there and memory for tcl_cmd and tcl_status rings are allocated by
>> firmware and it uses that memory instead of host allocated. So avoid
>> these unused ring setup configuration.
>>
>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>>
>> Tamizh Chelvam Raja (3):
>> wifi: ath12k: fix calling correct function for rx monitor mode
>> wifi: ath12k: Remove unsupported tx monitor handling
>> wifi: ath12k: Remove unused tcl_*_ring configuration
>
> I had several conflict, please double check:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=cfb7ae2dc5d32206d6978625bac055e1f431f450
> https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=d9e193e606e87fc4da445c1aed12113d2ae72151
> https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=23c88b95ce6a67eb422ab858e22c90312028b69d

Actually I see a new warning with WCN7850. I don't know if I caused it
while fixing the conflicts, or it was there originally, but anyway
please fix this and submit v2.

[ 5806.723781] INFO: trying to register non-static key.
[ 5806.723837] The code is fine but needs lockdep annotation, or maybe
[ 5806.723869] you didn't initialize this object before use?
[ 5806.723900] turning off the locking correctness validator.
[ 5806.723933] CPU: 6 PID: 4327 Comm: rmmod Not tainted 6.7.0-wt-ath+ #1232
[ 5806.723968] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0067.2021.0528.1339 05/28/2021
[ 5806.724000] Call Trace:
[ 5806.724030] <TASK>
[ 5806.724061] dump_stack_lvl+0x5c/0xc0
[ 5806.724100] dump_stack+0x10/0x20
[ 5806.724135] register_lock_class+0x123c/0x19c0
[ 5806.724171] ? is_dynamic_key+0x230/0x230
[ 5806.724203] ? lock_contended+0x290/0x290
[ 5806.724235] __lock_acquire+0x95/0x1bb0
[ 5806.724267] ? kasan_quarantine_put+0x106/0x240
[ 5806.724299] lock_acquire+0x1bc/0x530
[ 5806.724330] ? ath12k_dp_rxdma_mon_buf_ring_free.isra.0+0x8e/0x2d0 [ath12k]
[ 5806.724382] ? lock_sync+0x1a0/0x1a0
[ 5806.724412] ? reacquire_held_locks+0x4d0/0x4d0
[ 5806.724443] ? __local_bh_enable_ip+0xa5/0x120
[ 5806.724473] ? __this_cpu_preempt_check+0x13/0x20
[ 5806.724504] ? lockdep_hardirqs_on+0x7e/0x100
[ 5806.724534] _raw_spin_lock_bh+0x36/0x70
[ 5806.724565] ? ath12k_dp_rxdma_mon_buf_ring_free.isra.0+0x8e/0x2d0 [ath12k]
[ 5806.724614] ath12k_dp_rxdma_mon_buf_ring_free.isra.0+0x8e/0x2d0 [ath12k]
[ 5806.724664] ? ath12k_dp_rx_link_desc_return.isra.0+0xf0/0xf0 [ath12k]
[ 5806.724713] ? dma_free_attrs+0xef/0x130
[ 5806.724746] ath12k_dp_rx_free+0x234/0x2e0 [ath12k]
[ 5806.724796] ath12k_dp_free+0x32b/0x430 [ath12k]
[ 5806.724847] ath12k_core_deinit+0xe0/0x130 [ath12k]
[ 5806.724893] ath12k_pci_remove+0xad/0x1b0 [ath12k]
[ 5806.724943] pci_device_remove+0x93/0x1b0
[ 5806.724975] device_remove+0xbf/0x150
[ 5806.725007] device_release_driver_internal+0x3c3/0x580
[ 5806.725037] ? __kasan_check_read+0x11/0x20
[ 5806.725069] driver_detach+0xc4/0x190
[ 5806.725101] bus_remove_driver+0x130/0x2a0
[ 5806.725133] driver_unregister+0x68/0x90
[ 5806.725166] pci_unregister_driver+0x24/0x240
[ 5806.725198] ? find_module_all+0x13e/0x1c0
[ 5806.725229] ath12k_pci_exit+0x10/0x20 [ath12k]
[ 5806.725277] __do_sys_delete_module+0x32d/0x540
[ 5806.725306] ? module_flags+0x300/0x300
[ 5806.725336] ? kmem_cache_free+0x306/0x330
[ 5806.725367] ? __fput+0x404/0xa50
[ 5806.725398] ? syscall_enter_from_user_mode+0x20/0x50
[ 5806.725428] ? __this_cpu_preempt_check+0x13/0x20
[ 5806.725458] __x64_sys_delete_module+0x4f/0x70
[ 5806.725487] do_syscall_64+0x3c/0xe0
[ 5806.725518] entry_SYSCALL_64_after_hwframe+0x46/0x4e
[ 5806.725548] RIP: 0033:0x7f0d24d7bc8b
[ 5806.725581] Code: 73 01 c3 48 8b 0d 05 c2 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d d5 c1 0c 00 f7 d8 64 89 01 48
[ 5806.725613] RSP: 002b:00007ffdf5aa4de8 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
[ 5806.725647] RAX: ffffffffffffffda RBX: 000055e1720b77e0 RCX: 00007f0d24d7bc8b
[ 5806.725678] RDX: 000000000000000a RSI: 0000000000000800 RDI: 000055e1720b7848
[ 5806.725710] RBP: 00007ffdf5aa4e48 R08: 0000000000000000 R09: 0000000000000000
[ 5806.725740] R10: 00007f0d24df7ac0 R11: 0000000000000206 R12: 00007ffdf5aa5020
[ 5806.725774] R13: 00007ffdf5aa6ebf R14: 000055e1720b62a0 R15: 000055e1720b77e0
[ 5806.725808] </TASK>

--
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches