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: Ajay Singh <ajay.kathat@microchip.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
588713006e
commit
06fee3d5b3
@ -253,19 +253,10 @@ struct net_device *wilc_wfi_init_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) {
|
||||
rtnl_lock();
|
||||
rollback_lock = false;
|
||||
}
|
||||
wl->monitor_dev = NULL;
|
||||
}
|
||||
unregister_netdev(wl->monitor_dev);
|
||||
free_netdev(wl->monitor_dev);
|
||||
wl->monitor_dev = NULL;
|
||||
}
|
||||
|
@ -920,7 +920,6 @@ static int wilc_mac_close(struct net_device *ndev)
|
||||
netdev_dbg(ndev, "Deinitializing wilc1000\n");
|
||||
wl->close = 1;
|
||||
wilc_wlan_deinitialize(ndev);
|
||||
wilc_wfi_deinit_mon_interface(wl);
|
||||
}
|
||||
|
||||
vif->mac_opened = 0;
|
||||
@ -1006,19 +1005,15 @@ void wilc_netdev_cleanup(struct wilc *wilc)
|
||||
wilc->firmware = NULL;
|
||||
}
|
||||
|
||||
if (wilc->vif[0]->ndev || wilc->vif[1]->ndev) {
|
||||
for (i = 0; i < WILC_NUM_CONCURRENT_IFC; i++)
|
||||
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++) {
|
||||
for (i = 0; i < WILC_NUM_CONCURRENT_IFC; i++) {
|
||||
if (wilc->vif[i] && wilc->vif[i]->ndev) {
|
||||
unregister_netdev(wilc->vif[i]->ndev);
|
||||
wilc_free_wiphy(wilc->vif[i]->ndev);
|
||||
free_netdev(wilc->vif[i]->ndev);
|
||||
}
|
||||
}
|
||||
|
||||
wilc_wfi_deinit_mon_interface(wilc);
|
||||
flush_workqueue(wilc->hif_workqueue);
|
||||
destroy_workqueue(wilc->hif_workqueue);
|
||||
wilc_wlan_cfg_deinit(wilc);
|
||||
|
Loading…
Reference in New Issue
Block a user