}
 
 void iwl_mvm_abort_channel_switch(struct ieee80211_hw *hw,
-                                 struct ieee80211_vif *vif)
+                                 struct ieee80211_vif *vif,
+                                 struct ieee80211_bss_conf *link_conf)
 {
        struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
        struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
 
        if (chsw->count >= mvmvif->csa_count && chsw->block_tx) {
                if (mvmvif->csa_misbehave) {
+                       struct ieee80211_bss_conf *link_conf;
+
                        /* Second time, give up on this AP*/
-                       iwl_mvm_abort_channel_switch(hw, vif);
+
+                       link_conf = wiphy_dereference(hw->wiphy,
+                                                     vif->link_conf[chsw->link_id]);
+                       if (WARN_ON(!link_conf))
+                               return;
+
+                       iwl_mvm_abort_channel_switch(hw, vif, link_conf);
                        ieee80211_chswitch_done(vif, false, 0);
                        mvmvif->csa_misbehave = false;
                        return;
 
                               struct ieee80211_vif *vif,
                               struct ieee80211_channel_switch *chsw);
 void iwl_mvm_abort_channel_switch(struct ieee80211_hw *hw,
-                                 struct ieee80211_vif *vif);
+                                 struct ieee80211_vif *vif,
+                                 struct ieee80211_bss_conf *link_conf);
 void iwl_mvm_channel_switch_rx_beacon(struct ieee80211_hw *hw,
                                      struct ieee80211_vif *vif,
                                      struct ieee80211_channel_switch *chsw);
 
  *     after a channel switch procedure is completed, allowing the
  *     driver to go back to a normal configuration.
  * @abort_channel_switch: This is an optional callback that is called
- *     when channel switch procedure was completed, allowing the
+ *     when channel switch procedure was aborted, allowing the
  *     driver to go back to a normal configuration.
  * @channel_switch_rx_beacon: This is an optional callback that is called
  *     when channel switch procedure is in progress and additional beacon with
                                   struct ieee80211_vif *vif,
                                   struct ieee80211_bss_conf *link_conf);
        void (*abort_channel_switch)(struct ieee80211_hw *hw,
-                                    struct ieee80211_vif *vif);
+                                    struct ieee80211_vif *vif,
+                                    struct ieee80211_bss_conf *link_conf);
        void (*channel_switch_rx_beacon)(struct ieee80211_hw *hw,
                                         struct ieee80211_vif *vif,
                                         struct ieee80211_channel_switch *ch_switch);
 
 /*
 * Portions of this file
 * Copyright(c) 2016 Intel Deutschland GmbH
-* Copyright (C) 2018 - 2019, 2021 - 2023 Intel Corporation
+* Copyright (C) 2018-2019, 2021-2024 Intel Corporation
 */
 
 #ifndef __MAC80211_DRIVER_OPS
 }
 
 static inline void
-drv_abort_channel_switch(struct ieee80211_sub_if_data *sdata)
+drv_abort_channel_switch(struct ieee80211_link_data *link)
 {
+       struct ieee80211_sub_if_data *sdata = link->sdata;
        struct ieee80211_local *local = sdata->local;
 
        might_sleep();
        trace_drv_abort_channel_switch(local, sdata);
 
        if (local->ops->abort_channel_switch)
-               local->ops->abort_channel_switch(&local->hw, &sdata->vif);
+               local->ops->abort_channel_switch(&local->hw, &sdata->vif,
+                                                link->conf);
 }
 
 static inline void
 
        link->csa_block_tx = false;
        link->conf->csa_active = false;
 
-       drv_abort_channel_switch(sdata);
+       drv_abort_channel_switch(link);
 }
 
 static void