diff options
| author | Andrei Danaila <adanaila@codeaurora.org> | 2015-02-18 11:13:45 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:11:11 -0700 |
| commit | 16afef100fab4ed8ac94d0af1521208497c90412 (patch) | |
| tree | cb3bdc0be12aa456fc20ffc1ba3c2b2574d4db74 | |
| parent | b37cf8619e0844cb57afda4dcbe3516fd0c44124 (diff) | |
mhi: rmnet: Prevent NAPI disable during RX
When the netdev interface is released, NAPI is disabled.
This condition can occur while the device is still sending RX data
causing a potential kernel panic.
Wait for all incoming data to be received, before releasing
the interface.
Change-Id: If33ff721a581fdafb9712fe3cf9243996187f09d
Signed-off-by: Andrei Danaila <adanaila@codeaurora.org>
| -rw-r--r-- | drivers/net/ethernet/msm/msm_rmnet_mhi.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/net/ethernet/msm/msm_rmnet_mhi.c b/drivers/net/ethernet/msm/msm_rmnet_mhi.c index f024d6d24be8..3e6e7069a990 100644 --- a/drivers/net/ethernet/msm/msm_rmnet_mhi.c +++ b/drivers/net/ethernet/msm/msm_rmnet_mhi.c @@ -567,7 +567,6 @@ static int rmnet_mhi_open(struct net_device *dev) rmnet_mhi_ptr->tx_channel, rmnet_mhi_ptr->rx_channel); netif_start_queue(dev); - napi_enable(&(rmnet_mhi_ptr->napi)); /* Poll to check if any buffers are accumulated in the * transport buffers @@ -616,7 +615,6 @@ static int rmnet_mhi_stop(struct net_device *dev) struct rmnet_mhi_private *rmnet_mhi_ptr = *(struct rmnet_mhi_private **)netdev_priv(dev); netif_stop_queue(dev); - napi_disable(&(rmnet_mhi_ptr->napi)); rmnet_log(MSG_VERBOSE, "Entered\n"); if (atomic_read(&rmnet_mhi_ptr->irq_masked_cntr)) { mhi_unmask_irq(rmnet_mhi_ptr->rx_client_handle); @@ -935,8 +933,8 @@ static int rmnet_mhi_enable_iface(struct rmnet_mhi_private *rmnet_mhi_ptr) "Network device registration failed\n"); goto net_dev_reg_fail; } + napi_enable(&(rmnet_mhi_ptr->napi)); - netif_start_queue(rmnet_mhi_ptr->dev); rmnet_log(MSG_INFO, "Exited.\n"); return 0; |
