1. 16 9月, 2008 7 次提交
    • J
      mac80211: fix scan vs. interface removal race · 5bc75728
      Johannes Berg 提交于
      When we remove an interface, we can currently end up having
      a pointer to it left in local->scan_sdata after it has been
      set down, and then with a hardware scan the scan completion
      can try to access it which is a bug. Alternatively, a scan
      that started as a hardware scan may terminate as though it
      was a software scan, if the timing is just right.
      
      On SMP systems, software scan also has a similar problem,
      just canceling the delayed work and setting a flag isn't
      enough since it may be running concurrently; in this case
      we would also never restore state of other interfaces.
      
      This patch hopefully fixes the problems by always invoking
      ieee80211_scan_completed or requiring it to be invoked by
      the driver, I suspect the drivers that have ->hw_scan() are
      buggy. The bug will not manifest itself unless you remove
      the interface while hw-scanning which will also turn off
      the hw, and then add a new interface which will be unusable
      until you scan once.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      5bc75728
    • J
      mac80211: fix work race · b7413430
      Johannes Berg 提交于
      When we stop an interface, the work on it may still be pending
      or running. We do cancel the timer, but we do not currently
      protect against the work struct. The race is very unlikely to
      hit -- it'll happen only when the driver is using mac80211's
      workqueue to run long-running tasks and the sta/mesh works are
      delayed for quite a bit.
      
      This patch fixes it by cancelling the work explicitly.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      b7413430
    • J
      mac80211: split off mesh handling entirely · 472dbc45
      Johannes Berg 提交于
      This patch splits off mesh handling from the STA/IBSS.
      Unfortunately it increases mesh code size a bit, but I
      think it makes things clearer. The patch also reduces
      per-interface run-time memory usage.
      
      Also clean up a few places where ifdef is not required.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      472dbc45
    • J
      mac80211: dont set REQ_RUN when scan finishes · 7c950695
      Johannes Berg 提交于
      The timer restart is done wrongly, we shouldn't set the REQ_RUN
      bit when the scan has finished if it hadn't been set before the
      scan started. If the timer fires during the scan, it will set
      REQ_RUN and then we can run the work for it, if it didn't fire
      then we shouldn't run its work either.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      7c950695
    • J
      mac80211: move STA timer restart · a1678f84
      Johannes Berg 提交于
      This I shouldn't have moved to the scan implementation, move
      it back to the MLME where it belongs, to the notification.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      a1678f84
    • J
      mac80211: move ieee80211_sta_expire · 24723d1b
      Johannes Berg 提交于
      ieee80211_sta_expire uses the internal __sta_info_unlink
      function which can become static if this function is moved
      to sta_info.c.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      24723d1b
    • L
      cfg80211: Add new wireless regulatory infrastructure · b2e1b302
      Luis R. Rodriguez 提交于
      This adds the new wireless regulatory infrastructure. The
      main motiviation behind this was to centralize regulatory
      code as each driver was implementing their own regulatory solution,
      and to replace the initial centralized code we have where:
      
      * only 3 regulatory domains are supported: US, JP and EU
      * regulatory domains can only be changed through module parameter
      * all rules were built statically in the kernel
      
      We now have support for regulatory domains for many countries
      and regulatory domains are now queried through a userspace agent
      through udev allowing distributions to update regulatory rules
      without updating the kernel.
      
      Each driver can regulatory_hint() a regulatory domain
      based on either their EEPROM mapped regulatory domain value to a
      respective ISO/IEC 3166-1 country code or pass an internally built
      regulatory domain. We also add support to let the user set the
      regulatory domain through userspace in case of faulty EEPROMs to
      further help compliance.
      
      Support for world roaming will be added soon for cards capable of
      this.
      
      For more information see:
      
      http://wireless.kernel.org/en/developers/Regulatory/CRDA
      
      For now we leave an option to enable the old module parameter,
      ieee80211_regdom, and to build the 3 old regdomains statically
      (US, JP and EU). This option is CONFIG_WIRELESS_OLD_REGULATORY.
      These old static definitions and the module parameter is being
      scheduled for removal for 2.6.29. Note that if you use this
      you won't make use of a world regulatory domain as its pointless.
      If you leave this option enabled and if CRDA is present and you
      use US or JP we will try to ask CRDA to update us a regulatory
      domain for us.
      Signed-off-by: NLuis R. Rodriguez <lrodriguez@atheros.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      b2e1b302
  2. 12 9月, 2008 31 次提交
  3. 09 9月, 2008 2 次提交