From 2792972395356254252f12205915a32dce9f50e4 Mon Sep 17 00:00:00 2001 From: Vasanthakumar Thiagarajan Date: Tue, 25 Oct 2011 19:34:21 +0530 Subject: [PATCH] ath6kl: Use the other variant of netdev (un)register APIs Use replace (un)register_netdev() with (un)register_netdevice() so that the same ath6kl function can be used with add_virtual_intf()/del_virtual_intf(). Signed-off-by: Vasanthakumar Thiagarajan Signed-off-by: Kalle Valo --- drivers/net/wireless/ath/ath6kl/cfg80211.c | 15 ++++----------- drivers/net/wireless/ath/ath6kl/init.c | 12 ++++++++++-- drivers/net/wireless/ath/ath6kl/main.c | 1 + 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c index da4e46d63b96..893bd2c30720 100644 --- a/drivers/net/wireless/ath/ath6kl/cfg80211.c +++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c @@ -2099,14 +2099,7 @@ void ath6kl_deinit_if_data(struct ath6kl_vif *vif) { aggr_module_destroy(vif->aggr_cntxt); - vif->aggr_cntxt = NULL; - - if (test_bit(NETDEV_REGISTERED, &vif->flags)) { - unregister_netdev(vif->ndev); - clear_bit(NETDEV_REGISTERED, &vif->flags); - } - - free_netdev(vif->ndev); + unregister_netdevice(vif->ndev); } struct net_device *ath6kl_interface_add(struct ath6kl *ar, char *name, @@ -2138,7 +2131,7 @@ struct net_device *ath6kl_interface_add(struct ath6kl *ar, char *name, if (ath6kl_init_if_data(vif)) goto err; - if (register_netdev(ndev)) + if (register_netdevice(ndev)) goto err; vif->sme_state = SME_DISCONNECTED; @@ -2153,8 +2146,8 @@ struct net_device *ath6kl_interface_add(struct ath6kl *ar, char *name, return ndev; err: - ath6kl_deinit_if_data(vif); - + aggr_module_destroy(vif->aggr_cntxt); + free_netdev(ndev); return NULL; } diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c index 61a941db17a5..83ad008a3b60 100644 --- a/drivers/net/wireless/ath/ath6kl/init.c +++ b/drivers/net/wireless/ath/ath6kl/init.c @@ -1416,8 +1416,13 @@ static int ath6kl_init(struct ath6kl *ar) goto err_node_cleanup; } + rtnl_lock(); + /* Add an initial station interface */ ndev = ath6kl_interface_add(ar, "wlan%d", NL80211_IFTYPE_STATION, 0); + + rtnl_unlock(); + if (!ndev) { ath6kl_err("Failed to instantiate a network device\n"); status = -ENOMEM; @@ -1523,7 +1528,9 @@ err_rxbuf_cleanup: err_cleanup_scatter: ath6kl_hif_cleanup_scatter(ar); err_if_deinit: + rtnl_lock(); ath6kl_deinit_if_data(netdev_priv(ndev)); + rtnl_unlock(); wiphy_unregister(ar->wiphy); err_debug_init: ath6kl_debug_cleanup(ar); @@ -1622,8 +1629,6 @@ static void ath6kl_cleanup_vif(struct ath6kl_vif *vif, bool wmi_ready) cfg80211_scan_done(vif->scan_req, true); vif->scan_req = NULL; } - - ath6kl_deinit_if_data(vif); } void ath6kl_stop_txrx(struct ath6kl *ar) @@ -1642,6 +1647,9 @@ void ath6kl_stop_txrx(struct ath6kl *ar) list_del(&vif->list); spin_unlock(&ar->list_lock); ath6kl_cleanup_vif(vif, test_bit(WMI_READY, &ar->flag)); + rtnl_lock(); + ath6kl_deinit_if_data(vif); + rtnl_unlock(); spin_lock(&ar->list_lock); } spin_unlock(&ar->list_lock); diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c index 17cabdce62dc..9ccdc4d26565 100644 --- a/drivers/net/wireless/ath/ath6kl/main.c +++ b/drivers/net/wireless/ath/ath6kl/main.c @@ -1445,6 +1445,7 @@ static struct net_device_ops ath6kl_netdev_ops = { void init_netdev(struct net_device *dev) { dev->netdev_ops = &ath6kl_netdev_ops; + dev->destructor = free_netdev; dev->watchdog_timeo = ATH6KL_TX_TIMEOUT; dev->needed_headroom = ETH_HLEN; -- 2.20.1