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

staging: wilc1000: remove conditional lock in wilc_wfi_deinit_mon_interface()

wilc_wfi_deinit_mon_interface() calls unregister_netdev() which
requires the rtnl lock again. Now move wilc_wfi_deinit_mon_interface()
out of wilc_mac_close(). Also remove explicit call to wilc_mac_close()
because unregister_netdev() takes care of calling wilc_mac_close().
Signed-off-by: default avatarAjay Singh <ajay.kathat@microchip.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 58871300
...@@ -253,19 +253,10 @@ struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl, ...@@ -253,19 +253,10 @@ struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,
void wilc_wfi_deinit_mon_interface(struct wilc *wl) void wilc_wfi_deinit_mon_interface(struct wilc *wl)
{ {
bool rollback_lock = false; if (!wl->monitor_dev)
return;
if (wl->monitor_dev) {
if (rtnl_is_locked()) {
rtnl_unlock();
rollback_lock = true;
}
unregister_netdev(wl->monitor_dev);
if (rollback_lock) { unregister_netdev(wl->monitor_dev);
rtnl_lock(); free_netdev(wl->monitor_dev);
rollback_lock = false; wl->monitor_dev = NULL;
}
wl->monitor_dev = NULL;
}
} }
...@@ -920,7 +920,6 @@ static int wilc_mac_close(struct net_device *ndev) ...@@ -920,7 +920,6 @@ static int wilc_mac_close(struct net_device *ndev)
netdev_dbg(ndev, "Deinitializing wilc1000\n"); netdev_dbg(ndev, "Deinitializing wilc1000\n");
wl->close = 1; wl->close = 1;
wilc_wlan_deinitialize(ndev); wilc_wlan_deinitialize(ndev);
wilc_wfi_deinit_mon_interface(wl);
} }
vif->mac_opened = 0; vif->mac_opened = 0;
...@@ -1006,19 +1005,15 @@ void wilc_netdev_cleanup(struct wilc *wilc) ...@@ -1006,19 +1005,15 @@ void wilc_netdev_cleanup(struct wilc *wilc)
wilc->firmware = NULL; wilc->firmware = NULL;
} }
if (wilc->vif[0]->ndev || wilc->vif[1]->ndev) { for (i = 0; i < WILC_NUM_CONCURRENT_IFC; i++) {
for (i = 0; i < WILC_NUM_CONCURRENT_IFC; i++) if (wilc->vif[i] && wilc->vif[i]->ndev) {
if (wilc->vif[i]->ndev)
if (wilc->vif[i]->mac_opened)
wilc_mac_close(wilc->vif[i]->ndev);
for (i = 0; i < WILC_NUM_CONCURRENT_IFC; i++) {
unregister_netdev(wilc->vif[i]->ndev); unregister_netdev(wilc->vif[i]->ndev);
wilc_free_wiphy(wilc->vif[i]->ndev); wilc_free_wiphy(wilc->vif[i]->ndev);
free_netdev(wilc->vif[i]->ndev); free_netdev(wilc->vif[i]->ndev);
} }
} }
wilc_wfi_deinit_mon_interface(wilc);
flush_workqueue(wilc->hif_workqueue); flush_workqueue(wilc->hif_workqueue);
destroy_workqueue(wilc->hif_workqueue); destroy_workqueue(wilc->hif_workqueue);
wilc_wlan_cfg_deinit(wilc); wilc_wlan_cfg_deinit(wilc);
......
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