Loading drivers/platform/msm/mhi_dev/mhi_dev_net.c +19 −6 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <linux/platform_device.h> #include <linux/etherdevice.h> #include <linux/of.h> #include <linux/list.h> #include "mhi.h" Loading Loading @@ -526,8 +527,6 @@ static int mhi_dev_net_open_chan_create_netif(struct mhi_dev_net_client *client) mhi_dev_net_log(MHI_DBG, "opening OUT %d IN %d channels\n", client->out_chan, client->in_chan); mutex_lock(&client->out_chan_lock); mutex_lock(&client->in_chan_lock); mhi_dev_net_log(MHI_DBG, "Initializing inbound chan %d.\n", client->in_chan); Loading @@ -552,8 +551,6 @@ static int mhi_dev_net_open_chan_create_netif(struct mhi_dev_net_client *client) } else atomic_set(&client->tx_enabled, 1); mutex_unlock(&client->in_chan_lock); mutex_unlock(&client->out_chan_lock); mhi_dev_net_log(MHI_INFO, "IN %d, OUT %d channels are opened", client->in_chan, client->out_chan); Loading Loading @@ -601,8 +598,8 @@ static int mhi_dev_net_close(void) "mhi_dev_net module is removed\n"); client = mhi_net_ctxt.client_handle; mhi_dev_close_channel(client->out_handle); mhi_dev_close_channel(client->in_handle); atomic_set(&client->tx_enabled, 0); mhi_dev_close_channel(client->in_handle); atomic_set(&client->rx_enabled, 0); if (client->dev != NULL) { netif_stop_queue(client->dev); Loading Loading @@ -638,6 +635,18 @@ static int mhi_dev_net_dergstr_client return 0; } static void mhi_dev_net_free_reqs(struct list_head *buff) { struct list_head *node, *next; struct mhi_req *mreq; list_for_each_safe(node, next, buff) { mreq = list_entry(node, struct mhi_req, list); list_del(&mreq->list); kfree(mreq); } } static void mhi_dev_net_state_cb(struct mhi_dev_client_cb_data *cb_data) { struct mhi_dev_net_client *mhi_client; Loading Loading @@ -686,11 +695,15 @@ static void mhi_dev_net_state_cb(struct mhi_dev_client_cb_data *cb_data) netif_stop_queue(mhi_client->dev); unregister_netdev(mhi_client->dev); mhi_dev_close_channel(mhi_client->out_handle); mhi_dev_close_channel(mhi_client->in_handle); atomic_set(&mhi_client->tx_enabled, 0); mhi_dev_close_channel(mhi_client->in_handle); atomic_set(&mhi_client->rx_enabled, 0); mhi_dev_net_free_reqs(&mhi_client->rx_buffers); mhi_dev_net_free_reqs(&mhi_client->wr_req_buffers); free_netdev(mhi_client->dev); mhi_client->dev = NULL; kfree(mhi_client); kfree(mhi_net_ipc_log); } } } Loading Loading
drivers/platform/msm/mhi_dev/mhi_dev_net.c +19 −6 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <linux/platform_device.h> #include <linux/etherdevice.h> #include <linux/of.h> #include <linux/list.h> #include "mhi.h" Loading Loading @@ -526,8 +527,6 @@ static int mhi_dev_net_open_chan_create_netif(struct mhi_dev_net_client *client) mhi_dev_net_log(MHI_DBG, "opening OUT %d IN %d channels\n", client->out_chan, client->in_chan); mutex_lock(&client->out_chan_lock); mutex_lock(&client->in_chan_lock); mhi_dev_net_log(MHI_DBG, "Initializing inbound chan %d.\n", client->in_chan); Loading @@ -552,8 +551,6 @@ static int mhi_dev_net_open_chan_create_netif(struct mhi_dev_net_client *client) } else atomic_set(&client->tx_enabled, 1); mutex_unlock(&client->in_chan_lock); mutex_unlock(&client->out_chan_lock); mhi_dev_net_log(MHI_INFO, "IN %d, OUT %d channels are opened", client->in_chan, client->out_chan); Loading Loading @@ -601,8 +598,8 @@ static int mhi_dev_net_close(void) "mhi_dev_net module is removed\n"); client = mhi_net_ctxt.client_handle; mhi_dev_close_channel(client->out_handle); mhi_dev_close_channel(client->in_handle); atomic_set(&client->tx_enabled, 0); mhi_dev_close_channel(client->in_handle); atomic_set(&client->rx_enabled, 0); if (client->dev != NULL) { netif_stop_queue(client->dev); Loading Loading @@ -638,6 +635,18 @@ static int mhi_dev_net_dergstr_client return 0; } static void mhi_dev_net_free_reqs(struct list_head *buff) { struct list_head *node, *next; struct mhi_req *mreq; list_for_each_safe(node, next, buff) { mreq = list_entry(node, struct mhi_req, list); list_del(&mreq->list); kfree(mreq); } } static void mhi_dev_net_state_cb(struct mhi_dev_client_cb_data *cb_data) { struct mhi_dev_net_client *mhi_client; Loading Loading @@ -686,11 +695,15 @@ static void mhi_dev_net_state_cb(struct mhi_dev_client_cb_data *cb_data) netif_stop_queue(mhi_client->dev); unregister_netdev(mhi_client->dev); mhi_dev_close_channel(mhi_client->out_handle); mhi_dev_close_channel(mhi_client->in_handle); atomic_set(&mhi_client->tx_enabled, 0); mhi_dev_close_channel(mhi_client->in_handle); atomic_set(&mhi_client->rx_enabled, 0); mhi_dev_net_free_reqs(&mhi_client->rx_buffers); mhi_dev_net_free_reqs(&mhi_client->wr_req_buffers); free_netdev(mhi_client->dev); mhi_client->dev = NULL; kfree(mhi_client); kfree(mhi_net_ipc_log); } } } Loading