[PATCH 1/2] wifi: ath12k: fix WARN_ON during ath12k_mac_update_vif_chan
Manish Dharanenthiran
quic_mdharane at quicinc.com
Thu Aug 3 04:19:00 PDT 2023
On 8/2/2023 8:29 PM, Jeff Johnson wrote:
> 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
Hi Jeff,
No, not tested with WCN7850 chip-set. But, we will be sending vdev_down
before starting the restart sequence. Let me get help from MCC team to
test this patch and update the changes, if needed.
>
>>
>> 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