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:
parent
28ab936ed1
commit
b3ee105c33
|
@ -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--;
|
||||
|
|
|
@ -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++) {
|
||||
|
|
Loading…
Reference in New Issue