summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Danaila <adanaila@codeaurora.org>2015-02-18 11:13:45 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:11:11 -0700
commit16afef100fab4ed8ac94d0af1521208497c90412 (patch)
treecb3bdc0be12aa456fc20ffc1ba3c2b2574d4db74
parentb37cf8619e0844cb57afda4dcbe3516fd0c44124 (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.c4
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;