Search Linux Wireless

Re: [PATCH 05/10] cfg80211: add regulatory_hint_core() to separate the core reg hint

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Feb 16, 2009 at 12:50 AM, Johannes Berg
<johannes@xxxxxxxxxxxxxxxx> wrote:
> On Mon, 2009-02-16 at 00:14 -0800, Luis R. Rodriguez wrote:
>> On Sun, Feb 15, 2009 at 2:59 AM, Johannes Berg
>> <johannes@xxxxxxxxxxxxxxxx> wrote:
>> > On Fri, 2009-02-13 at 21:33 -0800, Luis R. Rodriguez wrote:
>> >> This will allow us to clean up and make distinctions of who
>> >> needs locking or not.
>> >>
>> >> Signed-off-by: Luis R. Rodriguez <lrodriguez@xxxxxxxxxxx>
>> >> ---
>> >>  net/wireless/reg.c |   36 +++++++++++++++++++++++++++---------
>> >>  1 files changed, 27 insertions(+), 9 deletions(-)
>> >>
>> >> diff --git a/net/wireless/reg.c b/net/wireless/reg.c
>> >> index ba82312..679fded 100644
>> >> --- a/net/wireless/reg.c
>> >> +++ b/net/wireless/reg.c
>> >> @@ -1050,11 +1050,7 @@ static int ignore_request(struct wiphy *wiphy, enum reg_set_by set_by,
>> >>       case REGDOM_SET_BY_INIT:
>> >>               return -EINVAL;
>> >>       case REGDOM_SET_BY_CORE:
>> >> -             /*
>> >> -              * Always respect new wireless core hints, should only happen
>> >> -              * when updating the world regulatory domain at init.
>> >> -              */
>> >> -             return 0;
>> >> +             return -EINVAL;
>> >>       case REGDOM_SET_BY_COUNTRY_IE:
>> >>               if (unlikely(!is_an_alpha2(alpha2)))
>> >>                       return -EINVAL;
>> >> @@ -1183,6 +1179,26 @@ new_request:
>> >>       return call_crda(alpha2);
>> >>  }
>> >>
>> >> +static int regulatory_hint_core(const char *alpha2)
>> >> +{
>> >> +     struct regulatory_request *request;
>> >> +
>> >> +     BUG_ON(last_request);
>> >> +
>> >> +     request = kzalloc(sizeof(struct regulatory_request),
>> >> +                       GFP_KERNEL);
>> >> +     if (!request)
>> >> +             return -ENOMEM;
>> >> +
>> >> +     request->alpha2[0] = alpha2[0];
>> >> +     request->alpha2[1] = alpha2[1];
>> >> +     request->initiator = REGDOM_SET_BY_CORE;
>> >> +
>> >> +     last_request = request;
>> >
>> > So before you documented that cfg80211_mutex is used to protect this
>> > variable, but it's not used here.
>>
>> This is only used during initialization, have any better ideas?
>
> If regulatory is initialised before netlink that is probably fine, is
> it?

Yeah I was hoping that would be the case but then I realized that we
also end up creating a udev event to call crda and we need nl80211
initialized in order to process these hints so technically we have a
race between regulatory_init() finishing and nl80211_init() get done
before we can let nl80211 process the first CORE call to crda so it
may be dropped -- unless we are sure udev will do some sort of
retries.

An alternative is to add the regulatory_request() for core to the
queue and then call a reg_post_init() on core.c  that would just
schedule the reg workqueue after nl80211_init().

Thoughts?

  Luis
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux