]> git.baikalelectronics.ru Git - kernel.git/commit
cfg80211: fix processing world regdomain when non modular
authorLuis R. Rodriguez <mcgrof@suse.com>
Tue, 22 Apr 2014 03:39:35 +0000 (20:39 -0700)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 22 Apr 2014 15:17:56 +0000 (17:17 +0200)
commit359a02c6045b6347102e5f5a9836b58a2e10c77d
tree9bc91feac400517edf173578980dd17af78dd39f
parent4d5706e76e2404026e3ea43c5f36969e47d9098c
cfg80211: fix processing world regdomain when non modular

This allows processing of the last regulatory request when
we determine its still pending. Without this if a regulatory
request failed to get processed by userspace we wouldn't
be able to re-process it later. An example situation that can
lead to an unprocessed last_request is enabling cfg80211 to
be built-in to the kernel, not enabling CFG80211_INTERNAL_REGDB
and the CRDA binary not being available at the time the udev
rule that kicks of CRDA triggers.

In such a situation we want to let some cfg80211 triggers
eventually kick CRDA for us again. Without this if the first
cycle attempt to kick off CRDA failed we'd be stuck without
the ability to change process any further regulatory domains.

cfg80211 will trigger re-processing of the regulatory queue
whenever schedule_work(&reg_work) is called, currently this
happens when:

  * suspend / resume
  * disconnect
  * a beacon hint gets triggered (non DFS 5 GHz AP found)
  * a regulatory request gets added to the queue

We don't have any specific opportunistic late boot triggers
to address a late mount of where CRDA resides though, adding
that should be done separately through another patch.
Without an opportunistic fix then this fix relies at least
one of the triggeres above to happen.

Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/reg.c