diff options
author | Christian Lamparter <chunkeey@googlemail.com> | 2012-03-17 09:10:02 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-04-09 16:07:35 -0400 |
commit | a9b9361dd5ef6c39703f2f0c8c18aa2e1f133fc5 (patch) | |
tree | edfb2d5ef162602a508257c49e2e6289005c9343 | |
parent | 52a3f20c09559465f821b54838decb397054e7de (diff) |
p54: only unregister ieee80211_hw when it has been registered
p54_unregister_common may now be called by the backend
driver's remove routine, even if the ieee80211_hw device
struct was never successfully registered.
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/p54/main.c | 11 | ||||
-rw-r--r-- | drivers/net/wireless/p54/p54.h | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/wireless/p54/main.c b/drivers/net/wireless/p54/main.c index ee8af1f047c8..7cffea795ad2 100644 --- a/drivers/net/wireless/p54/main.c +++ b/drivers/net/wireless/p54/main.c | |||
@@ -796,11 +796,14 @@ int p54_register_common(struct ieee80211_hw *dev, struct device *pdev) | |||
796 | dev_err(pdev, "Cannot register device (%d).\n", err); | 796 | dev_err(pdev, "Cannot register device (%d).\n", err); |
797 | return err; | 797 | return err; |
798 | } | 798 | } |
799 | priv->registered = true; | ||
799 | 800 | ||
800 | #ifdef CONFIG_P54_LEDS | 801 | #ifdef CONFIG_P54_LEDS |
801 | err = p54_init_leds(priv); | 802 | err = p54_init_leds(priv); |
802 | if (err) | 803 | if (err) { |
804 | p54_unregister_common(dev); | ||
803 | return err; | 805 | return err; |
806 | } | ||
804 | #endif /* CONFIG_P54_LEDS */ | 807 | #endif /* CONFIG_P54_LEDS */ |
805 | 808 | ||
806 | dev_info(pdev, "is registered as '%s'\n", wiphy_name(dev->wiphy)); | 809 | dev_info(pdev, "is registered as '%s'\n", wiphy_name(dev->wiphy)); |
@@ -840,7 +843,11 @@ void p54_unregister_common(struct ieee80211_hw *dev) | |||
840 | p54_unregister_leds(priv); | 843 | p54_unregister_leds(priv); |
841 | #endif /* CONFIG_P54_LEDS */ | 844 | #endif /* CONFIG_P54_LEDS */ |
842 | 845 | ||
843 | ieee80211_unregister_hw(dev); | 846 | if (priv->registered) { |
847 | priv->registered = false; | ||
848 | ieee80211_unregister_hw(dev); | ||
849 | } | ||
850 | |||
844 | mutex_destroy(&priv->conf_mutex); | 851 | mutex_destroy(&priv->conf_mutex); |
845 | mutex_destroy(&priv->eeprom_mutex); | 852 | mutex_destroy(&priv->eeprom_mutex); |
846 | } | 853 | } |
diff --git a/drivers/net/wireless/p54/p54.h b/drivers/net/wireless/p54/p54.h index 452fa3a64aa1..40b401ed6845 100644 --- a/drivers/net/wireless/p54/p54.h +++ b/drivers/net/wireless/p54/p54.h | |||
@@ -173,6 +173,7 @@ struct p54_common { | |||
173 | struct sk_buff_head tx_pending; | 173 | struct sk_buff_head tx_pending; |
174 | struct sk_buff_head tx_queue; | 174 | struct sk_buff_head tx_queue; |
175 | struct mutex conf_mutex; | 175 | struct mutex conf_mutex; |
176 | bool registered; | ||
176 | 177 | ||
177 | /* memory management (as seen by the firmware) */ | 178 | /* memory management (as seen by the firmware) */ |
178 | u32 rx_start; | 179 | u32 rx_start; |