Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
[linux-2.6-microblaze.git] / net / wireless / reg.c
index a04fdfb..bb72447 100644 (file)
@@ -1616,7 +1616,7 @@ static const struct ieee80211_reg_rule *
 __freq_reg_info(struct wiphy *wiphy, u32 center_freq, u32 min_bw)
 {
        const struct ieee80211_regdomain *regd = reg_get_regdomain(wiphy);
-       const u32 bws[] = {0, 1, 2, 4, 5, 8, 10, 16, 20};
+       static const u32 bws[] = {0, 1, 2, 4, 5, 8, 10, 16, 20};
        const struct ieee80211_reg_rule *reg_rule;
        int i = ARRAY_SIZE(bws) - 1;
        u32 bw;
@@ -2547,6 +2547,7 @@ static void handle_band_custom(struct wiphy *wiphy,
 void wiphy_apply_custom_regulatory(struct wiphy *wiphy,
                                   const struct ieee80211_regdomain *regd)
 {
+       const struct ieee80211_regdomain *new_regd, *tmp;
        enum nl80211_band band;
        unsigned int bands_set = 0;
 
@@ -2566,6 +2567,13 @@ void wiphy_apply_custom_regulatory(struct wiphy *wiphy,
         * on your device's supported bands.
         */
        WARN_ON(!bands_set);
+       new_regd = reg_copy_regd(regd);
+       if (IS_ERR(new_regd))
+               return;
+
+       tmp = get_wiphy_regdom(wiphy);
+       rcu_assign_pointer(wiphy->regd, new_regd);
+       rcu_free_regdom(tmp);
 }
 EXPORT_SYMBOL(wiphy_apply_custom_regulatory);