2021-10-27 21:20:19

by Wen Gong

[permalink] [raw]
Subject: [PATCH] ath11k: skip sending vdev down for channel switch

The ath11k driver currently sends vdev down to the firmware before
updating the channel context, which is followed by a vdev restart
command.

Sending vdev down is not required before sending a vdev restart,
because the firmware internally does vdev down when ath11k sends
a vdev restart command.

Firmware will happen crash while channel switch without this change.

Hence skip the vdev down command sending when updating the channel
context and then fix the firmware crash issue.

Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1

Signed-off-by: Wen Gong <[email protected]>
---
drivers/net/wireless/ath/ath11k/mac.c | 27 +--------------------------
1 file changed, 1 insertion(+), 26 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index 9e7cffc4dffa..f0f71e9c6e94 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -5440,32 +5440,7 @@ ath11k_mac_update_vif_chan(struct ath11k *ar,

lockdep_assert_held(&ar->conf_mutex);

- for (i = 0; i < n_vifs; i++) {
- arvif = (void *)vifs[i].vif->drv_priv;
-
- ath11k_dbg(ab, ATH11K_DBG_MAC,
- "mac chanctx switch vdev_id %i freq %u->%u width %d->%d\n",
- arvif->vdev_id,
- vifs[i].old_ctx->def.chan->center_freq,
- vifs[i].new_ctx->def.chan->center_freq,
- vifs[i].old_ctx->def.width,
- vifs[i].new_ctx->def.width);
-
- if (WARN_ON(!arvif->is_started))
- continue;
-
- if (WARN_ON(!arvif->is_up))
- continue;
-
- ret = ath11k_wmi_vdev_down(ar, arvif->vdev_id);
- if (ret) {
- ath11k_warn(ab, "failed to down vdev %d: %d\n",
- arvif->vdev_id, ret);
- continue;
- }
- }
-
- /* All relevant vdevs are downed and associated channel resources
+ /* Associated channel resources of all relevant vdevs
* should be available for the channel switch now.
*/

--
2.31.1


2021-11-17 08:55:29

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath11k: skip sending vdev down for channel switch

Wen Gong <[email protected]> wrote:

> The ath11k driver currently sends vdev down to the firmware before
> updating the channel context, which is followed by a vdev restart
> command.
>
> Sending vdev down is not required before sending a vdev restart,
> because the firmware internally does vdev down when ath11k sends
> a vdev restart command.
>
> Firmware will happen crash while channel switch without this change.
>
> Hence skip the vdev down command sending when updating the channel
> context and then fix the firmware crash issue.
>
> Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
>
> Signed-off-by: Wen Gong <[email protected]>

Fails to apply:

error: patch failed: drivers/net/wireless/ath/ath11k/mac.c:5440
error: drivers/net/wireless/ath/ath11k/mac.c: patch does not apply
stg import: Diff does not apply cleanly

Patch set to Changes Requested.

--
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/

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