From patchwork Tue Feb 12 10:08:48 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: net/macb: fix race with RX interrupt while doing NAPI Date: Tue, 12 Feb 2013 00:08:48 -0000 From: Nicolas Ferre X-Patchwork-Id: 219758 Message-Id: <1360663728-10296-1-git-send-email-nicolas.ferre@atmel.com> To: "David S. Miller" , Cc: , , Jean-Christophe PLAGNIOL-VILLARD , , Nicolas Ferre When interrupts are disabled, an RX condition can occur but it is not reported when enabling interrupts again. We need to check RSR and use napi_reschedule() if condition is met. Signed-off-by: Nicolas Ferre --- drivers/net/ethernet/cadence/macb.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index a9b0830..b9d4bb9 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c @@ -693,6 +693,11 @@ static int macb_poll(struct napi_struct *napi, int budget) * get notified when new packets arrive. */ macb_writel(bp, IER, MACB_RX_INT_FLAGS); + + /* Packets received while interrupts were disabled */ + status = macb_readl(bp, RSR); + if (unlikely(status)) + napi_reschedule(napi); } /* TODO: Handle errors */