Skip to content

Commit fcdfc46

Browse files
AnsuelPaolo Abeni
authored andcommitted
net: ethernet: mediatek: disable irq before schedule napi
While searching for possible refactor of napi_schedule_prep and __napi_schedule it was notice that the mtk eth driver disable the interrupt for rx and tx AFTER napi is scheduled. While this is a very hard to repro case it might happen to have situation where the interrupt is disabled and never enabled again as the napi completes and the interrupt is enabled before. This is caused by the fact that a napi driven by interrupt expect a logic with: 1. interrupt received. napi prepared -> interrupt disabled -> napi scheduled 2. napi triggered. ring cleared -> interrupt enabled -> wait for new interrupt To prevent this case, disable the interrupt BEFORE the napi is scheduled. Fixes: 656e705 ("net-next: mediatek: add support for MT7623 ethernet") Cc: [email protected] Signed-off-by: Christian Marangi <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent defe4b8 commit fcdfc46

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/net/ethernet/mediatek/mtk_eth_soc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3171,8 +3171,8 @@ static irqreturn_t mtk_handle_irq_rx(int irq, void *_eth)
31713171

31723172
eth->rx_events++;
31733173
if (likely(napi_schedule_prep(&eth->rx_napi))) {
3174-
__napi_schedule(&eth->rx_napi);
31753174
mtk_rx_irq_disable(eth, eth->soc->txrx.rx_irq_done_mask);
3175+
__napi_schedule(&eth->rx_napi);
31763176
}
31773177

31783178
return IRQ_HANDLED;
@@ -3184,8 +3184,8 @@ static irqreturn_t mtk_handle_irq_tx(int irq, void *_eth)
31843184

31853185
eth->tx_events++;
31863186
if (likely(napi_schedule_prep(&eth->tx_napi))) {
3187-
__napi_schedule(&eth->tx_napi);
31883187
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
3188+
__napi_schedule(&eth->tx_napi);
31893189
}
31903190

31913191
return IRQ_HANDLED;

0 commit comments

Comments
 (0)