diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/2012-Revert-wifi-mt76-mt7921-fix-the-wrong-rate-selected-.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/2012-Revert-wifi-mt76-mt7921-fix-the-wrong-rate-selected-.patch
new file mode 100644
index 0000000..aea2ccd
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/2012-Revert-wifi-mt76-mt7921-fix-the-wrong-rate-selected-.patch
@@ -0,0 +1,41 @@
+From 5959391d31be290f08b6614c178231a298b4b91e Mon Sep 17 00:00:00 2001
+From: Peter Chiu <chui-hao.chiu@mediatek.com>
+Date: Mon, 23 Oct 2023 10:25:13 +0800
+Subject: [PATCH 2012/2015] Revert "wifi: mt76: mt7921: fix the wrong rate
+ selected in fw for the chanctx driver"
+
+This reverts commit 9fc37b0ac5467cfe5e3d2ad8a29e9a7646ece2be.
+---
+ mt76_connac_mcu.c | 9 ++-------
+ 1 file changed, 2 insertions(+), 7 deletions(-)
+
+diff --git a/mt76_connac_mcu.c b/mt76_connac_mcu.c
+index aa99bd78..3a6404a7 100644
+--- a/mt76_connac_mcu.c
++++ b/mt76_connac_mcu.c
+@@ -837,9 +837,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
+ 			     struct ieee80211_vif *vif,
+ 			     u8 rcpi, u8 sta_state)
+ {
+-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
+-	struct cfg80211_chan_def *chandef = mvif->ctx ?
+-					    &mvif->ctx->def : &mphy->chandef;
++	struct cfg80211_chan_def *chandef = &mphy->chandef;
+ 	enum nl80211_band band = chandef->chan->band;
+ 	struct mt76_dev *dev = mphy->dev;
+ 	struct sta_rec_ra_info *ra_info;
+@@ -1345,10 +1343,7 @@ EXPORT_SYMBOL_GPL(mt76_connac_get_phy_mode);
+ const struct ieee80211_sta_he_cap *
+ mt76_connac_get_he_phy_cap(struct mt76_phy *phy, struct ieee80211_vif *vif)
+ {
+-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
+-	struct cfg80211_chan_def *chandef = mvif->ctx ?
+-					    &mvif->ctx->def : &phy->chandef;
+-	enum nl80211_band band = chandef->chan->band;
++	enum nl80211_band band = phy->chandef.chan->band;
+ 	struct ieee80211_supported_band *sband;
+ 
+ 	sband = phy->hw->wiphy->bands[band];
+-- 
+2.18.0
+
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/2013-Revert-wifi-mt76-mt7921-fix-the-wrong-rate-pickup-fo.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/2013-Revert-wifi-mt76-mt7921-fix-the-wrong-rate-pickup-fo.patch
new file mode 100644
index 0000000..4997109
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/2013-Revert-wifi-mt76-mt7921-fix-the-wrong-rate-pickup-fo.patch
@@ -0,0 +1,78 @@
+From b5cc571132a848d5daa3bec3ee07274205a98df0 Mon Sep 17 00:00:00 2001
+From: Peter Chiu <chui-hao.chiu@mediatek.com>
+Date: Mon, 23 Oct 2023 10:25:18 +0800
+Subject: [PATCH 2013/2015] Revert "wifi: mt76: mt7921: fix the wrong rate
+ pickup for the chanctx driver"
+
+This reverts commit 66d5694e1898c5584a83c60876bec16909ebe2b0.
+---
+ mac80211.c        | 9 ++-------
+ mt76.h            | 3 +--
+ mt76_connac_mac.c | 7 ++-----
+ 3 files changed, 5 insertions(+), 14 deletions(-)
+
+diff --git a/mac80211.c b/mac80211.c
+index 137c5204..37e6a627 100644
+--- a/mac80211.c
++++ b/mac80211.c
+@@ -1710,16 +1710,11 @@ mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
+ }
+ EXPORT_SYMBOL_GPL(mt76_init_queue);
+ 
+-u16 mt76_calculate_default_rate(struct mt76_phy *phy,
+-				struct ieee80211_vif *vif, int rateidx)
++u16 mt76_calculate_default_rate(struct mt76_phy *phy, int rateidx)
+ {
+-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
+-	struct cfg80211_chan_def *chandef = mvif->ctx ?
+-					    &mvif->ctx->def :
+-					    &phy->chandef;
+ 	int offset = 0;
+ 
+-	if (chandef->chan->band != NL80211_BAND_2GHZ)
++	if (phy->chandef.chan->band != NL80211_BAND_2GHZ)
+ 		offset = 4;
+ 
+ 	/* pick the lowest rate for hidden nodes */
+diff --git a/mt76.h b/mt76.h
+index 0a7f4f14..05144b2c 100644
+--- a/mt76.h
++++ b/mt76.h
+@@ -1207,8 +1207,7 @@ bool mt76_check_bin_file_mode(struct mt76_dev *dev);
+ struct mt76_queue *
+ mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
+ 		int ring_base, u32 flags);
+-u16 mt76_calculate_default_rate(struct mt76_phy *phy,
+-				struct ieee80211_vif *vif, int rateidx);
++u16 mt76_calculate_default_rate(struct mt76_phy *phy, int rateidx);
+ static inline int mt76_init_tx_queue(struct mt76_phy *phy, int qid, int idx,
+ 				     int n_desc, int ring_base, u32 flags)
+ {
+diff --git a/mt76_connac_mac.c b/mt76_connac_mac.c
+index faeae26d..431d60d3 100644
+--- a/mt76_connac_mac.c
++++ b/mt76_connac_mac.c
+@@ -293,10 +293,7 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy,
+ 				 struct ieee80211_vif *vif,
+ 				 bool beacon, bool mcast)
+ {
+-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
+-	struct cfg80211_chan_def *chandef = mvif->ctx ?
+-					    &mvif->ctx->def : &mphy->chandef;
+-	u8 nss = 0, mode = 0, band = chandef->chan->band;
++	u8 nss = 0, mode = 0, band = mphy->chandef.chan->band;
+ 	int rateidx = 0, mcast_rate;
+ 
+ 	if (!vif)
+@@ -329,7 +326,7 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy,
+ 		rateidx = ffs(vif->bss_conf.basic_rates) - 1;
+ 
+ legacy:
+-	rateidx = mt76_calculate_default_rate(mphy, vif, rateidx);
++	rateidx = mt76_calculate_default_rate(mphy, rateidx);
+ 	mode = rateidx >> 8;
+ 	rateidx &= GENMASK(7, 0);
+ out:
+-- 
+2.18.0
+
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/2014-Revert-wifi-mt76-move-struct-ieee80211_chanctx_conf-.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/2014-Revert-wifi-mt76-move-struct-ieee80211_chanctx_conf-.patch
new file mode 100644
index 0000000..27dc9f6
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/2014-Revert-wifi-mt76-move-struct-ieee80211_chanctx_conf-.patch
@@ -0,0 +1,121 @@
+From ae8181c30d187de764055ab15fd7f3efd8aa736c Mon Sep 17 00:00:00 2001
+From: Peter Chiu <chui-hao.chiu@mediatek.com>
+Date: Mon, 23 Oct 2023 10:25:25 +0800
+Subject: [PATCH 2014/2015] Revert "wifi: mt76: move struct
+ ieee80211_chanctx_conf up to struct mt76_vif"
+
+This reverts commit d1881b1b2bf6018d1cb1b91e4301a60021cacaa3.
+---
+ mt76.h        |  1 -
+ mt7921/main.c | 12 ++++++------
+ mt792x.h      |  1 +
+ mt792x_core.c |  4 ++--
+ 4 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/mt76.h b/mt76.h
+index 05144b2c..3ff348f2 100644
+--- a/mt76.h
++++ b/mt76.h
+@@ -798,7 +798,6 @@ struct mt76_vif {
+ 	u8 basic_rates_idx;
+ 	u8 mcast_rates_idx;
+ 	u8 beacon_rates_idx;
+-	struct ieee80211_chanctx_conf *ctx;
+ };
+ 
+ struct mt76_phy {
+diff --git a/mt7921/main.c b/mt7921/main.c
+index 6a5c2cae..28c7e04b 100644
+--- a/mt7921/main.c
++++ b/mt7921/main.c
+@@ -756,7 +756,7 @@ void mt7921_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+ 
+ 	if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls)
+ 		mt76_connac_mcu_uni_add_bss(&dev->mphy, vif, &mvif->sta.wcid,
+-					    true, mvif->mt76.ctx);
++					    true, mvif->ctx);
+ 
+ 	ewma_avg_signal_init(&msta->avg_ack_signal);
+ 
+@@ -791,7 +791,7 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+ 		if (!sta->tdls)
+ 			mt76_connac_mcu_uni_add_bss(&dev->mphy, vif,
+ 						    &mvif->sta.wcid, false,
+-						    mvif->mt76.ctx);
++						    mvif->ctx);
+ 	}
+ 
+ 	spin_lock_bh(&dev->mt76.sta_poll_lock);
+@@ -1208,7 +1208,7 @@ mt7921_start_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+ 	mt792x_mutex_acquire(dev);
+ 
+ 	err = mt76_connac_mcu_uni_add_bss(phy->mt76, vif, &mvif->sta.wcid,
+-					  true, mvif->mt76.ctx);
++					  true, mvif->ctx);
+ 	if (err)
+ 		goto out;
+ 
+@@ -1240,7 +1240,7 @@ mt7921_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+ 		goto out;
+ 
+ 	mt76_connac_mcu_uni_add_bss(phy->mt76, vif, &mvif->sta.wcid, false,
+-				    mvif->mt76.ctx);
++				    mvif->ctx);
+ 
+ out:
+ 	mt792x_mutex_release(dev);
+@@ -1265,7 +1265,7 @@ static void mt7921_ctx_iter(void *priv, u8 *mac,
+ 	struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv;
+ 	struct ieee80211_chanctx_conf *ctx = priv;
+ 
+-	if (ctx != mvif->mt76.ctx)
++	if (ctx != mvif->ctx)
+ 		return;
+ 
+ 	if (vif->type == NL80211_IFTYPE_MONITOR)
+@@ -1298,7 +1298,7 @@ static void mt7921_mgd_prepare_tx(struct ieee80211_hw *hw,
+ 		       jiffies_to_msecs(HZ);
+ 
+ 	mt792x_mutex_acquire(dev);
+-	mt7921_set_roc(mvif->phy, mvif, mvif->mt76.ctx->def.chan, duration,
++	mt7921_set_roc(mvif->phy, mvif, mvif->ctx->def.chan, duration,
+ 		       MT7921_ROC_REQ_JOIN);
+ 	mt792x_mutex_release(dev);
+ }
+diff --git a/mt792x.h b/mt792x.h
+index 548e89fa..39cbd139 100644
+--- a/mt792x.h
++++ b/mt792x.h
+@@ -93,6 +93,7 @@ struct mt792x_vif {
+ 	struct ewma_rssi rssi;
+ 
+ 	struct ieee80211_tx_queue_params queue_params[IEEE80211_NUM_ACS];
++	struct ieee80211_chanctx_conf *ctx;
+ };
+ 
+ struct mt792x_phy {
+diff --git a/mt792x_core.c b/mt792x_core.c
+index 7c4a74fb..8c97ac00 100644
+--- a/mt792x_core.c
++++ b/mt792x_core.c
+@@ -243,7 +243,7 @@ int mt792x_assign_vif_chanctx(struct ieee80211_hw *hw,
+ 	struct mt792x_dev *dev = mt792x_hw_dev(hw);
+ 
+ 	mutex_lock(&dev->mt76.mutex);
+-	mvif->mt76.ctx = ctx;
++	mvif->ctx = ctx;
+ 	mutex_unlock(&dev->mt76.mutex);
+ 
+ 	return 0;
+@@ -259,7 +259,7 @@ void mt792x_unassign_vif_chanctx(struct ieee80211_hw *hw,
+ 	struct mt792x_dev *dev = mt792x_hw_dev(hw);
+ 
+ 	mutex_lock(&dev->mt76.mutex);
+-	mvif->mt76.ctx = NULL;
++	mvif->ctx = NULL;
+ 	mutex_unlock(&dev->mt76.mutex);
+ }
+ EXPORT_SYMBOL_GPL(mt792x_unassign_vif_chanctx);
+-- 
+2.18.0
+
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/2015-Revert-wifi-mt76-fix-race-condition-related-to-check.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/2015-Revert-wifi-mt76-fix-race-condition-related-to-check.patch
new file mode 100644
index 0000000..91507f4
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/2015-Revert-wifi-mt76-fix-race-condition-related-to-check.patch
@@ -0,0 +1,256 @@
+From 20d498a3d24a4c20a421bc6bc19a058620aa86ec Mon Sep 17 00:00:00 2001
+From: Peter Chiu <chui-hao.chiu@mediatek.com>
+Date: Mon, 23 Oct 2023 10:26:01 +0800
+Subject: [PATCH 2015/2015] Revert "wifi: mt76: fix race condition related to
+ checking tx queue fill status"
+
+This reverts commit f1e1e67d97d1e9a8bb01b59ab20c45ebc985a958.
+---
+ mac80211.c |  27 --------------
+ mt76.h     |   5 ---
+ tx.c       | 108 ++++++++++-------------------------------------------
+ 3 files changed, 20 insertions(+), 120 deletions(-)
+
+diff --git a/mac80211.c b/mac80211.c
+index 37e6a627..923c6a31 100644
+--- a/mac80211.c
++++ b/mac80211.c
+@@ -427,9 +427,6 @@ mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)
+ 	struct mt76_dev *dev = phy->dev;
+ 	struct wiphy *wiphy = hw->wiphy;
+ 
+-	INIT_LIST_HEAD(&phy->tx_list);
+-	spin_lock_init(&phy->tx_lock);
+-
+ 	SET_IEEE80211_DEV(hw, dev->dev);
+ 	SET_IEEE80211_PERM_ADDR(hw, phy->macaddr);
+ 
+@@ -662,7 +659,6 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,
+ 	int ret;
+ 
+ 	dev_set_drvdata(dev->dev, dev);
+-	mt76_wcid_init(&dev->global_wcid);
+ 	ret = mt76_phy_init(phy, hw);
+ 	if (ret)
+ 		return ret;
+@@ -718,7 +714,6 @@ void mt76_unregister_device(struct mt76_dev *dev)
+ 	if (IS_ENABLED(CONFIG_MT76_LEDS))
+ 		mt76_led_cleanup(&dev->phy);
+ 	mt76_tx_status_check(dev, true);
+-	mt76_wcid_cleanup(dev, &dev->global_wcid);
+ 	ieee80211_unregister_hw(hw);
+ }
+ EXPORT_SYMBOL_GPL(mt76_unregister_device);
+@@ -1460,9 +1455,6 @@ EXPORT_SYMBOL_GPL(mt76_sta_pre_rcu_remove);
+ 
+ void mt76_wcid_init(struct mt76_wcid *wcid)
+ {
+-	INIT_LIST_HEAD(&wcid->tx_list);
+-	skb_queue_head_init(&wcid->tx_pending);
+-
+ 	INIT_LIST_HEAD(&wcid->list);
+ 	idr_init(&wcid->pktid);
+ }
+@@ -1470,32 +1462,13 @@ EXPORT_SYMBOL_GPL(mt76_wcid_init);
+ 
+ void mt76_wcid_cleanup(struct mt76_dev *dev, struct mt76_wcid *wcid)
+ {
+-	struct mt76_phy *phy = dev->phys[wcid->phy_idx];
+-	struct ieee80211_hw *hw;
+ 	struct sk_buff_head list;
+-	struct sk_buff *skb;
+ 
+ 	mt76_tx_status_lock(dev, &list);
+ 	mt76_tx_status_skb_get(dev, wcid, -1, &list);
+ 	mt76_tx_status_unlock(dev, &list);
+ 
+ 	idr_destroy(&wcid->pktid);
+-
+-	spin_lock_bh(&phy->tx_lock);
+-
+-	if (!list_empty(&wcid->tx_list))
+-		list_del_init(&wcid->tx_list);
+-
+-	spin_lock(&wcid->tx_pending.lock);
+-	skb_queue_splice_tail_init(&wcid->tx_pending, &list);
+-	spin_unlock(&wcid->tx_pending.lock);
+-
+-	spin_unlock_bh(&phy->tx_lock);
+-
+-	while ((skb = __skb_dequeue(&list)) != NULL) {
+-		hw = mt76_tx_status_get_hw(dev, skb);
+-		ieee80211_free_txskb(hw, skb);
+-	}
+ }
+ EXPORT_SYMBOL_GPL(mt76_wcid_cleanup);
+ 
+diff --git a/mt76.h b/mt76.h
+index 3ff348f2..5eb571ef 100644
+--- a/mt76.h
++++ b/mt76.h
+@@ -354,9 +354,6 @@ struct mt76_wcid {
+ 	u32 tx_info;
+ 	bool sw_iv;
+ 
+-	struct list_head tx_list;
+-	struct sk_buff_head tx_pending;
+-
+ 	struct list_head list;
+ 	struct idr pktid;
+ 
+@@ -808,8 +805,6 @@ struct mt76_phy {
+ 	unsigned long state;
+ 	u8 band_idx;
+ 
+-	spinlock_t tx_lock;
+-	struct list_head tx_list;
+ 	struct mt76_queue *q_tx[__MT_TXQ_MAX];
+ 
+ 	struct cfg80211_chan_def chandef;
+diff --git a/tx.c b/tx.c
+index 23a1e4e2..9dfc2890 100644
+--- a/tx.c
++++ b/tx.c
+@@ -322,32 +322,40 @@ void
+ mt76_tx(struct mt76_phy *phy, struct ieee80211_sta *sta,
+ 	struct mt76_wcid *wcid, struct sk_buff *skb)
+ {
++	struct mt76_dev *dev = phy->dev;
+ 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
++	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
++	struct mt76_queue *q;
++	int qid = skb_get_queue_mapping(skb);
+ 
+ 	if (mt76_testmode_enabled(phy)) {
+ 		ieee80211_free_txskb(phy->hw, skb);
+ 		return;
+ 	}
+ 
+-	if (WARN_ON(skb_get_queue_mapping(skb) >= MT_TXQ_PSD))
+-		skb_set_queue_mapping(skb, MT_TXQ_BE);
++	if (WARN_ON(qid >= MT_TXQ_PSD)) {
++		qid = MT_TXQ_BE;
++		skb_set_queue_mapping(skb, qid);
++	}
++
++	if ((dev->drv->drv_flags & MT_DRV_HW_MGMT_TXQ) &&
++	    !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) &&
++	    !ieee80211_is_data(hdr->frame_control) &&
++	    !ieee80211_is_bufferable_mmpdu(skb)) {
++		qid = MT_TXQ_PSD;
++	}
+ 
+ 	if (wcid && !(wcid->tx_info & MT_WCID_TX_INFO_SET))
+ 		ieee80211_get_tx_rates(info->control.vif, sta, skb,
+ 				       info->control.rates, 1);
+ 
+ 	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->band_idx);
++	q = phy->q_tx[qid];
+ 
+-	spin_lock_bh(&wcid->tx_pending.lock);
+-	__skb_queue_tail(&wcid->tx_pending, skb);
+-	spin_unlock_bh(&wcid->tx_pending.lock);
+-
+-	spin_lock_bh(&phy->tx_lock);
+-	if (list_empty(&wcid->tx_list))
+-		list_add_tail(&wcid->tx_list, &phy->tx_list);
+-	spin_unlock_bh(&phy->tx_lock);
+-
+-	mt76_worker_schedule(&phy->dev->tx_worker);
++	spin_lock_bh(&q->lock);
++	__mt76_tx_queue_skb(phy, qid, skb, wcid, sta, NULL);
++	dev->queue_ops->kick(dev, q);
++	spin_unlock_bh(&q->lock);
+ }
+ EXPORT_SYMBOL_GPL(mt76_tx);
+ 
+@@ -578,86 +586,10 @@ void mt76_txq_schedule(struct mt76_phy *phy, enum mt76_txq_id qid)
+ }
+ EXPORT_SYMBOL_GPL(mt76_txq_schedule);
+ 
+-static int
+-mt76_txq_schedule_pending_wcid(struct mt76_phy *phy, struct mt76_wcid *wcid)
+-{
+-	struct mt76_dev *dev = phy->dev;
+-	struct ieee80211_sta *sta;
+-	struct mt76_queue *q;
+-	struct sk_buff *skb;
+-	int ret = 0;
+-
+-	spin_lock(&wcid->tx_pending.lock);
+-	while ((skb = skb_peek(&wcid->tx_pending)) != NULL) {
+-		struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+-		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+-		int qid = skb_get_queue_mapping(skb);
+-
+-		if ((dev->drv->drv_flags & MT_DRV_HW_MGMT_TXQ) &&
+-		    !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) &&
+-		    !ieee80211_is_data(hdr->frame_control) &&
+-		    !ieee80211_is_bufferable_mmpdu(skb))
+-			qid = MT_TXQ_PSD;
+-
+-		q = phy->q_tx[qid];
+-		if (mt76_txq_stopped(q)) {
+-			ret = -1;
+-			break;
+-		}
+-
+-		__skb_unlink(skb, &wcid->tx_pending);
+-		spin_unlock(&wcid->tx_pending.lock);
+-
+-		sta = wcid_to_sta(wcid);
+-		spin_lock(&q->lock);
+-		__mt76_tx_queue_skb(phy, qid, skb, wcid, sta, NULL);
+-		dev->queue_ops->kick(dev, q);
+-		spin_unlock(&q->lock);
+-
+-		spin_lock(&wcid->tx_pending.lock);
+-	}
+-	spin_unlock(&wcid->tx_pending.lock);
+-
+-	return ret;
+-}
+-
+-static void mt76_txq_schedule_pending(struct mt76_phy *phy)
+-{
+-	if (list_empty(&phy->tx_list))
+-		return;
+-
+-	local_bh_disable();
+-	rcu_read_lock();
+-
+-	spin_lock(&phy->tx_lock);
+-	while (!list_empty(&phy->tx_list)) {
+-		struct mt76_wcid *wcid = NULL;
+-		int ret;
+-
+-		wcid = list_first_entry(&phy->tx_list, struct mt76_wcid, tx_list);
+-		list_del_init(&wcid->tx_list);
+-
+-		spin_unlock(&phy->tx_lock);
+-		ret = mt76_txq_schedule_pending_wcid(phy, wcid);
+-		spin_lock(&phy->tx_lock);
+-
+-		if (ret) {
+-			if (list_empty(&wcid->tx_list))
+-				list_add_tail(&wcid->tx_list, &phy->tx_list);
+-			break;
+-		}
+-	}
+-	spin_unlock(&phy->tx_lock);
+-
+-	rcu_read_unlock();
+-	local_bh_enable();
+-}
+-
+ void mt76_txq_schedule_all(struct mt76_phy *phy)
+ {
+ 	int i;
+ 
+-	mt76_txq_schedule_pending(phy);
+ 	for (i = 0; i <= MT_TXQ_BK; i++)
+ 		mt76_txq_schedule(phy, i);
+ }
+-- 
+2.18.0
+
