summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenzo Bianconi <lorenzo@kernel.org>2020-09-05 12:26:07 +0300
committerFelix Fietkau <nbd@nbd.name>2020-09-24 19:10:19 +0300
commit4178d96f6b351a6c8331b8e0d76e754187ad4cdb (patch)
treead40af70a45d58e2e469ed0c31869fb5f4481404
parent1522ff731f848cf87d8ac535dc8ce7bc62a17918 (diff)
downloadlinux-4178d96f6b351a6c8331b8e0d76e754187ad4cdb.tar.xz
mt76: mt7663: check isr read return value in mt7663s_rx_work
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>
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c b/drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c
index e82f6bdcbce4..2486cda3243b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c
@@ -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);