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>
This commit is contained in:
parent
1522ff731f
commit
4178d96f6b
|
@ -278,9 +278,12 @@ void mt7663s_rx_work(struct work_struct *work)
|
||||||
/* disable interrupt */
|
/* disable interrupt */
|
||||||
sdio_claim_host(sdio->func);
|
sdio_claim_host(sdio->func);
|
||||||
sdio_writel(sdio->func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, NULL);
|
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);
|
sdio_release_host(sdio->func);
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
trace_dev_irq(dev, intr->isr, 0);
|
trace_dev_irq(dev, intr->isr, 0);
|
||||||
|
|
||||||
if (intr->isr & WHIER_RX0_DONE_INT_EN) {
|
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);
|
queue_work(sdio->txrx_wq, &sdio->rx.recv_work);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
out:
|
||||||
/* enable interrupt */
|
/* enable interrupt */
|
||||||
sdio_claim_host(sdio->func);
|
sdio_claim_host(sdio->func);
|
||||||
sdio_writel(sdio->func, WHLPCR_INT_EN_SET, MCR_WHLPCR, NULL);
|
sdio_writel(sdio->func, WHLPCR_INT_EN_SET, MCR_WHLPCR, NULL);
|
||||||
|
|
Loading…
Reference in New Issue