move some common mac fields in shared code
Subsystems (2)
Lorenzo Bianconi
maintainercover move some common mac fields in shared code
Move the following common mac fields in mt76_struct/mt76_wcid:
- sta_poll_list
- sta_poll_lock
- poll_list
- ampdu_state
Move the following routines in mt76-connac lib since they are shared between mt7915 and mt7921:
- mt76_connac2_tx_check_aggr
- mt76_connac2_txwi_free
- mt76_connac2_tx_token_put
Lorenzo Bianconi (13):
wifi: mt76: mt7921: make mt7921_mac_sta_poll static
wifi: mt76: mt7915: move sta_poll_list and sta_poll_lock in mt76_dev
wifi: mt76: mt7603: rely on shared sta_poll_list and sta_poll_lock
wifi: mt76: mt7615: rely on shared sta_poll_list and sta_poll_lock
wifi: mt76: mt7996: rely on shared sta_poll_list and sta_poll_lock
wifi: mt76: mt7921: rely on shared sta_poll_list and sta_poll_lock
wifi: mt76: mt7915: move poll_list in mt76_wcid
wifi: mt76: mt7603: rely on shared poll_list field
wifi: mt76: mt7615: rely on shared poll_list field
wifi: mt76: mt7996: rely on shared poll_list field
wifi: mt76: mt7921: rely on shared poll_list field
wifi: mt76: move ampdu_state in mt76_wcid
mt76: connac: move more mt7921/mt7915 mac shared code in connac lib
drivers/net/wireless/mediatek/mt76/mac80211.c | 2 + drivers/net/wireless/mediatek/mt76/mt76.h | 6 + .../net/wireless/mediatek/mt76/mt7603/init.c | 2 - .../net/wireless/mediatek/mt76/mt7603/mac.c | 22 +-- .../net/wireless/mediatek/mt76/mt7603/main.c | 20 +-- .../wireless/mediatek/mt76/mt7603/mt7603.h | 4 - .../net/wireless/mediatek/mt76/mt7615/init.c | 2 - .../net/wireless/mediatek/mt76/mt7615/mac.c | 27 ++-- .../net/wireless/mediatek/mt76/mt7615/main.c | 20 +-- .../wireless/mediatek/mt76/mt7615/mt7615.h | 4 - .../net/wireless/mediatek/mt76/mt76_connac.h | 5 + .../wireless/mediatek/mt76/mt76_connac_mac.c | 82 ++++++++++ .../net/wireless/mediatek/mt76/mt7915/init.c | 4 +- .../net/wireless/mediatek/mt76/mt7915/mac.c | 140 ++++-------------- .../net/wireless/mediatek/mt76/mt7915/main.c | 30 ++-- .../wireless/mediatek/mt76/mt7915/mt7915.h | 5 - .../net/wireless/mediatek/mt76/mt7921/init.c | 2 - .../net/wireless/mediatek/mt76/mt7921/mac.c | 104 ++++--------- .../net/wireless/mediatek/mt76/mt7921/main.c | 26 ++-- .../wireless/mediatek/mt76/mt7921/mt7921.h | 10 -- .../net/wireless/mediatek/mt76/mt7921/pci.c | 2 +- .../wireless/mediatek/mt76/mt7921/pci_mac.c | 16 +- .../net/wireless/mediatek/mt76/mt7996/init.c | 2 - .../net/wireless/mediatek/mt76/mt7996/mac.c | 52 +++---- .../net/wireless/mediatek/mt76/mt7996/main.c | 30 ++-- .../wireless/mediatek/mt76/mt7996/mt7996.h | 4 - 26 files changed, 268 insertions(+), 355 deletions(-)
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 1/13 wifi: mt76: mt7921: make mt7921_mac_sta_poll static
Make mt7921_mac_sta_poll static since it is run just in mac.c
--- drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 3 +-- drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h | 1 - 2 files changed, 1 insertion(+), 3 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +1 -2
@@ -52,7 +52,7 @@ bool mt7921_mac_wtbl_update(struct mt7921_dev *dev, int idx, u32 mask) 0, 5000); } -void mt7921_mac_sta_poll (struct mt7921_dev *dev) +static void mt7921_mac_sta_poll (struct mt7921_dev *dev) {static const u8 ac_to_tid[] = { [IEEE80211_AC_BE ] =0 ,
@@ -183,7 +183,6 @@ void mt7921_mac_sta_poll(struct mt7921_dev *dev)ewma_avg_signal_add (&msta->avg_ack_signal, -msta->ack_signal); } } -EXPORT_SYMBOL_GPL (mt7921_mac_sta_poll); static void mt7921_get_status_freq_info(struct mt7921_dev *dev, struct mt76_phy *mphy,
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -1
@@ -513,7 +513,6 @@ int mt7921_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,void mt7921_txwi_free (struct mt7921_dev *dev,struct mt76_txwi_cache *t,struct ieee80211_sta *sta,bool clear_status,struct list_head *free_list); -void mt7921_mac_sta_poll (struct mt7921_dev *dev);int mt7921_mcu_parse_response (struct mt76_dev *mdev,int cmd,struct sk_buff *skb,int seq);
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 2/13 wifi: mt76: mt7915: move sta_poll_list and sta_poll_lock in mt76_dev
In reply to Lorenzo Bianconista_poll_list and sta_poll_lock are used by most of the drivers, so move them in mt76_dev structure.
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 2 + drivers/net/wireless/mediatek/mt76/mt76.h | 3 ++ .../net/wireless/mediatek/mt76/mt7915/init.c | 2 - .../net/wireless/mediatek/mt76/mt7915/mac.c | 47 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7915/main.c | 12 ++--- .../wireless/mediatek/mt76/mt7915/mt7915.h | 2 - 6 files changed, 36 insertions(+), 32 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +2 -0
@@ -660,6 +660,8 @@ mt76_alloc_device(struct device *pdev, unsigned int size,idr_init (&dev->rx_token);INIT_LIST_HEAD (&dev->wcid_list); +INIT_LIST_HEAD (&dev->sta_poll_list); +spin_lock_init (&dev->sta_poll_lock);INIT_LIST_HEAD (&dev->txwi_cache);INIT_LIST_HEAD (&dev->rxwi_cache);
drivers/net/wireless/mediatek/mt76/mt76.h +3 -0
@@ -823,6 +823,9 @@ struct mt76_dev {struct mt76_wcid __rcu *wcid[MT76_N_WCIDS ];struct list_head wcid_list; +struct list_head sta_poll_list; +spinlock_t sta_poll_lock; +u32 rev;struct tasklet_struct pre_tbtt_tasklet;
drivers/net/wireless/mediatek/mt76/mt7915/init.c +0 -2
@@ -1177,9 +1177,7 @@ int mt7915_register_device(struct mt7915_dev *dev)INIT_WORK (&dev->rc_work, mt7915_mac_sta_rc_work);INIT_DELAYED_WORK (&dev->mphy.mac_work, mt7915_mac_work);INIT_LIST_HEAD (&dev->sta_rc_list); -INIT_LIST_HEAD (&dev->sta_poll_list);INIT_LIST_HEAD (&dev->twt_list); -spin_lock_init (&dev->sta_poll_lock);init_waitqueue_head (&dev->reset_wait);INIT_WORK (&dev->reset_work, mt7915_mac_reset_work);
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +25 -22
113 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/main.c +6 -6
@@ -308,10 +308,10 @@ static void mt7915_remove_interface(struct ieee80211_hw *hw, phy->omac_mask &= ~BIT_ULL (mvif->mt76.omac_idx);mutex_unlock (&dev->mt76.mutex); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid); }
@@ -715,12 +715,12 @@ void mt7915_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,for (i =0 ; i <ARRAY_SIZE (msta->twt.flow); i++)mt7915_mac_twt_teardown_flow (dev, msta, i); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list);if (!list_empty (&msta->rc_list))list_del_init (&msta->rc_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock); } static void mt7915_tx(struct ieee80211_hw *hw,
@@ -1074,11 +1074,11 @@ static void mt7915_sta_rc_work(void *data, struct ieee80211_sta *sta)struct mt7915_dev *dev = msta->vif->phy->dev;u32 *changed = data; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); msta->changed |= *changed;if (list_empty (&msta->rc_list))list_add_tail (&msta->rc_list, &dev->sta_rc_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } static void mt7915_sta_rc_update(struct ieee80211_hw *hw,
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -2
@@ -328,9 +328,7 @@ struct mt7915_dev {#endif struct list_head sta_rc_list; -struct list_head sta_poll_list;struct list_head twt_list; -spinlock_t sta_poll_lock;u32 hw_pattern;
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 3/13 wifi: mt76: mt7603: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiRely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies.
--- .../net/wireless/mediatek/mt76/mt7603/init.c | 2 -- .../net/wireless/mediatek/mt76/mt7603/mac.c | 18 +++++++++--------- .../net/wireless/mediatek/mt76/mt7603/main.c | 8 ++++---- .../net/wireless/mediatek/mt76/mt7603/mt7603.h | 3 --- 4 files changed, 13 insertions(+), 18 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7603/init.c +0 -2
@@ -500,8 +500,6 @@ int mt7603_register_device(struct mt7603_dev *dev) bus_ops->rmw = mt7603_rmw; dev->mt76.bus = bus_ops; -INIT_LIST_HEAD (&dev->sta_poll_list); -spin_lock_init (&dev->sta_poll_lock);spin_lock_init (&dev->ps_lock);INIT_DELAYED_WORK (&dev->mphy.mac_work, mt7603_mac_work);
drivers/net/wireless/mediatek/mt76/mt7603/mac.c +9 -9
@@ -412,16 +412,16 @@ void mt7603_mac_sta_poll(struct mt7603_dev *dev)while (1 ) {bool clear = false; -spin_lock_bh (&dev->sta_poll_lock); -if (list_empty (&dev->sta_poll_list)) { -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +if (list_empty (&dev->mt76.sta_poll_list)) { +spin_unlock_bh (&dev->mt76.sta_poll_lock);break ; } - msta = list_first_entry(&dev->sta_poll_list, struct mt7603_sta, - poll_list); + msta =list_first_entry (&dev->mt76.sta_poll_list, + struct mt7603_sta, poll_list);list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); addr =mt7603_wtbl4_addr (msta->wcid.idx);for (i =0 ; i <4 ; i++) {
@@ -1268,9 +1268,9 @@ void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data) sta =wcid_to_sta (wcid);if (list_empty (&msta->poll_list)) { -spin_lock_bh (&dev->sta_poll_lock); -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); }if (mt7603_mac_add_txs_skb (dev, msta, pid, txs_data))
drivers/net/wireless/mediatek/mt76/mt7603/main.c +4 -4
@@ -100,10 +100,10 @@ mt7603_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)rcu_assign_pointer (dev->mt76.wcid[idx],NULL ); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mutex_lock (&dev->mt76.mutex); dev->mt76.vif_mask &= ~BIT_ULL (mvif->idx);
@@ -388,10 +388,10 @@ mt7603_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7603_filter_tx (dev, wcid->idx, true);spin_unlock_bh (&dev->ps_lock); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock);mt7603_wtbl_clear (dev, wcid->idx); }
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +0 -3
@@ -110,9 +110,6 @@ struct mt7603_dev {u32 rxfilter; -struct list_head sta_poll_list; -spinlock_t sta_poll_lock; -struct mt7603_sta global_sta;u32 agc0, agc3;
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 4/13 wifi: mt76: mt7615: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiRely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies.
--- .../net/wireless/mediatek/mt76/mt7615/init.c | 2 -- .../net/wireless/mediatek/mt76/mt7615/mac.c | 19 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7615/main.c | 8 ++++---- .../wireless/mediatek/mt76/mt7615/mt7615.h | 3 --- 4 files changed, 14 insertions(+), 18 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/init.c +0 -2
@@ -626,8 +626,6 @@ void mt7615_init_device(struct mt7615_dev *dev)INIT_DELAYED_WORK (&dev->coredump.work, mt7615_coredump_work);skb_queue_head_init (&dev->phy.scan_event_list);skb_queue_head_init (&dev->coredump.msg_list); -INIT_LIST_HEAD (&dev->sta_poll_list); -spin_lock_init (&dev->sta_poll_lock);init_waitqueue_head (&dev->reset_wait);init_waitqueue_head (&dev->phy.roc_wait);
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +10 -9
@@ -387,10 +387,11 @@ static int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb)struct mt7615_sta *msta; msta = container_of(status->wcid, struct mt7615_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } if (mt76_is_mmio(&dev->mt76) && (rxd0 & csum_mask) == csum_mask &&
@@ -905,9 +906,9 @@ void mt7615_mac_sta_poll(struct mt7615_dev *dev)int i;INIT_LIST_HEAD (&sta_poll_list); -spin_lock_bh (&dev->sta_poll_lock); -list_splice_init (&dev->sta_poll_list, &sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_splice_init (&dev->mt76.sta_poll_list, &sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);while (!list_empty (&sta_poll_list)) {bool clear = false;
@@ -1539,10 +1540,10 @@ static void mt7615_mac_add_txs(struct mt7615_dev *dev, void *data) msta = container_of(wcid, struct mt7615_sta, wcid); sta =wcid_to_sta (wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);if (mt7615_mac_add_txs_skb (dev, msta, pid, txs_data)) goto out;
drivers/net/wireless/mediatek/mt76/mt7615/main.c +4 -4
@@ -274,10 +274,10 @@ static void mt7615_remove_interface(struct ieee80211_hw *hw,mt7615_mutex_release (dev); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &mvif->sta.wcid); }
@@ -677,10 +677,10 @@ void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (vif->type ==NL80211_IFTYPE_STATION && !sta->tdls)mt7615_mcu_add_bss_info (phy, vif, sta, false); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock);mt76_connac_power_save_sched (phy->mt76, &dev->pm); }
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0 -3
@@ -262,9 +262,6 @@ struct mt7615_dev {wait_queue_head_t reset_wait;u32 reset_state; -struct list_head sta_poll_list; -spinlock_t sta_poll_lock; -struct {u8 n_pulses;u32 period;
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 5/13 wifi: mt76: mt7996: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiRely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies.
--- .../net/wireless/mediatek/mt76/mt7996/init.c | 2 - .../net/wireless/mediatek/mt76/mt7996/mac.c | 40 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7996/main.c | 12 +++--- .../wireless/mediatek/mt76/mt7996/mt7996.h | 2 - 4 files changed, 27 insertions(+), 29 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7996/init.c +0 -2
@@ -853,9 +853,7 @@ int mt7996_register_device(struct mt7996_dev *dev)INIT_WORK (&dev->rc_work, mt7996_mac_sta_rc_work);INIT_DELAYED_WORK (&dev->mphy.mac_work, mt7996_mac_work);INIT_LIST_HEAD (&dev->sta_rc_list); -INIT_LIST_HEAD (&dev->sta_poll_list);INIT_LIST_HEAD (&dev->twt_list); -spin_lock_init (&dev->sta_poll_lock);init_waitqueue_head (&dev->reset_wait);INIT_WORK (&dev->reset_work, mt7996_mac_reset_work);
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +21 -19
@@ -111,9 +111,9 @@ static void mt7996_mac_sta_poll(struct mt7996_dev *dev)LIST_HEAD (sta_poll_list);int i; -spin_lock_bh (&dev->sta_poll_lock); -list_splice_init (&dev->sta_poll_list, &sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_splice_init (&dev->mt76.sta_poll_list, &sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);rcu_read_lock ();
@@ -124,15 +124,15 @@ static void mt7996_mac_sta_poll(struct mt7996_dev *dev)s8 rssi[4 ];u8 bw; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&sta_poll_list)) { -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);break ; } msta =list_first_entry (&sta_poll_list, struct mt7996_sta, poll_list);list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx;
@@ -681,10 +681,11 @@ mt7996_mac_fill_rx(struct mt7996_dev *dev, struct sk_buff *skb)struct mt7996_sta *msta; msta = container_of(status->wcid, struct mt7996_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } status->freq = mphy->chandef.chan->center_freq;
@@ -1281,10 +1282,11 @@ mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len)continue ; msta = container_of(wcid, struct mt7996_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &mdev->sta_poll_list); +spin_unlock_bh (&mdev->sta_poll_lock);continue ; }
@@ -1488,10 +1490,10 @@ static void mt7996_mac_add_txs(struct mt7996_dev *dev, void *data)if (!wcid->sta) goto out; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); out:rcu_read_unlock ();
@@ -2334,7 +2336,7 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)u32 changed;LIST_HEAD (list); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);list_splice_init (&dev->sta_rc_list, &list);while (!list_empty (&list)) {
@@ -2342,7 +2344,7 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)list_del_init (&msta->rc_list); changed = msta->changed; msta->changed =0 ; -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); sta = container_of((void *)msta, struct ieee80211_sta, drv_priv); vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
@@ -2354,10 +2356,10 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)/* TODO: smps change */ -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); } -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); }void mt7996_mac_work (struct work_struct *work)
drivers/net/wireless/mediatek/mt76/mt7996/main.c +6 -6
@@ -262,10 +262,10 @@ static void mt7996_remove_interface(struct ieee80211_hw *hw, phy->omac_mask &= ~BIT_ULL (mvif->mt76.omac_idx);mutex_unlock (&dev->mt76.mutex); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid); }
@@ -667,12 +667,12 @@ void mt7996_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,for (i =0 ; i <ARRAY_SIZE (msta->twt.flow); i++)mt7996_mac_twt_teardown_flow (dev, msta, i); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list);if (!list_empty (&msta->rc_list))list_del_init (&msta->rc_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock); } static void mt7996_tx(struct ieee80211_hw *hw,
@@ -982,11 +982,11 @@ static void mt7996_sta_rc_work(void *data, struct ieee80211_sta *sta)struct mt7996_dev *dev = msta->vif->phy->dev;u32 *changed = data; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); msta->changed |= *changed;if (list_empty (&msta->rc_list))list_add_tail (&msta->rc_list, &dev->sta_rc_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } static void mt7996_sta_rc_update(struct ieee80211_hw *hw,
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +0 -2
@@ -272,9 +272,7 @@ struct mt7996_dev {#endif struct list_head sta_rc_list; -struct list_head sta_poll_list;struct list_head twt_list; -spinlock_t sta_poll_lock;u32 hw_pattern;
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 6/13 wifi: mt76: mt7921: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiRely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies.
--- .../net/wireless/mediatek/mt76/mt7921/init.c | 2 -- .../net/wireless/mediatek/mt76/mt7921/mac.c | 32 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7921/main.c | 8 ++--- .../wireless/mediatek/mt76/mt7921/mt7921.h | 3 -- 4 files changed, 21 insertions(+), 24 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/init.c +0 -2
@@ -392,8 +392,6 @@ int mt7921_register_device(struct mt7921_dev *dev)#endif skb_queue_head_init (&dev->phy.scan_event_list);skb_queue_head_init (&dev->coredump.msg_list); -INIT_LIST_HEAD (&dev->sta_poll_list); -spin_lock_init (&dev->sta_poll_lock);INIT_WORK (&dev->reset_work, mt7921_mac_reset_work);INIT_WORK (&dev->init_work, mt7921_init_work);
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +17 -15
@@ -68,9 +68,9 @@ static void mt7921_mac_sta_poll(struct mt7921_dev *dev)s8 rssi[4 ];int i; -spin_lock_bh (&dev->sta_poll_lock); -list_splice_init (&dev->sta_poll_list, &sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_splice_init (&dev->mt76.sta_poll_list, &sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);while (true) {bool clear = false;
@@ -78,15 +78,15 @@ static void mt7921_mac_sta_poll(struct mt7921_dev *dev)u16 idx;u8 bw; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&sta_poll_list)) { -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);break ; } msta =list_first_entry (&sta_poll_list, struct mt7921_sta, poll_list);list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx; addr =mt7921_mac_wtbl_lmac_addr (idx,MT_WTBL_AC0_CTT_OFFSET );
@@ -280,10 +280,11 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)if (status->wcid) { msta = container_of(status->wcid, struct mt7921_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); }mt7921_get_status_freq_info (dev, mphy, status, chfreq);
@@ -566,10 +567,10 @@ void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data)if (!wcid->sta) goto out; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); out:rcu_read_unlock ();
@@ -647,10 +648,11 @@ static void mt7921_mac_tx_free(struct mt7921_dev *dev, void *data, int len)continue ; msta = container_of(wcid, struct mt7921_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &mdev->sta_poll_list); +spin_unlock_bh (&mdev->sta_poll_lock);continue ; }
drivers/net/wireless/mediatek/mt76/mt7921/main.c +4 -4
@@ -357,10 +357,10 @@ static void mt7921_remove_interface(struct ieee80211_hw *hw, phy->omac_mask &= ~BIT_ULL (mvif->mt76.omac_idx);mt7921_mutex_release (dev); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid); }
@@ -843,10 +843,10 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, mvif->ctx); } -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_connac_power_save_sched (&dev->mphy, &dev->pm); }
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -3
@@ -304,9 +304,6 @@ struct mt7921_dev { bool hw_init_done:1; bool fw_assert:1; -struct list_head sta_poll_list; -spinlock_t sta_poll_lock; -struct work_struct init_work;u8 fw_debug;
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 7/13 wifi: mt76: mt7915: move poll_list in mt76_wcid
In reply to Lorenzo Bianconipoll_list field is used by most of the drivers, so move it in mt76_wcid structure.
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ .../net/wireless/mediatek/mt76/mt7915/mac.c | 20 +++++++++---------- .../net/wireless/mediatek/mt76/mt7915/main.c | 12 +++++------ .../wireless/mediatek/mt76/mt7915/mt7915.h | 1 - 4 files changed, 18 insertions(+), 17 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -336,6 +336,8 @@ struct mt76_wcid {struct idr pktid;struct mt76_sta_stats stats; + +struct list_head poll_list; };struct mt76_txq {
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +10 -10
@@ -124,8 +124,8 @@ static void mt7915_mac_sta_poll(struct mt7915_dev *dev)break ; } msta =list_first_entry (&sta_poll_list, - struct mt7915_sta, poll_list); -list_del_init (&msta->poll_list); + struct mt7915_sta, wcid.poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx;
@@ -327,8 +327,8 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb,if (status->wcid) { msta = container_of(status->wcid, struct mt7915_sta, wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
@@ -894,8 +894,8 @@ mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t, sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);spin_lock_bh (&mdev->sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &mdev->sta_poll_list);spin_unlock_bh (&mdev->sta_poll_lock); }
@@ -990,8 +990,8 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len) msta = container_of(wcid, struct mt7915_sta, wcid);spin_lock_bh (&mdev->sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &mdev->sta_poll_list);spin_unlock_bh (&mdev->sta_poll_lock);continue ;
@@ -1085,8 +1085,8 @@ static void mt7915_mac_add_txs(struct mt7915_dev *dev, void *data) goto out;spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); out:
drivers/net/wireless/mediatek/mt76/mt7915/main.c +6 -6
@@ -248,7 +248,7 @@ static int mt7915_add_interface(struct ieee80211_hw *hw, idx =MT7915_WTBL_RESERVED - mvif->mt76.idx;INIT_LIST_HEAD (&mvif->sta.rc_list); -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.phy_idx = ext_phy; mvif->sta.wcid.hw_key_idx =-1 ;
@@ -309,8 +309,8 @@ static void mt7915_remove_interface(struct ieee80211_hw *hw,mutex_unlock (&dev->mt76.mutex);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid);
@@ -680,7 +680,7 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,return -ENOSPC ;INIT_LIST_HEAD (&msta->rc_list); -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list); msta->vif = mvif; msta->wcid.sta =1 ; msta->wcid.idx = idx;
@@ -716,8 +716,8 @@ void mt7915_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7915_mac_twt_teardown_flow (dev, msta, i);spin_lock_bh (&mdev->sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);if (!list_empty (&msta->rc_list))list_del_init (&msta->rc_list);spin_unlock_bh (&mdev->sta_poll_lock);
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -1
@@ -129,7 +129,6 @@ struct mt7915_sta {struct mt7915_vif *vif; -struct list_head poll_list;struct list_head rc_list;u32 airtime_ac[8 ];
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 8/13 wifi: mt76: mt7603: rely on shared poll_list field
In reply to Lorenzo BianconiRely on poll_list field in mt76_wcid structure and get rid of private copy.
--- drivers/net/wireless/mediatek/mt76/mt7603/mac.c | 8 ++++---- drivers/net/wireless/mediatek/mt76/mt7603/main.c | 12 ++++++------ drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h | 1 - 3 files changed, 10 insertions(+), 11 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7603/mac.c +4 -4
@@ -419,8 +419,8 @@ void mt7603_mac_sta_poll(struct mt7603_dev *dev) } msta =list_first_entry (&dev->mt76.sta_poll_list, - struct mt7603_sta, poll_list); -list_del_init (&msta->poll_list); + struct mt7603_sta, wcid.poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); addr =mt7603_wtbl4_addr (msta->wcid.idx);
@@ -1267,9 +1267,9 @@ void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data) msta = container_of(wcid, struct mt7603_sta, wcid); sta =wcid_to_sta (wcid); -if (list_empty (&msta->poll_list)) { +if (list_empty (&msta->wcid.poll_list)) {spin_lock_bh (&dev->mt76.sta_poll_lock); -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
drivers/net/wireless/mediatek/mt76/mt7603/main.c +6 -6
@@ -66,7 +66,7 @@ mt7603_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) idx =MT7603_WTBL_RESERVED -1 - mvif->idx; dev->mt76.vif_mask |=BIT_ULL (mvif->idx); -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.hw_key_idx =-1 ;mt76_packet_id_init (&mvif->sta.wcid);
@@ -101,8 +101,8 @@ mt7603_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)rcu_assign_pointer (dev->mt76.wcid[idx],NULL );spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mutex_lock (&dev->mt76.mutex);
@@ -351,7 +351,7 @@ mt7603_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (idx <0 )return -ENOSPC ; -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list);__skb_queue_head_init (&msta->psq); msta->ps = ~0 ; msta->smps = ~0 ;
@@ -389,8 +389,8 @@ mt7603_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,spin_unlock_bh (&dev->ps_lock);spin_lock_bh (&mdev->sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&mdev->sta_poll_lock);mt7603_wtbl_clear (dev, wcid->idx);
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +0 -1
@@ -64,7 +64,6 @@ struct mt7603_sta {struct mt7603_vif *vif; -struct list_head poll_list;u32 tx_airtime_ac[4 ];struct sk_buff_head psq;
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 9/13 wifi: mt76: mt7615: rely on shared poll_list field
In reply to Lorenzo BianconiRely on poll_list field in mt76_wcid structure and get rid of private copy.
--- drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 12 ++++++------ drivers/net/wireless/mediatek/mt76/mt7615/main.c | 12 ++++++------ drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h | 1 - 3 files changed, 12 insertions(+), 13 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +6 -6
@@ -388,8 +388,8 @@ static int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb) msta = container_of(status->wcid, struct mt7615_sta, wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
@@ -914,8 +914,8 @@ void mt7615_mac_sta_poll(struct mt7615_dev *dev)bool clear = false; msta = list_first_entry(&sta_poll_list, struct mt7615_sta, - poll_list); -list_del_init (&msta->poll_list); + wcid.poll_list); +list_del_init (&msta->wcid.poll_list); addr =mt7615_mac_wtbl_addr (dev, msta->wcid.idx) +19 *4 ;
@@ -1541,8 +1541,8 @@ static void mt7615_mac_add_txs(struct mt7615_dev *dev, void *data) sta =wcid_to_sta (wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);if (mt7615_mac_add_txs_skb (dev, msta, pid, txs_data))
drivers/net/wireless/mediatek/mt76/mt7615/main.c +6 -6
@@ -222,7 +222,7 @@ static int mt7615_add_interface(struct ieee80211_hw *hw, idx =MT7615_WTBL_RESERVED - mvif->mt76.idx; -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.phy_idx = mvif->mt76.band_idx; mvif->sta.wcid.hw_key_idx =-1 ;
@@ -275,8 +275,8 @@ static void mt7615_remove_interface(struct ieee80211_hw *hw,mt7615_mutex_release (dev);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &mvif->sta.wcid);
@@ -629,7 +629,7 @@ int mt7615_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (idx <0 )return -ENOSPC ; -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list); msta->vif = mvif; msta->wcid.sta =1 ; msta->wcid.idx = idx;
@@ -678,8 +678,8 @@ void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7615_mcu_add_bss_info (phy, vif, sta, false);spin_lock_bh (&mdev->sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&mdev->sta_poll_lock);mt76_connac_power_save_sched (phy->mt76, &dev->pm);
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0 -1
@@ -125,7 +125,6 @@ struct mt7615_sta {struct mt7615_vif *vif; -struct list_head poll_list;u32 airtime_ac[8 ];struct ieee80211_tx_rate rates[4 ];
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 10/13 wifi: mt76: mt7996: rely on shared poll_list field
In reply to Lorenzo BianconiRely on poll_list field in mt76_wcid structure and get rid of private copy.
--- drivers/net/wireless/mediatek/mt76/mt7996/mac.c | 16 ++++++++-------- drivers/net/wireless/mediatek/mt76/mt7996/main.c | 12 ++++++------ .../net/wireless/mediatek/mt76/mt7996/mt7996.h | 1 - 3 files changed, 14 insertions(+), 15 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +8 -8
@@ -130,8 +130,8 @@ static void mt7996_mac_sta_poll(struct mt7996_dev *dev)break ; } msta =list_first_entry (&sta_poll_list, - struct mt7996_sta, poll_list); -list_del_init (&msta->poll_list); + struct mt7996_sta, wcid.poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx;
@@ -682,8 +682,8 @@ mt7996_mac_fill_rx(struct mt7996_dev *dev, struct sk_buff *skb) msta = container_of(status->wcid, struct mt7996_sta, wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
@@ -1283,8 +1283,8 @@ mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len) msta = container_of(wcid, struct mt7996_sta, wcid);spin_lock_bh (&mdev->sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &mdev->sta_poll_list);spin_unlock_bh (&mdev->sta_poll_lock);continue ;
@@ -1491,8 +1491,8 @@ static void mt7996_mac_add_txs(struct mt7996_dev *dev, void *data) goto out;spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); out:
drivers/net/wireless/mediatek/mt76/mt7996/main.c +6 -6
@@ -200,7 +200,7 @@ static int mt7996_add_interface(struct ieee80211_hw *hw, idx =MT7996_WTBL_RESERVED - mvif->mt76.idx;INIT_LIST_HEAD (&mvif->sta.rc_list); -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.phy_idx = band_idx; mvif->sta.wcid.hw_key_idx =-1 ;
@@ -263,8 +263,8 @@ static void mt7996_remove_interface(struct ieee80211_hw *hw,mutex_unlock (&dev->mt76.mutex);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid);
@@ -632,7 +632,7 @@ int mt7996_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,return -ENOSPC ;INIT_LIST_HEAD (&msta->rc_list); -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list); msta->vif = mvif; msta->wcid.sta =1 ; msta->wcid.idx = idx;
@@ -668,8 +668,8 @@ void mt7996_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7996_mac_twt_teardown_flow (dev, msta, i);spin_lock_bh (&mdev->sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);if (!list_empty (&msta->rc_list))list_del_init (&msta->rc_list);spin_unlock_bh (&mdev->sta_poll_lock);
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +0 -1
@@ -95,7 +95,6 @@ struct mt7996_sta {struct mt7996_vif *vif; -struct list_head poll_list;struct list_head rc_list;u32 airtime_ac[8 ];
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 11/13 wifi: mt76: mt7921: rely on shared poll_list field
In reply to Lorenzo BianconiRely on poll_list field in mt76_wcid structure and get rid of private copy.
--- drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 16 ++++++++-------- drivers/net/wireless/mediatek/mt76/mt7921/main.c | 12 ++++++------ .../net/wireless/mediatek/mt76/mt7921/mt7921.h | 1 - 3 files changed, 14 insertions(+), 15 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +8 -8
@@ -84,8 +84,8 @@ static void mt7921_mac_sta_poll(struct mt7921_dev *dev)break ; } msta =list_first_entry (&sta_poll_list, - struct mt7921_sta, poll_list); -list_del_init (&msta->poll_list); + struct mt7921_sta, wcid.poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx;
@@ -281,8 +281,8 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)if (status->wcid) { msta = container_of(status->wcid, struct mt7921_sta, wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
@@ -568,8 +568,8 @@ void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data) goto out;spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); out:
@@ -649,8 +649,8 @@ static void mt7921_mac_tx_free(struct mt7921_dev *dev, void *data, int len) msta = container_of(wcid, struct mt7921_sta, wcid);spin_lock_bh (&mdev->sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &mdev->sta_poll_list);spin_unlock_bh (&mdev->sta_poll_lock);continue ;
drivers/net/wireless/mediatek/mt76/mt7921/main.c +6 -6
@@ -313,7 +313,7 @@ static int mt7921_add_interface(struct ieee80211_hw *hw, idx =MT7921_WTBL_RESERVED - mvif->mt76.idx; -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.phy_idx = mvif->mt76.band_idx; mvif->sta.wcid.hw_key_idx =-1 ;
@@ -358,8 +358,8 @@ static void mt7921_remove_interface(struct ieee80211_hw *hw,mt7921_mutex_release (dev);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid);
@@ -765,7 +765,7 @@ int mt7921_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (idx <0 )return -ENOSPC ; -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list); msta->vif = mvif; msta->wcid.sta =1 ; msta->wcid.idx = idx;
@@ -844,8 +844,8 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, }spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_connac_power_save_sched (&dev->mphy, &dev->pm);
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -1
@@ -151,7 +151,6 @@ struct mt7921_sta {struct mt7921_vif *vif; -struct list_head poll_list;u32 airtime_ac[8 ];int ack_signal;
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 12/13 wifi: mt76: move ampdu_state in mt76_wcid
In reply to Lorenzo Bianconiampdu_state field is used by most of the drivers, so move it in mt76_wcid structure.
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7915/main.c | 6 +++--- drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h | 1 - drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7921/main.c | 6 +++--- drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h | 1 - drivers/net/wireless/mediatek/mt76/mt7996/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7996/main.c | 6 +++--- drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h | 1 - 10 files changed, 13 insertions(+), 15 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -316,6 +316,7 @@ struct mt76_wcid {int inactive_count;struct rate_info rate; +unsigned long ampdu_state;u16 idx;u8 hw_key_idx;
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +1 -1
@@ -863,7 +863,7 @@ mt7915_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)return ; msta = (struct mt7915_sta *)sta->drv_priv; -if (!test_and_set_bit (tid, &msta->ampdu_state)) +if (!test_and_set_bit (tid, &msta->wcid.ampdu_state))ieee80211_start_tx_ba_session (sta, tid,0 ); }
drivers/net/wireless/mediatek/mt76/mt7915/main.c +3 -3
@@ -802,16 +802,16 @@ mt7915_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,case IEEE80211_AMPDU_TX_STOP_FLUSH :case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state); ret =mt7915_mcu_add_tx_ba (dev, params, false);break ;case IEEE80211_AMPDU_TX_START : -set_bit (tid, &msta->ampdu_state); +set_bit (tid, &msta->wcid.ampdu_state); ret =IEEE80211_AMPDU_TX_START_IMMEDIATE ;break ;case IEEE80211_AMPDU_TX_STOP_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state); ret =mt7915_mcu_add_tx_ba (dev, params, false);ieee80211_stop_tx_ba_cb_irqsafe (vif, sta->addr, tid);break ;
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -1
@@ -137,7 +137,6 @@ struct mt7915_sta {unsigned long changed;unsigned long jiffies; -unsigned long ampdu_state;struct mt76_connac_sta_key_conf bip;struct {
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +1 -1
@@ -531,7 +531,7 @@ static void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)return ; msta = (struct mt7921_sta *)sta->drv_priv; -if (!test_and_set_bit (tid, &msta->ampdu_state)) +if (!test_and_set_bit (tid, &msta->wcid.ampdu_state))ieee80211_start_tx_ba_session (sta, tid,0 ); }
drivers/net/wireless/mediatek/mt76/mt7921/main.c +3 -3
@@ -955,16 +955,16 @@ mt7921_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,case IEEE80211_AMPDU_TX_STOP_FLUSH :case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state);mt7921_mcu_uni_tx_ba (dev, params, false);break ;case IEEE80211_AMPDU_TX_START : -set_bit (tid, &msta->ampdu_state); +set_bit (tid, &msta->wcid.ampdu_state); ret =IEEE80211_AMPDU_TX_START_IMMEDIATE ;break ;case IEEE80211_AMPDU_TX_STOP_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state);mt7921_mcu_uni_tx_ba (dev, params, false);ieee80211_stop_tx_ba_cb_irqsafe (vif, sta->addr, tid);break ;
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -1
@@ -157,7 +157,6 @@ struct mt7921_sta {struct ewma_avg_signal avg_ack_signal;unsigned long last_txs; -unsigned long ampdu_state;struct mt76_connac_sta_key_conf bip; };
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +1 -1
@@ -1194,7 +1194,7 @@ mt7996_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)return ; msta = (struct mt7996_sta *)sta->drv_priv; -if (!test_and_set_bit (tid, &msta->ampdu_state)) +if (!test_and_set_bit (tid, &msta->wcid.ampdu_state))ieee80211_start_tx_ba_session (sta, tid,0 ); }
drivers/net/wireless/mediatek/mt76/mt7996/main.c +3 -3
@@ -752,16 +752,16 @@ mt7996_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,case IEEE80211_AMPDU_TX_STOP_FLUSH :case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state); ret =mt7996_mcu_add_tx_ba (dev, params, false);break ;case IEEE80211_AMPDU_TX_START : -set_bit (tid, &msta->ampdu_state); +set_bit (tid, &msta->wcid.ampdu_state); ret =IEEE80211_AMPDU_TX_START_IMMEDIATE ;break ;case IEEE80211_AMPDU_TX_STOP_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state); ret =mt7996_mcu_add_tx_ba (dev, params, false);ieee80211_stop_tx_ba_cb_irqsafe (vif, sta->addr, tid);break ;
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +0 -1
@@ -103,7 +103,6 @@ struct mt7996_sta {unsigned long changed;unsigned long jiffies; -unsigned long ampdu_state;struct mt76_sta_stats stats;
Signature · 1 line
2.40.1
Lorenzo Bianconi
maintainerPATCH 13/13 mt76: connac: move more mt7921/mt7915 mac shared code in connac lib
In reply to Lorenzo BianconiMove the following routines in mt76-connac lib since they are shared between mt7915 and mt7921:
- mt76_connac2_tx_check_aggr
- mt76_connac2_txwi_free
- mt76_connac2_tx_token_put
--- .../net/wireless/mediatek/mt76/mt76_connac.h | 5 + .../wireless/mediatek/mt76/mt76_connac_mac.c | 82 +++++++++++++++++ .../net/wireless/mediatek/mt76/mt7915/init.c | 2 +- .../net/wireless/mediatek/mt76/mt7915/mac.c | 91 +------------------ .../wireless/mediatek/mt76/mt7915/mt7915.h | 1 - .../net/wireless/mediatek/mt76/mt7921/mac.c | 59 +----------- .../wireless/mediatek/mt76/mt7921/mt7921.h | 4 - .../net/wireless/mediatek/mt76/mt7921/pci.c | 2 +- .../wireless/mediatek/mt76/mt7921/pci_mac.c | 16 +--- 9 files changed, 96 insertions(+), 166 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac.h +5 -0
@@ -409,5 +409,10 @@ int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,struct mt76_rx_status *status, struct ieee80211_supported_band *sband, __le32 *rxv, u8 *mode); +void mt76_connac2_tx_check_aggr (struct ieee80211_sta *sta,__le32 *txwi); +void mt76_connac2_txwi_free (struct mt76_dev *dev,struct mt76_txwi_cache *t, +struct ieee80211_sta *sta, +struct list_head *free_list); +void mt76_connac2_tx_token_put (struct mt76_dev *dev);#endif /* __MT76_CONNAC_H */
drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c +82 -0
85 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/init.c +1 -1
@@ -1158,7 +1158,7 @@ static void mt7915_unregister_ext_phy(struct mt7915_dev *dev)static void mt7915_stop_hardware (struct mt7915_dev *dev) {mt7915_mcu_exit (dev); -mt7915_tx_token_put (dev); +mt76_connac2_tx_token_put (&dev->mt76);mt7915_dma_cleanup (dev);tasklet_disable (&dev->mt76.irq_tasklet);
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +4 -87
127 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -1
@@ -608,7 +608,6 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, enum mt76_txq_id qid, struct mt76_wcid *wcid, struct ieee80211_sta *sta, struct mt76_tx_info *tx_info); -void mt7915_tx_token_put (struct mt7915_dev *dev);void mt7915_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb,u32 *info);bool mt7915_rx_check (struct mt76_dev *mdev,void *data,int len);
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +2 -57
83 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -4
@@ -472,7 +472,6 @@ int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, struct mt76_tx_info *tx_info);void mt7921_tx_worker (struct mt76_worker *w); -void mt7921_tx_token_put (struct mt7921_dev *dev);bool mt7921_rx_check (struct mt76_dev *mdev,void *data,int len);void mt7921_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb,u32 *info);
@@ -505,9 +504,6 @@ int mt7921_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif, void *data, int len);int mt7921_testmode_dump (struct ieee80211_hw *hw,struct sk_buff *msg,struct netlink_callback *cb,void *data,int len); -void mt7921_txwi_free (struct mt7921_dev *dev,struct mt76_txwi_cache *t, -struct ieee80211_sta *sta,bool clear_status, -struct list_head *free_list);int mt7921_mcu_parse_response (struct mt76_dev *mdev,int cmd,struct sk_buff *skb,int seq);
drivers/net/wireless/mediatek/mt76/mt7921/pci.c +1 -1
@@ -115,7 +115,7 @@ static void mt7921e_unregister_device(struct mt7921_dev *dev)cancel_work_sync (&pm->wake_work);cancel_work_sync (&dev->reset_work); -mt7921_tx_token_put (dev); +mt76_connac2_tx_token_put (&dev->mt76);__mt7921_mcu_drv_pmctrl (dev);mt7921_dma_cleanup (dev);mt7921_wfsys_reset (dev);
drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c +1 -15
@@ -53,20 +53,6 @@ int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,return 0 ; } -void mt7921_tx_token_put (struct mt7921_dev *dev) -{ -struct mt76_txwi_cache *txwi; -int id; - -spin_lock_bh (&dev->mt76.token_lock); -idr_for_each_entry (&dev->mt76.token, txwi, id) { -mt7921_txwi_free (dev, txwi,NULL , false,NULL ); - dev->mt76.token_count--; - } -spin_unlock_bh (&dev->mt76.token_lock); -idr_destroy (&dev->mt76.token); -} -int mt7921e_mac_reset (struct mt7921_dev *dev) {int i, err;
@@ -91,7 +77,7 @@ int mt7921e_mac_reset(struct mt7921_dev *dev)napi_disable (&dev->mt76.napi[MT_RXQ_MCU_WA ]);napi_disable (&dev->mt76.tx_napi); -mt7921_tx_token_put (dev); +mt76_connac2_tx_token_put (&dev->mt76);idr_init (&dev->mt76.token);mt7921_wpdma_reset (dev, true);
Signature · 1 line
2.40.1
kernel test robot
build botRe: [PATCH 13/13] mt76: connac: move more mt7921/mt7915 mac shared code in connac lib
kernel test robot noticed the following build warnings:
Hi Lorenzo,
kernel test robot noticed the following build warnings:
[auto build test WARNING on wireless-next/main]
[also build test WARNING on linus/master v6.4-rc4 next-20230525] [cannot apply to wireless/main]
[If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lorenzo-Bianconi/wifi-mt76-mt7921-make-mt7921_mac_sta_poll-static/20230529-184437 base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main patch link: https://lore.kernel.org/r/bede71605cbf2d62a1af6474f9fa1e37b302f7bc.1685356673.git.lorenzo%40kernel.org patch subject: [PATCH 13/13] mt76: connac: move more mt7921/mt7915 mac shared code in connac lib config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20230529/[email protected]/config) compiler: m68k-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
mkdir -p ~/bin
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/9b6f7373c4696853d7051a6dbe8f6ed4236537e6
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Lorenzo-Bianconi/wifi-mt76-mt7921-make-mt7921_mac_sta_poll-static/20230529-184437 git checkout 9b6f7373c4696853d7051a6dbe8f6ed4236537e6
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 ~/bin/make.cross W=1 O=build_dir ARCH=m68k olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 ~/bin/make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash drivers/net/wireless/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All warnings (new ones prefixed by >>):
drivers/net/wireless/mediatek/mt76/mt7921/mac.c: In function 'mt7921_mac_tx_free':
>> drivers/net/wireless/mediatek/mt76/mt7921/mac.c:578:20: warning: variable 'stat' set but not used [-Wunused-but-set-variable]
578 | u8 stat;
| ^~~~vim +/stat +578 drivers/net/wireless/mediatek/mt76/mt7921/mac.c
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 554
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 555 static void mt7921_mac_tx_free(struct mt7921_dev *dev, void *data, int len)
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 556 {
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 557 struct mt76_connac_tx_free *free = data;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 558 __le32 *tx_info = (__le32 *)(data + sizeof(*free));
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 559 struct mt76_dev *mdev = &dev->mt76;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 560 struct mt76_txwi_cache *txwi;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 561 struct ieee80211_sta *sta = NULL;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 562 struct sk_buff *skb, *tmp;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 563 void *end = data + len;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 564 LIST_HEAD(free_list);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 565 bool wake = false;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 566 u8 i, count;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 567
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 568 /* clean DMA queues and unmap buffers first */
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 569 mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 570 mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 571
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 572 count = le16_get_bits(free->ctrl, MT_TX_FREE_MSDU_CNT);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 573 if (WARN_ON_ONCE((void *)&tx_info[count] > end))
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 574 return;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 575
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 576 for (i = 0; i < count; i++) {
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 577 u32 msdu, info = le32_to_cpu(tx_info[i]);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 @578 u8 stat;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 579
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 580 /* 1'b1: new wcid pair.
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 581 * 1'b0: msdu_id with the same 'wcid pair' as above.
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 582 */
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 583 if (info & MT_TX_FREE_PAIR) {
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 584 struct mt7921_sta *msta;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 585 struct mt76_wcid *wcid;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 586 u16 idx;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 587
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 588 count++;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 589 idx = FIELD_GET(MT_TX_FREE_WLAN_ID, info);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 590 wcid = rcu_dereference(dev->mt76.wcid[idx]);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 591 sta = wcid_to_sta(wcid);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 592 if (!sta)
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 593 continue;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 594
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 595 msta = container_of(wcid, struct mt7921_sta, wcid);
490de0b91a76e9 Lorenzo Bianconi 2023-05-29 596 spin_lock_bh(&mdev->sta_poll_lock);
a3b4f9505c59d1 Lorenzo Bianconi 2023-05-29 597 if (list_empty(&msta->wcid.poll_list))
a3b4f9505c59d1 Lorenzo Bianconi 2023-05-29 598 list_add_tail(&msta->wcid.poll_list,
490de0b91a76e9 Lorenzo Bianconi 2023-05-29 599 &mdev->sta_poll_list);
490de0b91a76e9 Lorenzo Bianconi 2023-05-29 600 spin_unlock_bh(&mdev->sta_poll_lock);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 601 continue;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 602 }
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 603
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 604 msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 605 stat = FIELD_GET(MT_TX_FREE_STATUS, info);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 606
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 607 txwi = mt76_token_release(mdev, msdu, &wake);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 608 if (!txwi)
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 609 continue;
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 610
9b6f7373c46968 Lorenzo Bianconi 2023-05-29 611 mt76_connac2_txwi_free(mdev, txwi, sta, &free_list);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 612 }
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 613
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 614 if (wake)
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 615 mt76_set_tx_blocked(&dev->mt76, false);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 616
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 617 list_for_each_entry_safe(skb, tmp, &free_list, list) {
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 618 skb_list_del_init(skb);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 619 napi_consume_skb(skb, 1);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 620 }
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 621
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 622 rcu_read_lock();
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 623 mt7921_mac_sta_poll(dev);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 624 rcu_read_unlock();
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 625
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 626 mt76_worker_schedule(&dev->mt76.tx_worker);
0af1ad955919a7 Lorenzo Bianconi 2022-07-21 627 }
273910ac437523 Lorenzo Bianconi 2021-09-04 628 Signature · 2 lines
0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
Re: [PATCH 04/13] wifi: mt76: mt7615: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiHi,
Quoted 105 lines · Lorenzo Bianconi
Rely on
sta_poll_listandsta_poll_lockfields inmt76_devstructure and get rid of private copies.Signed-off-by Lorenzo Bianconi <[email protected]>--- .../net/wireless/mediatek/mt76/mt7615/init.c | 2 -- .../net/wireless/mediatek/mt76/mt7615/mac.c | 19 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7615/main.c | 8 ++++---- .../wireless/mediatek/mt76/mt7615/mt7615.h | 3 --- 4 files changed, 14 insertions(+), 18 deletions(-)drivers/net/wireless/mediatek/mt76/mt7615/init.c +0
-2@@ -626,8 +626,6 @@ void mt7615_init_device(struct mt7615_dev *dev)INIT_DELAYED_WORK (&dev->coredump.work, mt7615_coredump_work);skb_queue_head_init (&dev->phy.scan_event_list);skb_queue_head_init (&dev->coredump.msg_list); -INIT_LIST_HEAD (&dev->sta_poll_list); -spin_lock_init (&dev->sta_poll_lock);init_waitqueue_head (&dev->reset_wait);init_waitqueue_head (&dev->phy.roc_wait);drivers/net/wireless/mediatek/mt76/mt7615/mac.c +10
-9@@ -387,10 +387,11 @@ static int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb)struct mt7615_sta *msta; msta = container_of(status->wcid, struct mt7615_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } if (mt76_is_mmio(&dev->mt76) && (rxd0 & csum_mask) == csum_mask &&@@ -905,9 +906,9 @@ void mt7615_mac_sta_poll(struct mt7615_dev *dev)int i;INIT_LIST_HEAD (&sta_poll_list); -spin_lock_bh (&dev->sta_poll_lock); -list_splice_init (&dev->sta_poll_list, &sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_splice_init (&dev->mt76.sta_poll_list, &sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);while (!list_empty (&sta_poll_list)) {bool clear = false;@@ -1539,10 +1540,10 @@ static void mt7615_mac_add_txs(struct mt7615_dev *dev, void *data) msta = container_of(wcid, struct mt7615_sta, wcid); sta =wcid_to_sta (wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);if (mt7615_mac_add_txs_skb (dev, msta, pid, txs_data)) goto out;drivers/net/wireless/mediatek/mt76/mt7615/main.c +4
-4@@ -274,10 +274,10 @@ static void mt7615_remove_interface(struct ieee80211_hw *hw,mt7615_mutex_release (dev); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &mvif->sta.wcid); }@@ -677,10 +677,10 @@ void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (vif->type ==NL80211_IFTYPE_STATION && !sta->tdls)mt7615_mcu_add_bss_info (phy, vif, sta, false); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock);mt76_connac_power_save_sched (phy->mt76, &dev->pm); }drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0
-0
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h struct mt7615_dev { · line 267
Quoted 9 lines
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0
-3@@ -262,9 +262,6 @@ struct mt7615_dev {wait_queue_head_t reset_wait;u32 reset_state; -struct list_head sta_poll_list; -spinlock_t sta_poll_lock; -struct {u8 n_pulses;u32 period;
From code review on GitHub, you did not update to use the shared sta_poll_lock in line 919 and 921.
Lorenzo Bianconi
maintainerRe: [PATCH 04/13] wifi: mt76: mt7615: rely on shared sta_poll_list and sta_poll_lock
Quoted 1 line
Hi,
Hi,
Quoted 110 lines · Lorenzo Bianconi
Quoted 108 lines
Rely on
sta_poll_listandsta_poll_lockfields inmt76_devstructure and get rid of private copies.Signed-off-by Lorenzo Bianconi <[email protected]>--- .../net/wireless/mediatek/mt76/mt7615/init.c | 2 -- .../net/wireless/mediatek/mt76/mt7615/mac.c | 19 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7615/main.c | 8 ++++---- .../wireless/mediatek/mt76/mt7615/mt7615.h | 3 --- 4 files changed, 14 insertions(+), 18 deletions(-)drivers/net/wireless/mediatek/mt76/mt7615/init.c +0
-2@@ -626,8 +626,6 @@ void mt7615_init_device(struct mt7615_dev *dev)INIT_DELAYED_WORK (&dev->coredump.work, mt7615_coredump_work);skb_queue_head_init (&dev->phy.scan_event_list);skb_queue_head_init (&dev->coredump.msg_list); -INIT_LIST_HEAD (&dev->sta_poll_list); -spin_lock_init (&dev->sta_poll_lock);init_waitqueue_head (&dev->reset_wait);init_waitqueue_head (&dev->phy.roc_wait);drivers/net/wireless/mediatek/mt76/mt7615/mac.c +10
-9@@ -387,10 +387,11 @@ static int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb)struct mt7615_sta *msta; msta = container_of(status->wcid, struct mt7615_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } if (mt76_is_mmio(&dev->mt76) && (rxd0 & csum_mask) == csum_mask &&@@ -905,9 +906,9 @@ void mt7615_mac_sta_poll(struct mt7615_dev *dev)int i;INIT_LIST_HEAD (&sta_poll_list); -spin_lock_bh (&dev->sta_poll_lock); -list_splice_init (&dev->sta_poll_list, &sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_splice_init (&dev->mt76.sta_poll_list, &sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);while (!list_empty (&sta_poll_list)) {bool clear = false;@@ -1539,10 +1540,10 @@ static void mt7615_mac_add_txs(struct mt7615_dev *dev, void *data) msta = container_of(wcid, struct mt7615_sta, wcid); sta =wcid_to_sta (wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);if (mt7615_mac_add_txs_skb (dev, msta, pid, txs_data)) goto out;drivers/net/wireless/mediatek/mt76/mt7615/main.c +4
-4@@ -274,10 +274,10 @@ static void mt7615_remove_interface(struct ieee80211_hw *hw,mt7615_mutex_release (dev); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &mvif->sta.wcid); }@@ -677,10 +677,10 @@ void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (vif->type ==NL80211_IFTYPE_STATION && !sta->tdls)mt7615_mcu_add_bss_info (phy, vif, sta, false); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock);mt76_connac_power_save_sched (phy->mt76, &dev->pm); }drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0
-0@@ -262,9 +262,6 @@ struct mt7615_dev {wait_queue_head_t reset_wait;u32 reset_state;
Quoted 8 lines
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h struct mt7615_dev { · line 267
Quoted 6 lines
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0
-3-struct list_head sta_poll_list; -spinlock_t sta_poll_lock; -struct {u8 n_pulses;u32 period;From code review on GitHub, you did not update to use the shared
sta_poll_lockin line 919 and 921.
The fix below is not part of wireless-next yet:
commit 30bc32c7c1f975cc3c14e1c7dc437266311282cf
Author: Lorenzo Bianconi <[email protected]> Date: Wed May 24 16:39:32 2023 +0200
wifi: mt76: mt7615: fix possible race in mt7615_mac_sta_poll
I will repost when it is merged in wireless-next/Felix's tree.
Regards,
Lorenzo