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: Ajay Singh <ajay.kathat@microchip.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Ajay Singh 2018-09-04 12:09:40 +05:30 committed by Greg Kroah-Hartman
parent 28ab936ed1
commit b3ee105c33
2 changed files with 8 additions and 23 deletions

View File

@ -3392,13 +3392,6 @@ int wilc_init(struct net_device *dev, struct host_if_drv **hif_drv_handler)
if (wilc->clients_count == 0) {
init_completion(&hif_driver_comp);
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);
@ -3458,22 +3451,6 @@ int wilc_deinit(struct wilc_vif *vif)
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);
vif->wilc->clients_count--;

View File

@ -1036,6 +1036,8 @@ void wilc_netdev_cleanup(struct wilc *wilc)
}
}
flush_workqueue(wilc->hif_workqueue);
destroy_workqueue(wilc->hif_workqueue);
kfree(wilc);
wilc_debugfs_remove();
}
@ -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->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);
for (i = 0; i < NUM_CONCURRENT_IFC; i++) {