]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: mld: update the P2P device mac before starting the GO
authorAvraham Stern <avraham.stern@intel.com>
Thu, 10 Jul 2025 18:28:19 +0000 (21:28 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Fri, 11 Jul 2025 15:28:30 +0000 (18:28 +0300)
When a GO is started, the P2P device mac is updated to indicate
that frames for the P2P device mac should be filtered in while
the GO is active. However, this configuration is done after the GO is
already started so it doesn't take effect. Fix it by updating the
P2P device mac before adding the broadcast station, which actually
starts the GO.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250710212632.463a0ad545f9.I85a25484d787b65f6a27e794285911e319df0b2d@changeid
drivers/net/wireless/intel/iwlwifi/mld/ap.c

index 26511b49d89af74f6790e0e4eefb365f05cc9fde..5c59acc8c4c5a04053e66c51911bfcd8f8dfc738 100644 (file)
@@ -294,9 +294,20 @@ int iwl_mld_start_ap_ibss(struct ieee80211_hw *hw,
        if (ret)
                return ret;
 
+       mld_vif->ap_ibss_active = true;
+
+       if (vif->p2p && mld->p2p_device_vif) {
+               ret = iwl_mld_mac_fw_action(mld, mld->p2p_device_vif,
+                                           FW_CTXT_ACTION_MODIFY);
+               if (ret) {
+                       mld_vif->ap_ibss_active = false;
+                       goto rm_mcast;
+               }
+       }
+
        ret = iwl_mld_add_bcast_sta(mld, vif, link);
        if (ret)
-               goto rm_mcast;
+               goto update_p2p_dev;
 
        /* Those keys were configured by the upper layers before starting the
         * AP. Now that it is started and the bcast and mcast sta were added to
@@ -310,12 +321,6 @@ int iwl_mld_start_ap_ibss(struct ieee80211_hw *hw,
                iwl_mld_vif_update_low_latency(mld, vif, true,
                                               LOW_LATENCY_VIF_TYPE);
 
-       mld_vif->ap_ibss_active = true;
-
-       if (vif->p2p && mld->p2p_device_vif)
-               return iwl_mld_mac_fw_action(mld, mld->p2p_device_vif,
-                                            FW_CTXT_ACTION_MODIFY);
-
        /* When the channel context was added, the link is not yet active, so
         * min_def is always used. Update the PHY again here in case def should
         * actually be used.
@@ -326,6 +331,11 @@ int iwl_mld_start_ap_ibss(struct ieee80211_hw *hw,
        return 0;
 rm_bcast:
        iwl_mld_remove_bcast_sta(mld, vif, link);
+update_p2p_dev:
+       mld_vif->ap_ibss_active = false;
+       if (vif->p2p && mld->p2p_device_vif)
+               iwl_mld_mac_fw_action(mld, mld->p2p_device_vif,
+                                     FW_CTXT_ACTION_MODIFY);
 rm_mcast:
        iwl_mld_remove_mcast_sta(mld, vif, link);
        return ret;