| Index: chromeos/compat-wireless/net/wireless/core.c
|
| diff --git a/chromeos/compat-wireless/net/wireless/core.c b/chromeos/compat-wireless/net/wireless/core.c
|
| index 57fafd38d34561b15bdc53a7be727fb23d08d6a7..f6408d899d86f1880cdf500c147da3c00b50dbfe 100644
|
| --- a/chromeos/compat-wireless/net/wireless/core.c
|
| +++ b/chromeos/compat-wireless/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);
|
|
|