On Tue, 2008-11-04 at 18:50 -0800, Luis R. Rodriguez wrote: > So far the __set_regdom() code is pretty generic as the > intersection case is fairly straight forward; this will however > change when 802.11d support is added so lets separate intersection > code for now in preparation for 802.11d support. > > This patch only has slight functional changes. > > Signed-off-by: Luis R. Rodriguez <lrodriguez@xxxxxxxxxxx> Acked-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> > --- > net/wireless/reg.c | 29 +++++++++++++++++++++-------- > 1 files changed, 21 insertions(+), 8 deletions(-) > > diff --git a/net/wireless/reg.c b/net/wireless/reg.c > index 290ecec..845e2d3 100644 > --- a/net/wireless/reg.c > +++ b/net/wireless/reg.c > @@ -826,10 +826,6 @@ static int __set_regdom(const struct ieee80211_regdomain *rd) > if (WARN_ON(!reg_is_valid_request(rd->alpha2))) > return -EINVAL; > > - reset_regdomains(); > - > - /* Country IE parsing coming soon */ > - > if (!is_valid_rd(rd)) { > printk(KERN_ERR "cfg80211: Invalid " > "regulatory domain detected:\n"); > @@ -837,16 +833,33 @@ static int __set_regdom(const struct ieee80211_regdomain *rd) > return -EINVAL; > } > > - if (unlikely(last_request->intersect)) { > + if (!last_request->intersect) { > + reset_regdomains(); > + cfg80211_regdomain = rd; > + return 0; > + } > + > + /* Intersection requires a bit more work */ > + > + if (last_request->initiator != REGDOM_SET_BY_COUNTRY_IE) { > + > intersected_rd = regdom_intersect(rd, cfg80211_regdomain); > if (!intersected_rd) > return -EINVAL; > + > + /* We can trash what CRDA provided now */ > kfree(rd); > - rd = intersected_rd; > + rd = NULL; > + > + reset_regdomains(); > + cfg80211_regdomain = intersected_rd; > + > + return 0; > } > > - /* Tada! */ > - cfg80211_regdomain = rd; > + /* Country IE parsing coming soon */ > + reset_regdomains(); > + WARN_ON(1); > > return 0; > }
Attachment:
signature.asc
Description: This is a digitally signed message part