diff options
author | John W. Linville <linville@tuxdriver.com> | 2013-10-03 16:00:03 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-10-03 16:00:03 -0400 |
commit | 1eea72f03a139146f341e450cf56934b2e01a4d3 (patch) | |
tree | 65c8d14751a9920263722eea64784e87a246ec66 /net/wireless/core.c | |
parent | 569943d0639c85a451ea853087cbd5f738247dd9 (diff) | |
parent | f69727fd78fa761dc49ee3091c432a8c6ab81292 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
Diffstat (limited to 'net/wireless/core.c')
-rw-r--r-- | net/wireless/core.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index 67153964aad..fe8d4f2be49 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -566,18 +566,13 @@ int wiphy_register(struct wiphy *wiphy) /* check and set up bitrates */ ieee80211_set_bitrate_flags(wiphy); - + rtnl_lock(); res = device_add(&rdev->wiphy.dev); - if (res) - return res; - - res = rfkill_register(rdev->rfkill); if (res) { - device_del(&rdev->wiphy.dev); + rtnl_unlock(); return res; } - rtnl_lock(); /* set up regulatory info */ wiphy_regulatory_register(wiphy); @@ -606,6 +601,15 @@ int wiphy_register(struct wiphy *wiphy) rdev->wiphy.registered = true; rtnl_unlock(); + + res = rfkill_register(rdev->rfkill); + if (res) { + rfkill_destroy(rdev->rfkill); + rdev->rfkill = NULL; + wiphy_unregister(&rdev->wiphy); + return res; + } + return 0; } EXPORT_SYMBOL(wiphy_register); @@ -640,7 +644,8 @@ void wiphy_unregister(struct wiphy *wiphy) rtnl_unlock(); __count == 0; })); - rfkill_unregister(rdev->rfkill); + if (rdev->rfkill) + rfkill_unregister(rdev->rfkill); rtnl_lock(); rdev->wiphy.registered = false; |