[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