net: calxedaxgmac: enable interrupts after napi_enable
Fix a race condition where the interrupt handler may have called napi_schedule before napi_enable is called. This would disable interrupts and never actually schedule napi to run. Reported-by: Lennert Buytenhek <buytenh@wantstofly.org> Signed-off-by: Rob Herring <rob.herring@calxeda.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
cbe157b60c
commit
f7ea10520d
|
@ -959,9 +959,7 @@ static int xgmac_hw_init(struct net_device *dev)
|
|||
DMA_BUS_MODE_FB | DMA_BUS_MODE_ATDS | DMA_BUS_MODE_AAL;
|
||||
writel(value, ioaddr + XGMAC_DMA_BUS_MODE);
|
||||
|
||||
/* Enable interrupts */
|
||||
writel(DMA_INTR_DEFAULT_MASK, ioaddr + XGMAC_DMA_STATUS);
|
||||
writel(DMA_INTR_DEFAULT_MASK, ioaddr + XGMAC_DMA_INTR_ENA);
|
||||
writel(0, ioaddr + XGMAC_DMA_INTR_ENA);
|
||||
|
||||
/* Mask power mgt interrupt */
|
||||
writel(XGMAC_INT_STAT_PMTIM, ioaddr + XGMAC_INT_STAT);
|
||||
|
@ -1029,6 +1027,10 @@ static int xgmac_open(struct net_device *dev)
|
|||
napi_enable(&priv->napi);
|
||||
netif_start_queue(dev);
|
||||
|
||||
/* Enable interrupts */
|
||||
writel(DMA_INTR_DEFAULT_MASK, ioaddr + XGMAC_DMA_STATUS);
|
||||
writel(DMA_INTR_DEFAULT_MASK, ioaddr + XGMAC_DMA_INTR_ENA);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue