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

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
Loading
Loading
Loading
Loading
+0 −23
Original line number Diff line number Diff line
@@ -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--;
+8 −0
Original line number Diff line number Diff line
@@ -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++) {