• Luis R. Rodriguez's avatar
    cfg80211: fix processing world regdomain when non modular · 96cce12f
    Luis R. Rodriguez authored
    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: default avatarSander Eikelenboom <linux@eikelenboom.it>
    Signed-off-by: default avatarLuis R. Rodriguez <mcgrof@suse.com>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    96cce12f
reg.c 73.6 KB