Skip to content

Commit ea0f386

Browse files
LorenzoBianconinbd168
authored andcommitted
wifi: mt76: mt7996: rely on shared sta_poll_list and sta_poll_lock
Rely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
1 parent 57a3fac commit ea0f386

File tree

4 files changed

+27
-29
lines changed

4 files changed

+27
-29
lines changed

drivers/net/wireless/mediatek/mt76/mt7996/init.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -856,9 +856,7 @@ int mt7996_register_device(struct mt7996_dev *dev)
856856
INIT_WORK(&dev->rc_work, mt7996_mac_sta_rc_work);
857857
INIT_DELAYED_WORK(&dev->mphy.mac_work, mt7996_mac_work);
858858
INIT_LIST_HEAD(&dev->sta_rc_list);
859-
INIT_LIST_HEAD(&dev->sta_poll_list);
860859
INIT_LIST_HEAD(&dev->twt_list);
861-
spin_lock_init(&dev->sta_poll_lock);
862860

863861
init_waitqueue_head(&dev->reset_wait);
864862
INIT_WORK(&dev->reset_work, mt7996_mac_reset_work);

drivers/net/wireless/mediatek/mt76/mt7996/mac.c

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ static void mt7996_mac_sta_poll(struct mt7996_dev *dev)
111111
LIST_HEAD(sta_poll_list);
112112
int i;
113113

114-
spin_lock_bh(&dev->sta_poll_lock);
115-
list_splice_init(&dev->sta_poll_list, &sta_poll_list);
116-
spin_unlock_bh(&dev->sta_poll_lock);
114+
spin_lock_bh(&dev->mt76.sta_poll_lock);
115+
list_splice_init(&dev->mt76.sta_poll_list, &sta_poll_list);
116+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
117117

118118
rcu_read_lock();
119119

@@ -124,15 +124,15 @@ static void mt7996_mac_sta_poll(struct mt7996_dev *dev)
124124
s8 rssi[4];
125125
u8 bw;
126126

127-
spin_lock_bh(&dev->sta_poll_lock);
127+
spin_lock_bh(&dev->mt76.sta_poll_lock);
128128
if (list_empty(&sta_poll_list)) {
129-
spin_unlock_bh(&dev->sta_poll_lock);
129+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
130130
break;
131131
}
132132
msta = list_first_entry(&sta_poll_list,
133133
struct mt7996_sta, poll_list);
134134
list_del_init(&msta->poll_list);
135-
spin_unlock_bh(&dev->sta_poll_lock);
135+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
136136

137137
idx = msta->wcid.idx;
138138

@@ -681,10 +681,11 @@ mt7996_mac_fill_rx(struct mt7996_dev *dev, struct sk_buff *skb)
681681
struct mt7996_sta *msta;
682682

683683
msta = container_of(status->wcid, struct mt7996_sta, wcid);
684-
spin_lock_bh(&dev->sta_poll_lock);
684+
spin_lock_bh(&dev->mt76.sta_poll_lock);
685685
if (list_empty(&msta->poll_list))
686-
list_add_tail(&msta->poll_list, &dev->sta_poll_list);
687-
spin_unlock_bh(&dev->sta_poll_lock);
686+
list_add_tail(&msta->poll_list,
687+
&dev->mt76.sta_poll_list);
688+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
688689
}
689690

690691
status->freq = mphy->chandef.chan->center_freq;
@@ -1291,10 +1292,11 @@ mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len)
12911292
continue;
12921293

12931294
msta = container_of(wcid, struct mt7996_sta, wcid);
1294-
spin_lock_bh(&dev->sta_poll_lock);
1295+
spin_lock_bh(&mdev->sta_poll_lock);
12951296
if (list_empty(&msta->poll_list))
1296-
list_add_tail(&msta->poll_list, &dev->sta_poll_list);
1297-
spin_unlock_bh(&dev->sta_poll_lock);
1297+
list_add_tail(&msta->poll_list,
1298+
&mdev->sta_poll_list);
1299+
spin_unlock_bh(&mdev->sta_poll_lock);
12981300
continue;
12991301
}
13001302

@@ -1499,10 +1501,10 @@ static void mt7996_mac_add_txs(struct mt7996_dev *dev, void *data)
14991501
if (!wcid->sta)
15001502
goto out;
15011503

1502-
spin_lock_bh(&dev->sta_poll_lock);
1504+
spin_lock_bh(&dev->mt76.sta_poll_lock);
15031505
if (list_empty(&msta->poll_list))
1504-
list_add_tail(&msta->poll_list, &dev->sta_poll_list);
1505-
spin_unlock_bh(&dev->sta_poll_lock);
1506+
list_add_tail(&msta->poll_list, &dev->mt76.sta_poll_list);
1507+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
15061508

15071509
out:
15081510
rcu_read_unlock();
@@ -2325,15 +2327,15 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)
23252327
u32 changed;
23262328
LIST_HEAD(list);
23272329

2328-
spin_lock_bh(&dev->sta_poll_lock);
2330+
spin_lock_bh(&dev->mt76.sta_poll_lock);
23292331
list_splice_init(&dev->sta_rc_list, &list);
23302332

23312333
while (!list_empty(&list)) {
23322334
msta = list_first_entry(&list, struct mt7996_sta, rc_list);
23332335
list_del_init(&msta->rc_list);
23342336
changed = msta->changed;
23352337
msta->changed = 0;
2336-
spin_unlock_bh(&dev->sta_poll_lock);
2338+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
23372339

23382340
sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);
23392341
vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
@@ -2345,10 +2347,10 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)
23452347

23462348
/* TODO: smps change */
23472349

2348-
spin_lock_bh(&dev->sta_poll_lock);
2350+
spin_lock_bh(&dev->mt76.sta_poll_lock);
23492351
}
23502352

2351-
spin_unlock_bh(&dev->sta_poll_lock);
2353+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
23522354
}
23532355

23542356
void mt7996_mac_work(struct work_struct *work)

drivers/net/wireless/mediatek/mt76/mt7996/main.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,10 @@ static void mt7996_remove_interface(struct ieee80211_hw *hw,
263263
phy->omac_mask &= ~BIT_ULL(mvif->mt76.omac_idx);
264264
mutex_unlock(&dev->mt76.mutex);
265265

266-
spin_lock_bh(&dev->sta_poll_lock);
266+
spin_lock_bh(&dev->mt76.sta_poll_lock);
267267
if (!list_empty(&msta->poll_list))
268268
list_del_init(&msta->poll_list);
269-
spin_unlock_bh(&dev->sta_poll_lock);
269+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
270270

271271
mt76_packet_id_flush(&dev->mt76, &msta->wcid);
272272
}
@@ -689,12 +689,12 @@ void mt7996_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
689689
for (i = 0; i < ARRAY_SIZE(msta->twt.flow); i++)
690690
mt7996_mac_twt_teardown_flow(dev, msta, i);
691691

692-
spin_lock_bh(&dev->sta_poll_lock);
692+
spin_lock_bh(&mdev->sta_poll_lock);
693693
if (!list_empty(&msta->poll_list))
694694
list_del_init(&msta->poll_list);
695695
if (!list_empty(&msta->rc_list))
696696
list_del_init(&msta->rc_list);
697-
spin_unlock_bh(&dev->sta_poll_lock);
697+
spin_unlock_bh(&mdev->sta_poll_lock);
698698
}
699699

700700
static void mt7996_tx(struct ieee80211_hw *hw,
@@ -1005,11 +1005,11 @@ static void mt7996_sta_rc_work(void *data, struct ieee80211_sta *sta)
10051005
struct mt7996_dev *dev = msta->vif->phy->dev;
10061006
u32 *changed = data;
10071007

1008-
spin_lock_bh(&dev->sta_poll_lock);
1008+
spin_lock_bh(&dev->mt76.sta_poll_lock);
10091009
msta->changed |= *changed;
10101010
if (list_empty(&msta->rc_list))
10111011
list_add_tail(&msta->rc_list, &dev->sta_rc_list);
1012-
spin_unlock_bh(&dev->sta_poll_lock);
1012+
spin_unlock_bh(&dev->mt76.sta_poll_lock);
10131013
}
10141014

10151015
static void mt7996_sta_rc_update(struct ieee80211_hw *hw,

drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,7 @@ struct mt7996_dev {
224224
#endif
225225

226226
struct list_head sta_rc_list;
227-
struct list_head sta_poll_list;
228227
struct list_head twt_list;
229-
spinlock_t sta_poll_lock;
230228

231229
u32 hw_pattern;
232230

0 commit comments

Comments
 (0)