[PATCH 1/2] wifi: ath12k: fix WARN_ON during ath12k_mac_update_vif_chan
Jeff Johnson
quic_jjohnson at quicinc.com
Wed Aug 2 07:59:48 PDT 2023
On 8/2/2023 1:58 AM, Manish Dharanenthiran wrote:
> Fix WARN_ON() from ath12k_mac_update_vif_chan() if vdev is not up.
> Since change_chanctx can be called even before vdev_up.
>
> Do vdev stop followed by a vdev start in case of vdev is down.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0-02903-QCAHKSWPL_SILICONZ-1
Has this been tested on WCN7850? My understanding is that firmware may
expect vdev down and then vdev restart
>
> Signed-off-by: Manish Dharanenthiran <quic_mdharane at quicinc.com>
> ---
> drivers/net/wireless/ath/ath12k/mac.c | 27 +++++++++++++++++++++------
> 1 file changed, 21 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
> index 1bb9802ef569..0ab95e138d1d 100644
> --- a/drivers/net/wireless/ath/ath12k/mac.c
> +++ b/drivers/net/wireless/ath/ath12k/mac.c
> @@ -5698,13 +5698,28 @@ ath12k_mac_update_vif_chan(struct ath12k *ar,
> if (WARN_ON(!arvif->is_started))
> continue;
>
> - if (WARN_ON(!arvif->is_up))
> - continue;
> + /* Firmware expect vdev_restart only if vdev is up.
> + * If vdev is down then it expect vdev_stop->vdev_start.
> + */
> + if (arvif->is_up) {
> + ret = ath12k_mac_vdev_restart(arvif, &vifs[i].new_ctx->def);
> + if (ret) {
> + ath12k_warn(ab, "failed to restart vdev %d: %d\n",
> + arvif->vdev_id, ret);
> + continue;
> + }
> + } else {
> + ret = ath12k_mac_vdev_stop(arvif);
> + if (ret) {
> + ath12k_warn(ab, "failed to stop vdev %d: %d\n",
> + arvif->vdev_id, ret);
> + continue;
> + }
>
> - ret = ath12k_mac_vdev_restart(arvif, &vifs[i].new_ctx->def);
> - if (ret) {
> - ath12k_warn(ab, "failed to restart vdev %d: %d\n",
> - arvif->vdev_id, ret);
> + ret = ath12k_mac_vdev_start(arvif, &vifs[i].new_ctx->def);
> + if (ret)
> + ath12k_warn(ab, "failed to start vdev %d: %d\n",
> + arvif->vdev_id, ret);
> continue;
> }
>
More information about the ath12k
mailing list