Commit b3ee105c authored by Ajay Singh's avatar Ajay Singh Committed by Greg Kroah-Hartman

staging: wilc1000: refactor code to move initilization in wilc_netdev_init()

Refactor code to move the initialization of wilc related parameters in
wilc_netdev_init() and move their deinitialization in
wilc_netdev_cleanup(). For 'hif_workqueue' creation 'clients_count' check
is not required as the single instance is maintained.
Signed-off-by: default avatarAjay Singh <ajay.kathat@microchip.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 28ab936e
...@@ -3392,13 +3392,6 @@ int wilc_init(struct net_device *dev, struct host_if_drv **hif_drv_handler) ...@@ -3392,13 +3392,6 @@ int wilc_init(struct net_device *dev, struct host_if_drv **hif_drv_handler)
if (wilc->clients_count == 0) { if (wilc->clients_count == 0) {
init_completion(&hif_driver_comp); init_completion(&hif_driver_comp);
mutex_init(&hif_deinit_lock); mutex_init(&hif_deinit_lock);
wilc->hif_workqueue = create_singlethread_workqueue("WILC_wq");
if (!wilc->hif_workqueue) {
netdev_err(vif->ndev, "Failed to create workqueue\n");
kfree(hif_drv);
return -ENOMEM;
}
} }
timer_setup(&vif->periodic_rssi, get_periodic_rssi, 0); timer_setup(&vif->periodic_rssi, get_periodic_rssi, 0);
...@@ -3458,22 +3451,6 @@ int wilc_deinit(struct wilc_vif *vif) ...@@ -3458,22 +3451,6 @@ int wilc_deinit(struct wilc_vif *vif)
hif_drv->hif_state = HOST_IF_IDLE; hif_drv->hif_state = HOST_IF_IDLE;
if (vif->wilc->clients_count == 1) {
struct host_if_msg *msg;
msg = wilc_alloc_work(vif, handle_hif_exit_work, true);
if (!IS_ERR(msg)) {
result = wilc_enqueue_work(msg);
if (result)
netdev_err(vif->ndev, "deinit : Error(%d)\n",
result);
else
wait_for_completion(&msg->work_comp);
kfree(msg);
}
destroy_workqueue(vif->wilc->hif_workqueue);
}
kfree(hif_drv); kfree(hif_drv);
vif->wilc->clients_count--; vif->wilc->clients_count--;
......
...@@ -1036,6 +1036,8 @@ void wilc_netdev_cleanup(struct wilc *wilc) ...@@ -1036,6 +1036,8 @@ void wilc_netdev_cleanup(struct wilc *wilc)
} }
} }
flush_workqueue(wilc->hif_workqueue);
destroy_workqueue(wilc->hif_workqueue);
kfree(wilc); kfree(wilc);
wilc_debugfs_remove(); wilc_debugfs_remove();
} }
...@@ -1070,6 +1072,12 @@ int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type, ...@@ -1070,6 +1072,12 @@ int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type,
INIT_LIST_HEAD(&wl->txq_head.list); INIT_LIST_HEAD(&wl->txq_head.list);
INIT_LIST_HEAD(&wl->rxq_head.list); INIT_LIST_HEAD(&wl->rxq_head.list);
wl->hif_workqueue = create_singlethread_workqueue("WILC_wq");
if (!wl->hif_workqueue) {
kfree(wl);
return -ENOMEM;
}
register_inetaddr_notifier(&g_dev_notifier); register_inetaddr_notifier(&g_dev_notifier);
for (i = 0; i < NUM_CONCURRENT_IFC; i++) { for (i = 0; i < NUM_CONCURRENT_IFC; i++) {
......
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