]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: defer vdev creation for MLO
authorRameshkumar Sundaram <quic_ramess@quicinc.com>
Tue, 26 Nov 2024 17:11:37 +0000 (19:11 +0200)
committerKalle Valo <quic_kvalo@quicinc.com>
Fri, 29 Nov 2024 11:17:46 +0000 (13:17 +0200)
Currently for single radio devices (ah->num_radio == 1)
ath12k_mac_op_add_interface() creates vdev and later hw scan and
assign_vif_chanctx uses the same. For MLO, vdev create request should carry ML
address which will not be known during ath12k_mac_op_add_interface() as vif
will be marked as ML only after links are added to it.

If hw scan is requested, the vdev will be deleted post hw scan and subsequent
assign_vif_chanctx call will create new vdev with ML address. But in certain
cases assign_vif_chanctx could be called without any prior hw scan request and
reusing the previously created vdev causes a non-ML vdev to be used for an ML
vif and firmware operates the vdev in non-ML mode.

Fix this by deferring vdev creation for interface until hw scan or
assign_vif_chanctx request is received from mac80211.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: Rameshkumar Sundaram <quic_ramess@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://patch.msgid.link/20241126171139.2350704-9-kvalo@kernel.org
drivers/net/wireless/ath/ath12k/mac.c

index 2bb5d79c66b199e1c217438aef335d11f09fff99..ee804d4a3fd8d7e7b2b951e495dc80eacca37e35 100644 (file)
@@ -8131,14 +8131,9 @@ static int ath12k_mac_op_add_interface(struct ieee80211_hw *hw,
                vif->hw_queue[i] = ATH12K_HW_DEFAULT_QUEUE;
 
        vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
-       /* For non-ml vifs, vif->addr is the actual vdev address but for
-        * ML vif link(link BSSID) address is the vdev address and it can be a
-        * different one from vif->addr (i.e ML address).
-        * Defer vdev creation until assign_chanctx or hw_scan is initiated as driver
+       /* Defer vdev creation until assign_chanctx or hw_scan is initiated as driver
         * will not know if this interface is an ML vif at this point.
         */
-       ath12k_mac_assign_vif_to_vdev(hw, arvif, NULL);
-
        return 0;
 }