Commit f7ea1052 authored by Rob Herring's avatar Rob Herring Committed by David S. Miller

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: default avatarLennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: default avatarRob Herring <rob.herring@calxeda.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cbe157b6
...@@ -959,9 +959,7 @@ static int xgmac_hw_init(struct net_device *dev) ...@@ -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; DMA_BUS_MODE_FB | DMA_BUS_MODE_ATDS | DMA_BUS_MODE_AAL;
writel(value, ioaddr + XGMAC_DMA_BUS_MODE); writel(value, ioaddr + XGMAC_DMA_BUS_MODE);
/* Enable interrupts */ writel(0, ioaddr + XGMAC_DMA_INTR_ENA);
writel(DMA_INTR_DEFAULT_MASK, ioaddr + XGMAC_DMA_STATUS);
writel(DMA_INTR_DEFAULT_MASK, ioaddr + XGMAC_DMA_INTR_ENA);
/* Mask power mgt interrupt */ /* Mask power mgt interrupt */
writel(XGMAC_INT_STAT_PMTIM, ioaddr + XGMAC_INT_STAT); writel(XGMAC_INT_STAT_PMTIM, ioaddr + XGMAC_INT_STAT);
...@@ -1029,6 +1027,10 @@ static int xgmac_open(struct net_device *dev) ...@@ -1029,6 +1027,10 @@ static int xgmac_open(struct net_device *dev)
napi_enable(&priv->napi); napi_enable(&priv->napi);
netif_start_queue(dev); 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; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment