mt76: mt7663: check isr read return value in mt7663s_rx_work
authorLorenzo Bianconi <lorenzo@kernel.org>
Sat, 5 Sep 2020 09:26:07 +0000 (11:26 +0200)
committerFelix Fietkau <nbd@nbd.name>
Thu, 24 Sep 2020 16:10:19 +0000 (18:10 +0200)
In order to avoid using stale isr values, check return value from
sdio_readsb() in mt7663s_rx_work()

Tested-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c

index e82f6bd..2486cda 100644 (file)
@@ -278,9 +278,12 @@ void mt7663s_rx_work(struct work_struct *work)
        /* disable interrupt */
        sdio_claim_host(sdio->func);
        sdio_writel(sdio->func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, NULL);
-       sdio_readsb(sdio->func, intr, MCR_WHISR, sizeof(struct mt76s_intr));
+       ret = sdio_readsb(sdio->func, intr, MCR_WHISR, sizeof(*intr));
        sdio_release_host(sdio->func);
 
+       if (ret < 0)
+               goto out;
+
        trace_dev_irq(dev, intr->isr, 0);
 
        if (intr->isr & WHIER_RX0_DONE_INT_EN) {
@@ -306,7 +309,7 @@ void mt7663s_rx_work(struct work_struct *work)
                queue_work(sdio->txrx_wq, &sdio->rx.recv_work);
                return;
        }
-
+out:
        /* enable interrupt */
        sdio_claim_host(sdio->func);
        sdio_writel(sdio->func, WHLPCR_INT_EN_SET, MCR_WHLPCR, NULL);