From 22fe37c6d91904e3db41c7bc9b5462ac8b259351 Mon Sep 17 00:00:00 2001 From: "John W. Linville" Date: Mon, 30 Aug 2010 17:36:40 -0400 Subject: [PATCH] --- yaml --- r: 210256 b: refs/heads/master c: c3d34d5d9654ec9c2510f9341bfb1030b8f029d1 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/wireless/core.c | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index d806ffe8e6d4..1db05ac0c8d1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 42da2f948d949efd0111309f5827bf0298bcc9a4 +refs/heads/master: c3d34d5d9654ec9c2510f9341bfb1030b8f029d1 diff --git a/trunk/net/wireless/core.c b/trunk/net/wireless/core.c index 541e2fff5e9c..d6d046b9f6f2 100644 --- a/trunk/net/wireless/core.c +++ b/trunk/net/wireless/core.c @@ -475,12 +475,10 @@ int wiphy_register(struct wiphy *wiphy) mutex_lock(&cfg80211_mutex); res = device_add(&rdev->wiphy.dev); - if (res) - goto out_unlock; - - res = rfkill_register(rdev->rfkill); - if (res) - goto out_rm_dev; + if (res) { + mutex_unlock(&cfg80211_mutex); + return res; + } /* set up regulatory info */ wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE); @@ -509,13 +507,18 @@ int wiphy_register(struct wiphy *wiphy) cfg80211_debugfs_rdev_add(rdev); mutex_unlock(&cfg80211_mutex); + /* + * due to a locking dependency this has to be outside of the + * cfg80211_mutex lock + */ + res = rfkill_register(rdev->rfkill); + if (res) + goto out_rm_dev; + return 0; out_rm_dev: device_del(&rdev->wiphy.dev); - -out_unlock: - mutex_unlock(&cfg80211_mutex); return res; } EXPORT_SYMBOL(wiphy_register);