lkml.org 
[lkml]   [2021]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 469/601] mt76: check return value of mt76_txq_send_burst in mt76_txq_schedule_list
    Date
    From: Lorenzo Bianconi <lorenzo@kernel.org>

    [ Upstream commit 57b8b57516c5108b0078051a31c68dc9dfcbf68f ]

    Since mt76_txq_send_burst routine can report a negative error code,
    check the returned value before incrementing the number of transmitted
    frames in mt76_txq_schedule_list routine.
    Return -EBUSY directly if the device is in reset or in power management.

    Fixes: 90fdc1717b186 ("mt76: use mac80211 txq scheduling")
    Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/mediatek/mt76/tx.c | 15 ++++++++++-----
    1 file changed, 10 insertions(+), 5 deletions(-)

    diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
    index d5953223d7cf..c678f3e01311 100644
    --- a/drivers/net/wireless/mediatek/mt76/tx.c
    +++ b/drivers/net/wireless/mediatek/mt76/tx.c
    @@ -455,11 +455,11 @@ mt76_txq_schedule_list(struct mt76_phy *phy, enum mt76_txq_id qid)
    int ret = 0;

    while (1) {
    + int n_frames = 0;
    +
    if (test_bit(MT76_STATE_PM, &phy->state) ||
    - test_bit(MT76_RESET, &phy->state)) {
    - ret = -EBUSY;
    - break;
    - }
    + test_bit(MT76_RESET, &phy->state))
    + return -EBUSY;

    if (dev->queue_ops->tx_cleanup &&
    q->queued + 2 * MT_TXQ_FREE_THR >= q->ndesc) {
    @@ -491,11 +491,16 @@ mt76_txq_schedule_list(struct mt76_phy *phy, enum mt76_txq_id qid)
    }

    if (!mt76_txq_stopped(q))
    - ret += mt76_txq_send_burst(phy, q, mtxq);
    + n_frames = mt76_txq_send_burst(phy, q, mtxq);

    spin_unlock_bh(&q->lock);

    ieee80211_return_txq(phy->hw, txq, false);
    +
    + if (unlikely(n_frames < 0))
    + return n_frames;
    +
    + ret += n_frames;
    }

    return ret;
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-12 20:02    [W:2.153 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site