|
@@ -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);
|