mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt76: add rcu locking in tid reorder function
Avoids having the tid or station entry disappear prematurely. Also cancel the reorder work earlier Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
@@ -103,6 +103,7 @@ mt76_rx_aggr_reorder_work(struct work_struct *work)
|
||||
__skb_queue_head_init(&frames);
|
||||
|
||||
local_bh_disable();
|
||||
rcu_read_lock();
|
||||
|
||||
spin_lock(&tid->lock);
|
||||
mt76_rx_aggr_check_release(tid, &frames);
|
||||
@@ -114,6 +115,7 @@ mt76_rx_aggr_reorder_work(struct work_struct *work)
|
||||
REORDER_TIMEOUT);
|
||||
mt76_rx_complete(dev, &frames, -1);
|
||||
|
||||
rcu_read_unlock();
|
||||
local_bh_enable();
|
||||
}
|
||||
|
||||
@@ -266,6 +268,8 @@ static void mt76_rx_aggr_shutdown(struct mt76_dev *dev, struct mt76_rx_tid *tid)
|
||||
u8 size = tid->size;
|
||||
int i;
|
||||
|
||||
cancel_delayed_work(&tid->reorder_work);
|
||||
|
||||
spin_lock_bh(&tid->lock);
|
||||
|
||||
tid->stopped = true;
|
||||
@@ -280,8 +284,6 @@ static void mt76_rx_aggr_shutdown(struct mt76_dev *dev, struct mt76_rx_tid *tid)
|
||||
}
|
||||
|
||||
spin_unlock_bh(&tid->lock);
|
||||
|
||||
cancel_delayed_work(&tid->reorder_work);
|
||||
}
|
||||
|
||||
void mt76_rx_aggr_stop(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tidno)
|
||||
|
||||
Reference in New Issue
Block a user