staging: wilc1000: move wlan_deinit_locks() in wilc_netdev_cleanup()
Move deinitialization of lock during the module remove and the initialization of lock wilc_cfg80211_init(). This to ensure locks are available during module load and gets free during unload. Signed-off-by: Ajay Singh <ajay.kathat@microchip.com> Link: https://lore.kernel.org/r/20190926151436.27819-2-ajay.kathat@microchip.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
82e465642f
commit
fb2d74342f
|
@ -424,18 +424,6 @@ fail:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wlan_deinit_locks(struct net_device *dev)
|
|
||||||
{
|
|
||||||
struct wilc_vif *vif = netdev_priv(dev);
|
|
||||||
struct wilc *wilc = vif->wilc;
|
|
||||||
|
|
||||||
mutex_destroy(&wilc->hif_cs);
|
|
||||||
mutex_destroy(&wilc->rxq_cs);
|
|
||||||
mutex_destroy(&wilc->cfg_cmd_lock);
|
|
||||||
mutex_destroy(&wilc->txq_add_to_head_cs);
|
|
||||||
mutex_destroy(&wilc->vif_mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void wlan_deinitialize_threads(struct net_device *dev)
|
static void wlan_deinitialize_threads(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct wilc_vif *vif = netdev_priv(dev);
|
struct wilc_vif *vif = netdev_priv(dev);
|
||||||
|
@ -477,7 +465,6 @@ static void wilc_wlan_deinitialize(struct net_device *dev)
|
||||||
|
|
||||||
wilc_wlan_stop(wl, vif);
|
wilc_wlan_stop(wl, vif);
|
||||||
wilc_wlan_cleanup(dev);
|
wilc_wlan_cleanup(dev);
|
||||||
wlan_deinit_locks(dev);
|
|
||||||
|
|
||||||
wl->initialized = false;
|
wl->initialized = false;
|
||||||
|
|
||||||
|
@ -875,6 +862,7 @@ void wilc_netdev_cleanup(struct wilc *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);
|
||||||
|
wlan_deinit_locks(wilc);
|
||||||
kfree(wilc->bus_data);
|
kfree(wilc->bus_data);
|
||||||
wiphy_unregister(wilc->wiphy);
|
wiphy_unregister(wilc->wiphy);
|
||||||
wiphy_free(wilc->wiphy);
|
wiphy_free(wilc->wiphy);
|
||||||
|
|
|
@ -1802,6 +1802,15 @@ static void wlan_init_locks(struct wilc *wl)
|
||||||
init_completion(&wl->txq_thread_started);
|
init_completion(&wl->txq_thread_started);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlan_deinit_locks(struct wilc *wilc)
|
||||||
|
{
|
||||||
|
mutex_destroy(&wilc->hif_cs);
|
||||||
|
mutex_destroy(&wilc->rxq_cs);
|
||||||
|
mutex_destroy(&wilc->cfg_cmd_lock);
|
||||||
|
mutex_destroy(&wilc->txq_add_to_head_cs);
|
||||||
|
mutex_destroy(&wilc->vif_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type,
|
int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type,
|
||||||
const struct wilc_hif_func *ops)
|
const struct wilc_hif_func *ops)
|
||||||
{
|
{
|
||||||
|
@ -1813,6 +1822,8 @@ int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type,
|
||||||
if (!wl)
|
if (!wl)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
wlan_init_locks(wl);
|
||||||
|
|
||||||
ret = wilc_wlan_cfg_init(wl);
|
ret = wilc_wlan_cfg_init(wl);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto free_wl;
|
goto free_wl;
|
||||||
|
@ -1836,8 +1847,6 @@ int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type,
|
||||||
goto free_hq;
|
goto free_hq;
|
||||||
}
|
}
|
||||||
|
|
||||||
wlan_init_locks(wl);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
free_hq:
|
free_hq:
|
||||||
|
@ -1847,6 +1856,7 @@ free_cfg:
|
||||||
wilc_wlan_cfg_deinit(wl);
|
wilc_wlan_cfg_deinit(wl);
|
||||||
|
|
||||||
free_wl:
|
free_wl:
|
||||||
|
wlan_deinit_locks(wl);
|
||||||
wiphy_unregister(wl->wiphy);
|
wiphy_unregister(wl->wiphy);
|
||||||
wiphy_free(wl->wiphy);
|
wiphy_free(wl->wiphy);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -24,4 +24,5 @@ struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,
|
||||||
void wilc_mgmt_frame_register(struct wiphy *wiphy, struct wireless_dev *wdev,
|
void wilc_mgmt_frame_register(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||||
u16 frame_type, bool reg);
|
u16 frame_type, bool reg);
|
||||||
struct wilc_vif *wilc_get_interface(struct wilc *wl);
|
struct wilc_vif *wilc_get_interface(struct wilc *wl);
|
||||||
|
void wlan_deinit_locks(struct wilc *wilc);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue