}
 
 struct rtw89_mcc_stop_sel {
+       struct {
+               const struct rtw89_vif_link *target;
+       } hint;
+
+       /* selection content */
+       bool filled;
        u8 mac_id;
        u8 slot_idx;
 };
 {
        sel->mac_id = mcc_role->rtwvif_link->mac_id;
        sel->slot_idx = mcc_role->slot_idx;
+       sel->filled = true;
 }
 
 static int rtw89_mcc_stop_sel_iterator(struct rtw89_dev *rtwdev,
 {
        struct rtw89_mcc_stop_sel *sel = data;
 
+       if (mcc_role->rtwvif_link == sel->hint.target) {
+               rtw89_mcc_stop_sel_fill(sel, mcc_role);
+               return 1; /* break iteration */
+       }
+
+       if (sel->filled)
+               return 0;
+
        if (!mcc_role->rtwvif_link->chanctx_assigned)
                return 0;
 
        rtw89_mcc_stop_sel_fill(sel, mcc_role);
-       return 1; /* break iteration */
+       return 0;
 }
 
-static void rtw89_mcc_stop(struct rtw89_dev *rtwdev)
+static void rtw89_mcc_stop(struct rtw89_dev *rtwdev,
+                          const struct rtw89_chanctx_pause_parm *pause)
 {
        struct rtw89_mcc_info *mcc = &rtwdev->mcc;
        struct rtw89_mcc_role *ref = &mcc->role_ref;
-       struct rtw89_mcc_stop_sel sel;
+       struct rtw89_mcc_stop_sel sel = {
+               .hint.target = pause ? pause->trigger : NULL,
+       };
        int ret;
 
        /* by default, stop at ref */
-       rtw89_mcc_stop_sel_fill(&sel, ref);
        rtw89_iterate_mcc_roles(rtwdev, rtw89_mcc_stop_sel_iterator, &sel);
+       if (!sel.filled)
+               rtw89_mcc_stop_sel_fill(&sel, ref);
 
        rtw89_debug(rtwdev, RTW89_DBG_CHAN, "MCC stop at <macid %d>\n", sel.mac_id);
 
 }
 
 void rtw89_chanctx_pause(struct rtw89_dev *rtwdev,
-                        enum rtw89_chanctx_pause_reasons rsn)
+                        const struct rtw89_chanctx_pause_parm *pause_parm)
 {
        struct rtw89_hal *hal = &rtwdev->hal;
        enum rtw89_entity_mode mode;
        if (hal->entity_pause)
                return;
 
-       rtw89_debug(rtwdev, RTW89_DBG_CHAN, "chanctx pause (rsn: %d)\n", rsn);
+       rtw89_debug(rtwdev, RTW89_DBG_CHAN, "chanctx pause (rsn: %d)\n", pause_parm->rsn);
 
        mode = rtw89_get_entity_mode(rtwdev);
        switch (mode) {
        case RTW89_ENTITY_MODE_MCC:
-               rtw89_mcc_stop(rtwdev);
+               rtw89_mcc_stop(rtwdev, pause_parm);
                break;
        default:
                break;
                cur = rtw89_get_entity_mode(rtwdev);
                switch (cur) {
                case RTW89_ENTITY_MODE_MCC:
-                       rtw89_mcc_stop(rtwdev);
+                       rtw89_mcc_stop(rtwdev, NULL);
                        break;
                default:
                        break;
 
        RTW89_CHANCTX_PAUSE_REASON_ROC,
 };
 
+struct rtw89_chanctx_pause_parm {
+       const struct rtw89_vif_link *trigger;
+       enum rtw89_chanctx_pause_reasons rsn;
+};
+
 struct rtw89_chanctx_cb_parm {
        int (*cb)(struct rtw89_dev *rtwdev, void *data);
        void *data;
                                enum rtw89_chanctx_changes change);
 void rtw89_chanctx_track(struct rtw89_dev *rtwdev);
 void rtw89_chanctx_pause(struct rtw89_dev *rtwdev,
-                        enum rtw89_chanctx_pause_reasons rsn);
+                        const struct rtw89_chanctx_pause_parm *parm);
 void rtw89_chanctx_proceed(struct rtw89_dev *rtwdev,
                           const struct rtw89_chanctx_cb_parm *cb_parm);
 
 
 void rtw89_roc_start(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
 {
        const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
+       struct rtw89_chanctx_pause_parm pause_parm = {
+               .rsn = RTW89_CHANCTX_PAUSE_REASON_ROC,
+       };
        struct ieee80211_hw *hw = rtwdev->hw;
        struct rtw89_roc *roc = &rtwvif->roc;
        struct rtw89_vif_link *rtwvif_link;
 
        roc->link_id = rtwvif_link->link_id;
 
-       rtw89_chanctx_pause(rtwdev, RTW89_CHANCTX_PAUSE_REASON_ROC);
+       pause_parm.trigger = rtwvif_link;
+       rtw89_chanctx_pause(rtwdev, &pause_parm);
 
        ret = rtw89_core_send_nullfunc(rtwdev, rtwvif_link, true, true);
        if (ret)
 
        const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
                                                       rtwvif_link->chanctx_idx);
        struct rtw89_vif *rtwvif = rtwvif_link->rtwvif;
+       struct rtw89_chanctx_pause_parm pause_parm = {
+               .rsn = RTW89_CHANCTX_PAUSE_REASON_HW_SCAN,
+               .trigger = rtwvif_link,
+       };
        u32 rx_fltr = rtwdev->hal.rx_fltr;
        u8 mac_addr[ETH_ALEN];
        u32 reg;
        reg = rtw89_mac_reg_by_idx(rtwdev, mac->rx_fltr, rtwvif_link->mac_idx);
        rtw89_write32_mask(rtwdev, reg, B_AX_RX_FLTR_CFG_MASK, rx_fltr);
 
-       rtw89_chanctx_pause(rtwdev, RTW89_CHANCTX_PAUSE_REASON_HW_SCAN);
+       rtw89_chanctx_pause(rtwdev, &pause_parm);
 
        if (mode == RTW89_ENTITY_MODE_MCC)
                rtw89_hw_scan_update_beacon_noa(rtwdev, req);