mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-25 08:51:09 +02:00
mac80211: fix regdb locking issues
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33398 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
7db7c73ad4
commit
697af1c08d
@ -327,3 +327,38 @@
|
|||||||
priv->tsf_high32 = 0;
|
priv->tsf_high32 = 0;
|
||||||
priv->tsf_low32 = 0;
|
priv->tsf_low32 = 0;
|
||||||
|
|
||||||
|
--- a/net/wireless/reg.c
|
||||||
|
+++ b/net/wireless/reg.c
|
||||||
|
@@ -352,6 +352,9 @@ static void reg_regdb_search(struct work
|
||||||
|
struct reg_regdb_search_request *request;
|
||||||
|
const struct ieee80211_regdomain *curdom, *regdom;
|
||||||
|
int i, r;
|
||||||
|
+ bool set_reg = false;
|
||||||
|
+
|
||||||
|
+ mutex_lock(&cfg80211_mutex);
|
||||||
|
|
||||||
|
mutex_lock(®_regdb_search_mutex);
|
||||||
|
while (!list_empty(®_regdb_search_list)) {
|
||||||
|
@@ -367,9 +370,7 @@ static void reg_regdb_search(struct work
|
||||||
|
r = reg_copy_regd(®dom, curdom);
|
||||||
|
if (r)
|
||||||
|
break;
|
||||||
|
- mutex_lock(&cfg80211_mutex);
|
||||||
|
- set_regdom(regdom);
|
||||||
|
- mutex_unlock(&cfg80211_mutex);
|
||||||
|
+ set_reg = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -377,6 +378,11 @@ static void reg_regdb_search(struct work
|
||||||
|
kfree(request);
|
||||||
|
}
|
||||||
|
mutex_unlock(®_regdb_search_mutex);
|
||||||
|
+
|
||||||
|
+ if (set_reg)
|
||||||
|
+ set_regdom(regdom);
|
||||||
|
+
|
||||||
|
+ mutex_unlock(&cfg80211_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static DECLARE_WORK(reg_regdb_work, reg_regdb_search);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net/wireless/reg.c
|
--- a/net/wireless/reg.c
|
||||||
+++ b/net/wireless/reg.c
|
+++ b/net/wireless/reg.c
|
||||||
@@ -1790,6 +1790,8 @@ void regulatory_hint_11d(struct wiphy *w
|
@@ -1796,6 +1796,8 @@ void regulatory_hint_11d(struct wiphy *w
|
||||||
enum environment_cap env = ENVIRON_ANY;
|
enum environment_cap env = ENVIRON_ANY;
|
||||||
struct regulatory_request *request;
|
struct regulatory_request *request;
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
mutex_lock(®_mutex);
|
mutex_lock(®_mutex);
|
||||||
|
|
||||||
if (unlikely(!last_request))
|
if (unlikely(!last_request))
|
||||||
@@ -2024,6 +2026,8 @@ static void restore_regulatory_settings(
|
@@ -2030,6 +2032,8 @@ static void restore_regulatory_settings(
|
||||||
|
|
||||||
void regulatory_hint_disconnect(void)
|
void regulatory_hint_disconnect(void)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user