2013-12-06 14:25:17

by Avinash Patil

[permalink] [raw]
Subject: [RFC] cfg80211: set regulatory request processed for initiator core

During cfg80211 init, cfg80211 initializes regulatory to set to
world domain. Here we dont set last request processed flag.
This results into further request set to pending indefinitely.

This patch fixes this by setting last request to processed.

Signed-off-by: Avinash Patil <[email protected]>
---
net/wireless/reg.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index ec54e1a..70a8f0a 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1670,6 +1670,8 @@ static void reg_process_hint(struct regulatory_request *reg_request)
switch (reg_request->initiator) {
case NL80211_REGDOM_SET_BY_CORE:
reg_process_hint_core(reg_request);
+ nl80211_send_reg_change_event(reg_request);
+ reg_set_request_processed();
return;
case NL80211_REGDOM_SET_BY_USER:
treatment = reg_process_hint_user(reg_request);
--
1.7.3.4



2013-12-11 18:01:55

by Luis Chamberlain

[permalink] [raw]
Subject: Re: [RFC] cfg80211: set regulatory request processed for initiator core

On Wed, Dec 11, 2013 at 6:38 PM, Luis R. Rodriguez
<[email protected]> wrote:
> On Sat, Dec 7, 2013 at 4:54 AM, Avinash Patil <[email protected]> wrote:
>> During cfg80211 init, cfg80211 initializes regulatory to set to
>> world domain. Here we dont set last request processed flag.
>> This results into further request set to pending indefinitely.
>>
>> This patch fixes this by setting last request to processed.
>>
>> Signed-off-by: Avinash Patil <[email protected]>
>> ---
>> net/wireless/reg.c | 2 ++
>> 1 files changed, 2 insertions(+), 0 deletions(-)
>>
>> diff --git a/net/wireless/reg.c b/net/wireless/reg.c
>> index ec54e1a..70a8f0a 100644
>> --- a/net/wireless/reg.c
>> +++ b/net/wireless/reg.c
>> @@ -1670,6 +1670,8 @@ static void reg_process_hint(struct regulatory_request *reg_request)
>> switch (reg_request->initiator) {
>> case NL80211_REGDOM_SET_BY_CORE:
>> reg_process_hint_core(reg_request);
>> + nl80211_send_reg_change_event(reg_request);
>> + reg_set_request_processed();
>> return;
>> case NL80211_REGDOM_SET_BY_USER:
>> treatment = reg_process_hint_user(reg_request);
>
> NACK, the reg_process_hint() is supposed to *process* a request, and
> then call the internal regdb if its there and also call CRDA. Later
> whoever sends the regulatory domain and gets cfg80211 to process it
> will have reg_set_request_processed() called.
>
> Can you verify if CRDA is sending the regulatory domains to cfg80211?

Also are you seeing this with wireless-testing ?

Luis

2013-12-11 17:39:07

by Luis Chamberlain

[permalink] [raw]
Subject: Re: [RFC] cfg80211: set regulatory request processed for initiator core

On Sat, Dec 7, 2013 at 4:54 AM, Avinash Patil <[email protected]> wrote:
> During cfg80211 init, cfg80211 initializes regulatory to set to
> world domain. Here we dont set last request processed flag.
> This results into further request set to pending indefinitely.
>
> This patch fixes this by setting last request to processed.
>
> Signed-off-by: Avinash Patil <[email protected]>
> ---
> net/wireless/reg.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/net/wireless/reg.c b/net/wireless/reg.c
> index ec54e1a..70a8f0a 100644
> --- a/net/wireless/reg.c
> +++ b/net/wireless/reg.c
> @@ -1670,6 +1670,8 @@ static void reg_process_hint(struct regulatory_request *reg_request)
> switch (reg_request->initiator) {
> case NL80211_REGDOM_SET_BY_CORE:
> reg_process_hint_core(reg_request);
> + nl80211_send_reg_change_event(reg_request);
> + reg_set_request_processed();
> return;
> case NL80211_REGDOM_SET_BY_USER:
> treatment = reg_process_hint_user(reg_request);

NACK, the reg_process_hint() is supposed to *process* a request, and
then call the internal regdb if its there and also call CRDA. Later
whoever sends the regulatory domain and gets cfg80211 to process it
will have reg_set_request_processed() called.

Can you verify if CRDA is sending the regulatory domains to cfg80211?

Luis

2013-12-13 12:11:27

by Avinash Patil

[permalink] [raw]
Subject: RE: [RFC] cfg80211: set regulatory request processed for initiator core

Hi Luis,

I am using 3.13rc2 kernel; last commit on this branch is "ad17d104284ea4a301126b475df3bef03258142a".

If we set regulatory domain via "iw reg set US" we see following in dmesg logs:
cfg80211: Pending regulatory request, waiting for it to be processed...
Udevm monitor (via udevadm monitor --environment kernel) also does not print any CRDA domain change messages.

I have pasted dmesg logs at following location:
http://pastebin.com/kkNagpSu

If we apply below mentioned patch, last request is set to processed enabling cfg80211 to send further requests.

Thanks,
Avinash Patil


________________________________________
From: [email protected] [[email protected]] On Behalf Of Luis R. Rodriguez [[email protected]]
Sent: Wednesday, December 11, 2013 11:31 PM
To: Avinash Patil
Cc: Johannes Berg; linux-wireless
Subject: Re: [RFC] cfg80211: set regulatory request processed for initiator core

On Wed, Dec 11, 2013 at 6:38 PM, Luis R. Rodriguez
<[email protected]> wrote:
> On Sat, Dec 7, 2013 at 4:54 AM, Avinash Patil <[email protected]> wrote:
>> During cfg80211 init, cfg80211 initializes regulatory to set to
>> world domain. Here we dont set last request processed flag.
>> This results into further request set to pending indefinitely.
>>
>> This patch fixes this by setting last request to processed.
>>
>> Signed-off-by: Avinash Patil <[email protected]>
>> ---
>> net/wireless/reg.c | 2 ++
>> 1 files changed, 2 insertions(+), 0 deletions(-)
>>
>> diff --git a/net/wireless/reg.c b/net/wireless/reg.c
>> index ec54e1a..70a8f0a 100644
>> --- a/net/wireless/reg.c
>> +++ b/net/wireless/reg.c
>> @@ -1670,6 +1670,8 @@ static void reg_process_hint(struct regulatory_request *reg_request)
>> switch (reg_request->initiator) {
>> case NL80211_REGDOM_SET_BY_CORE:
>> reg_process_hint_core(reg_request);
>> + nl80211_send_reg_change_event(reg_request);
>> + reg_set_request_processed();
>> return;
>> case NL80211_REGDOM_SET_BY_USER:
>> treatment = reg_process_hint_user(reg_request);
>
> NACK, the reg_process_hint() is supposed to *process* a request, and
> then call the internal regdb if its there and also call CRDA. Later
> whoever sends the regulatory domain and gets cfg80211 to process it
> will have reg_set_request_processed() called.
>
> Can you verify if CRDA is sending the regulatory domains to cfg80211?

Also are you seeing this with wireless-testing ?

Luis