]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: unassign arvif on scan vdev create failure
authorRameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Sun, 26 Oct 2025 18:22:54 +0000 (23:52 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Thu, 30 Oct 2025 21:55:08 +0000 (14:55 -0700)
During scan and remain-on-channel requests, a scan link vif (arvif) is
assigned and a temporary vdev is created. If vdev creation fails, the
assigned arvif is left attached until the virtual interface is removed,
leaving a stale link in ahvif.

Fix this by freeing the stale arvif and resetting the corresponding link in
ahvif by calling ath12k_mac_unassign_link_vif() when vdev creation fails.

While at it, propagate the actual error code from ath12k_mac_vdev_create()
instead of returning -EINVAL in ath12k_mac_initiate_hw_scan().

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1

Fixes: 477cabfdb776 ("wifi: ath12k: modify link arvif creation and removal for MLO")
Signed-off-by: Rameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20251026182254.1399650-3-rameshkumar.sundaram@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/mac.c

index 8f0d914d7fc3a80af495a55fb6d25e4bcfe3413d..7639fb2c52fe26623602722b859769e2a2be5ad5 100644 (file)
@@ -5313,7 +5313,8 @@ static int ath12k_mac_initiate_hw_scan(struct ieee80211_hw *hw,
                ret = ath12k_mac_vdev_create(ar, arvif);
                if (ret) {
                        ath12k_warn(ar->ab, "unable to create scan vdev %d\n", ret);
-                       return -EINVAL;
+                       ath12k_mac_unassign_link_vif(arvif);
+                       return ret;
                }
        }
 
@@ -13411,6 +13412,7 @@ static int ath12k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
                if (ret) {
                        ath12k_warn(ar->ab, "unable to create scan vdev for roc: %d\n",
                                    ret);
+                       ath12k_mac_unassign_link_vif(arvif);
                        return ret;
                }
        }