aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Lamparter <chunkeey@googlemail.com>2012-03-17 09:10:02 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-04-09 16:07:35 -0400
commita9b9361dd5ef6c39703f2f0c8c18aa2e1f133fc5 (patch)
treeedfb2d5ef162602a508257c49e2e6289005c9343
parent52a3f20c09559465f821b54838decb397054e7de (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.c11
-rw-r--r--drivers/net/wireless/p54/p54.h1
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;