• Johannes Berg's avatar
    mac80211: fix deferred hardware scan requests · c0ce77b8
    Johannes Berg authored
    Reinette found the reason for the warnings that
    happened occasionally when a hw-offloaded scan
    finished; her description of the problem:
    
      mac80211 will defer the handling of scan requests if it is
      busy with management work at the time. The scan requests
      are deferred and run after the work has completed. When
      this occurs there are currently two problems.
    
      * The scan request for hardware scan is not fully populated
        with the band and channels to scan not initialized.
    
      * When the scan is queued the state is not correctly updated
        to reflect that a scan is in progress. The problem here is
        that when the driver completes the scan and calls
        ieee80211_scan_completed() a warning will be triggered
        since mac80211 was not aware that a scan was in progress.
    
    The reason is that the queued scan work will start
    the hw scan right away when the hw_scan_req struct
    has already been allocated. However, in the first
    pass it will not have been filled, which happens
    at the same time as setting the bits. To fix this,
    simply move the allocation after the pending work
    test as well, so that the first iteration of the
    scan work will call __ieee80211_start_scan() even
    in the hardware scan case.
    Bug-identified-by: default avatarReinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    c0ce77b8
scan.c 21.5 KB