diff options
Diffstat (limited to 'drivers/net/wireless/ath/ar9170/main.c')
| -rw-r--r-- | drivers/net/wireless/ath/ar9170/main.c | 13 | 
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ar9170/main.c b/drivers/net/wireless/ath/ar9170/main.c index a6452af9c6c..c5369298099 100644 --- a/drivers/net/wireless/ath/ar9170/main.c +++ b/drivers/net/wireless/ath/ar9170/main.c @@ -38,6 +38,7 @@   */  #include <linux/init.h> +#include <linux/slab.h>  #include <linux/module.h>  #include <linux/etherdevice.h>  #include <net/mac80211.h> @@ -2512,7 +2513,7 @@ void *ar9170_alloc(size_t priv_size)  	/*  	 * this buffer is used for rx stream reconstruction.  	 * Under heavy load this device (or the transport layer?) -	 * tends to split the streams into seperate rx descriptors. +	 * tends to split the streams into separate rx descriptors.  	 */  	skb = __dev_alloc_skb(AR9170_MAX_RX_BUFFER_SIZE, GFP_KERNEL); @@ -2701,7 +2702,8 @@ int ar9170_register(struct ar9170 *ar, struct device *pdev)  	dev_info(pdev, "Atheros AR9170 is registered as '%s'\n",  		 wiphy_name(ar->hw->wiphy)); -	return err; +	ar->registered = true; +	return 0;  err_unreg:  	ieee80211_unregister_hw(ar->hw); @@ -2712,11 +2714,14 @@ err_out:  void ar9170_unregister(struct ar9170 *ar)  { +	if (ar->registered) {  #ifdef CONFIG_AR9170_LEDS -	ar9170_unregister_leds(ar); +		ar9170_unregister_leds(ar);  #endif /* CONFIG_AR9170_LEDS */ -	kfree_skb(ar->rx_failover);  	ieee80211_unregister_hw(ar->hw); +	} + +	kfree_skb(ar->rx_failover);  	mutex_destroy(&ar->mutex);  }  |