struct iwl_mld *mld = mld_vif->mld;
        struct iwl_mld_link *link;
 
+       if (mld_vif->aux_sta.sta_id != IWL_INVALID_STA)
+               iwl_mld_free_internal_sta(mld, &mld_vif->aux_sta);
+
        /* EMLSR is turned back on during recovery */
        vif->driver_flags &= ~IEEE80211_VIF_EML_ACTIVE;
 
                wiphy_delayed_work_init(&mld_vif->emlsr.tmp_non_bss_done_wk,
                                        iwl_mld_emlsr_tmp_non_bss_done_wk);
        }
+       iwl_mld_init_internal_sta(&mld_vif->aux_sta);
 
        return 0;
 }
 
  * @dbgfs_slink: debugfs symlink for this interface
  * @roc_activity: the id of the roc_activity running. Relevant for p2p device
  *     only. Set to %ROC_NUM_ACTIVITIES when not in use.
+ * @aux_sta: station used for remain on channel. Used in P2P device.
  */
 struct iwl_mld_vif {
        /* Add here fields that need clean up on restart */
        struct dentry *dbgfs_slink;
 #endif
        enum iwl_roc_activity roc_activity;
+       struct iwl_mld_int_sta aux_sta;
 };
 
 static inline struct iwl_mld_vif *
 
 
        iwl_mld_init_internal_sta(&mld_link->bcast_sta);
        iwl_mld_init_internal_sta(&mld_link->mcast_sta);
-       iwl_mld_init_internal_sta(&mld_link->aux_sta);
        iwl_mld_init_internal_sta(&mld_link->mon_sta);
 
        if (!mld->fw_status.in_hw_restart)
 
  * @vif: the vif this link belongs to
  * @bcast_sta: station used for broadcast packets. Used in AP, GO and IBSS.
  * @mcast_sta: station used for multicast packets. Used in AP, GO and IBSS.
- * @aux_sta: station used for remain on channel. Used in P2P device.
  * @mon_sta: station used for TX injection in monitor interface.
  * @link_id: over the air link ID
  * @ap_early_keys: The firmware cannot install keys before bcast/mcast STAs,
        struct ieee80211_vif *vif;
        struct iwl_mld_int_sta bcast_sta;
        struct iwl_mld_int_sta mcast_sta;
-       struct iwl_mld_int_sta aux_sta;
        struct iwl_mld_int_sta mon_sta;
        u8 link_id;
 
                iwl_mld_free_internal_sta(mld, &link->bcast_sta);
        if (link->mcast_sta.sta_id != IWL_INVALID_STA)
                iwl_mld_free_internal_sta(mld, &link->mcast_sta);
-       if (link->aux_sta.sta_id != IWL_INVALID_STA)
-               iwl_mld_free_internal_sta(mld, &link->aux_sta);
        if (link->mon_sta.sta_id != IWL_INVALID_STA)
                iwl_mld_free_internal_sta(mld, &link->mon_sta);
 }
 
 {
        struct iwl_mld *mld = IWL_MAC80211_GET_MLD(hw);
        struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif);
-       struct iwl_mld_int_sta *aux_sta;
+       struct iwl_mld_int_sta *aux_sta = &mld_vif->aux_sta;
        struct iwl_roc_req cmd = {
                .action = cpu_to_le32(FW_CTXT_ACTION_ADD),
        };
        if (WARN_ON(mld_vif->roc_activity != ROC_NUM_ACTIVITIES))
                return -EBUSY;
 
-       /* No MLO on P2P device */
-       aux_sta = &mld_vif->deflink.aux_sta;
-
        ret = iwl_mld_add_aux_sta(mld, aux_sta);
        if (ret)
                return ret;
         * we can flush the Tx on the queues
         */
 
-       iwl_mld_flush_link_sta_txqs(mld, mld_vif->deflink.aux_sta.sta_id);
+       iwl_mld_flush_link_sta_txqs(mld, mld_vif->aux_sta.sta_id);
 
-       iwl_mld_remove_aux_sta(mld, vif, &vif->bss_conf);
+       iwl_mld_remove_aux_sta(mld, vif);
 }
 
 int iwl_mld_cancel_roc(struct ieee80211_hw *hw,
 
 }
 
 void iwl_mld_remove_aux_sta(struct iwl_mld *mld,
-                           struct ieee80211_vif *vif,
-                           struct ieee80211_bss_conf *link)
+                           struct ieee80211_vif *vif)
 {
-       struct iwl_mld_link *mld_link = iwl_mld_link_from_mac80211(link);
-
-       if (WARN_ON(!mld_link))
-               return;
+       struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif);
 
        /* TODO: Hotspot 2.0 */
        if (WARN_ON(vif->type != NL80211_IFTYPE_P2P_DEVICE))
                return;
 
-       iwl_mld_remove_internal_sta(mld, &mld_link->aux_sta, false,
+       iwl_mld_remove_internal_sta(mld, &mld_vif->aux_sta, false,
                                    IWL_MAX_TID_COUNT);
 }
 
 
                              struct ieee80211_bss_conf *link);
 
 void iwl_mld_remove_aux_sta(struct iwl_mld *mld,
-                           struct ieee80211_vif *vif,
-                           struct ieee80211_bss_conf *link);
+                           struct ieee80211_vif *vif);
 
 void iwl_mld_remove_mon_sta(struct iwl_mld *mld,
                            struct ieee80211_vif *vif,
 
 
                WARN_ON(!ieee80211_is_mgmt(fc));
 
-               return mld_vif->deflink.aux_sta.queue_id;
+               return mld_vif->aux_sta.queue_id;
        case NL80211_IFTYPE_MONITOR:
                mld_vif = iwl_mld_vif_from_mac80211(info->control.vif);
                return mld_vif->deflink.mon_sta.queue_id;