wifi: mt76: sdio: move mcu queue size check inside critical section
Even if it is not a real issue at the moment since concurrent access to mcu message queue is protected by mcu mutex, make the code more robust and move mcu queue free space check inside queue spinlock critical section. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
1ac710a6e8
commit
6d1af9b64c
1 changed files with 7 additions and 4 deletions
|
@ -550,10 +550,7 @@ static int
|
|||
mt76s_tx_queue_skb_raw(struct mt76_dev *dev, struct mt76_queue *q,
|
||||
struct sk_buff *skb, u32 tx_info)
|
||||
{
|
||||
int ret = -ENOSPC, len = skb->len, pad;
|
||||
|
||||
if (q->queued == q->ndesc)
|
||||
goto error;
|
||||
int ret, len = skb->len, pad;
|
||||
|
||||
pad = round_up(skb->len, 4) - skb->len;
|
||||
ret = mt76_skb_adjust_pad(skb, pad);
|
||||
|
@ -562,6 +559,12 @@ mt76s_tx_queue_skb_raw(struct mt76_dev *dev, struct mt76_queue *q,
|
|||
|
||||
spin_lock_bh(&q->lock);
|
||||
|
||||
if (q->queued == q->ndesc) {
|
||||
ret = -ENOSPC;
|
||||
spin_unlock_bh(&q->lock);
|
||||
goto error;
|
||||
}
|
||||
|
||||
q->entry[q->head].buf_sz = len;
|
||||
q->entry[q->head].skb = skb;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue