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

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: default avatarAjay Singh <ajay.kathat@microchip.com>
Link: https://lore.kernel.org/r/20190926151436.27819-2-ajay.kathat@microchip.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 82e46564
...@@ -424,18 +424,6 @@ static int wilc_init_fw_config(struct net_device *dev, struct wilc_vif *vif) ...@@ -424,18 +424,6 @@ static int wilc_init_fw_config(struct net_device *dev, struct wilc_vif *vif)
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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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 @@ int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type, ...@@ -1847,6 +1856,7 @@ int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type,
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, ...@@ -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
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