aboutsummaryrefslogtreecommitdiff
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorLuis R. Rodriguez <lrodriguez@atheros.com>2009-02-21 00:04:30 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-02-27 14:52:57 -0500
commitfe33eb390854886e1fd5d4835d833b80d145aafb (patch)
tree5349c48092c9528b5640d5981425e161e0731ed3 /net/wireless/nl80211.c
parent0441d6ffc705de17d85923264a1b03b71ebfccb8 (diff)
downloadlinux-fe33eb390854886e1fd5d4835d833b80d145aafb.tar.gz
cfg80211: move all regulatory hints to workqueue
All regulatory hints (core, driver, userspace and 11d) are now processed in a workqueue. Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index e0d3879b885..97f69bed3fe 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1915,34 +1915,24 @@ static int nl80211_req_set_reg(struct sk_buff *skb, struct genl_info *info)
*/
mutex_lock(&cfg80211_mutex);
if (unlikely(!cfg80211_regdomain)) {
- r = -EINPROGRESS;
- goto out;
+ mutex_unlock(&cfg80211_mutex);
+ return -EINPROGRESS;
}
+ mutex_unlock(&cfg80211_mutex);
- if (!info->attrs[NL80211_ATTR_REG_ALPHA2]) {
- r = -EINVAL;
- goto out;
- }
+ if (!info->attrs[NL80211_ATTR_REG_ALPHA2])
+ return -EINVAL;
data = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]);
#ifdef CONFIG_WIRELESS_OLD_REGULATORY
/* We ignore world regdom requests with the old regdom setup */
- if (is_world_regdom(data)) {
- r = -EINVAL;
- goto out;
- }
+ if (is_world_regdom(data))
+ return -EINVAL;
#endif
- r = __regulatory_hint(NULL, REGDOM_SET_BY_USER, data, 0, ENVIRON_ANY);
- /*
- * This means the regulatory domain was already set, however
- * we don't want to confuse userspace with a "successful error"
- * message so lets just treat it as a success
- */
- if (r == -EALREADY)
- r = 0;
-out:
- mutex_unlock(&cfg80211_mutex);
+
+ r = regulatory_hint_user(data);
+
return r;
}