Commit ff42606e authored by Lendacky, Thomas's avatar Lendacky, Thomas Committed by David S. Miller

amd-xgbe: Call netif_napi_del on ndo_stop operation

Currently the napi context is added using netif_napi_add each time
the ndo_open operation is called.  However, there is not a
corresponding netif_napi_del call during the ndo_stop operation. If
the device ndo_open operation was called more than once an infinite
loop occurs during module unload.  Add a call to netif_napi_del during
the ndo_stop operation.
Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 91f87345
...@@ -412,9 +412,12 @@ static void xgbe_napi_enable(struct xgbe_prv_data *pdata, unsigned int add) ...@@ -412,9 +412,12 @@ static void xgbe_napi_enable(struct xgbe_prv_data *pdata, unsigned int add)
napi_enable(&pdata->napi); napi_enable(&pdata->napi);
} }
static void xgbe_napi_disable(struct xgbe_prv_data *pdata) static void xgbe_napi_disable(struct xgbe_prv_data *pdata, unsigned int del)
{ {
napi_disable(&pdata->napi); napi_disable(&pdata->napi);
if (del)
netif_napi_del(&pdata->napi);
} }
void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata) void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata)
...@@ -518,7 +521,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller) ...@@ -518,7 +521,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller)
netif_device_detach(netdev); netif_device_detach(netdev);
netif_tx_stop_all_queues(netdev); netif_tx_stop_all_queues(netdev);
xgbe_napi_disable(pdata); xgbe_napi_disable(pdata, 0);
/* Powerdown Tx/Rx */ /* Powerdown Tx/Rx */
hw_if->powerdown_tx(pdata); hw_if->powerdown_tx(pdata);
...@@ -607,7 +610,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) ...@@ -607,7 +610,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata)
phy_stop(pdata->phydev); phy_stop(pdata->phydev);
netif_tx_stop_all_queues(netdev); netif_tx_stop_all_queues(netdev);
xgbe_napi_disable(pdata); xgbe_napi_disable(pdata, 1);
xgbe_stop_tx_timers(pdata); xgbe_stop_tx_timers(pdata);
......
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