Commit 4989338e authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Felix Fietkau

mt76: mac: run mt76x02_mac_work routine atomically

Grab mt76_dev mutex in mt76x02_mac_work handler since it runs
concurrently with mt76x{0,2}_set_channel routines
Signed-off-by: default avatarLorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 374eb1b5
...@@ -784,6 +784,8 @@ void mt76x02_mac_work(struct work_struct *work) ...@@ -784,6 +784,8 @@ void mt76x02_mac_work(struct work_struct *work)
mac_work.work); mac_work.work);
int i, idx; int i, idx;
mutex_lock(&dev->mt76.mutex);
mt76x02_update_channel(&dev->mt76); mt76x02_update_channel(&dev->mt76);
for (i = 0, idx = 0; i < 16; i++) { for (i = 0, idx = 0; i < 16; i++) {
u32 val = mt76_rr(dev, MT_TX_AGG_CNT(i)); u32 val = mt76_rr(dev, MT_TX_AGG_CNT(i));
...@@ -796,6 +798,8 @@ void mt76x02_mac_work(struct work_struct *work) ...@@ -796,6 +798,8 @@ void mt76x02_mac_work(struct work_struct *work)
if (!dev->beacon_mask) if (!dev->beacon_mask)
mt76x02_check_mac_err(dev); mt76x02_check_mac_err(dev);
mutex_unlock(&dev->mt76.mutex);
mt76_tx_status_check(&dev->mt76, NULL, false); mt76_tx_status_check(&dev->mt76, NULL, false);
ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mac_work, ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mac_work,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment