1. 05 9月, 2014 1 次提交
  2. 03 9月, 2014 1 次提交
    • M
      mac80211: fix offloaded BA session traffic after hw restart · 4549cf2b
      Michal Kazior 提交于
      When starting an offloaded BA session it is
      unknown what starting sequence number should be
      used. Using last_seq worked in most cases except
      after hw restart.
      
      When hw restart is requested last_seq is
      (rightfully so) kept unmodified. This ended up
      with BA sessions being restarted with an aribtrary
      BA window values resulting in dropped frames until
      sequence numbers caught up.
      
      Instead of last_seq pick seqno of a first Rxed
      frame of a given BA session.
      
      This fixes stalled traffic after hw restart with
      offloaded BA sessions (currently only ath10k).
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      4549cf2b
  3. 26 8月, 2014 1 次提交
  4. 21 7月, 2014 2 次提交
  5. 23 6月, 2014 1 次提交
    • J
      mac80211: fix station/driver powersave race · 5ac2e350
      Johannes Berg 提交于
      It is currently possible to have a race due to the station PS
      unblock work like this:
       * station goes to sleep with frames buffered in the driver
       * driver blocks wakeup
       * station wakes up again
       * driver flushes/returns frames, and unblocks, which schedules
         the unblock work
       * unblock work starts to run, and checks that the station is
         awake (i.e. that the WLAN_STA_PS_STA flag isn't set)
       * we process a received frame with PM=1, setting the flag again
       * ieee80211_sta_ps_deliver_wakeup() runs, delivering all frames
         to the driver, and then clearing the WLAN_STA_PS_DRIVER and
         WLAN_STA_PS_STA flags
      
      In this scenario, mac80211 will think that the station is awake,
      while it really is asleep, and any TX'ed frames should be filtered
      by the device (it will know that the station is sleeping) but then
      passed to mac80211 again, which will not buffer it either as it
      thinks the station is awake, and eventually the packets will be
      dropped.
      
      Fix this by moving the clearing of the flags to exactly where we
      learn about the situation. This creates a problem of reordering,
      so introduce another flag indicating that delivery is being done,
      this new flag also queues frames and is cleared only while the
      spinlock is held (which the queuing code also holds) so that any
      concurrent delivery/TX is handled correctly.
      Reported-by: NAndrei Otcheretianski <andrei.otcheretianski@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      5ac2e350
  6. 05 5月, 2014 1 次提交
  7. 25 4月, 2014 1 次提交
  8. 20 3月, 2014 1 次提交
  9. 03 3月, 2014 1 次提交
  10. 20 2月, 2014 1 次提交
    • J
      mac80211: fix station wakeup powersave race · e3685e03
      Johannes Berg 提交于
      Consider the following (relatively unlikely) scenario:
       1) station goes to sleep while frames are buffered in driver
       2) driver blocks wakeup (until no more frames are buffered)
       3) station wakes up again
       4) driver unblocks wakeup
      
      In this case, the current mac80211 code will do the following:
       1) WLAN_STA_PS_STA set
       2) WLAN_STA_PS_DRIVER set
       3) - nothing -
       4) WLAN_STA_PS_DRIVER cleared
      
      As a result, no frames will be delivered to the client, even
      though it is awake, until it sends another frame to us that
      triggers ieee80211_sta_ps_deliver_wakeup() in sta_ps_end().
      
      Since we now take the PS spinlock, we can fix this while at
      the same time removing the complexity with the pending skb
      queue function. This was broken since my commit 50a9432d
      ("mac80211: fix powersaving clients races") due to removing
      the clearing of WLAN_STA_PS_STA in the RX path.
      
      While at it, fix a cleanup path issue when a station is
      removed while the driver is still blocking its wakeup.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      e3685e03
  11. 13 2月, 2014 1 次提交
    • J
      mac80211: add NAPI support back · 06d181a8
      Johannes Berg 提交于
      NAPI was originally added to mac80211 a long time ago (by John in
      commit 4e6cbfd0 in July 2010), but then removed years later
      (by Stanislaw in commit 30c97120 in February 2013). No driver
      ever used it, so that was fine.
      
      Now I'm adding support for NAPI to our driver, so add some code
      to mac80211 again  to support NAPI. John was originally wrapping
      some (but not nearly all NAPI-related functions), but that doesn't
      scale very well with the number of functions that are there, some
      of which are even only inlines. Thus, instead of doing that, let
      the drivers manage the NAPI struct, except for napi_add() which is
      needed so mac80211 knows how to call napi_gro_receive().
      
      Also remove some no longer needed definitions that were left when
      NAPI support was removed.
      Reviewed-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Reviewed-by: NEyal Shapira <eyal@wizery.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      06d181a8
  12. 06 2月, 2014 3 次提交
  13. 05 2月, 2014 2 次提交
    • J
      mac80211: fix bufferable MMPDU RX handling · b4ba544c
      Johannes Berg 提交于
      Action, disassoc and deauth frames are bufferable, and as such don't
      have the PM bit in the frame control field reserved which means we
      need to react to the bit when receiving in such a frame.
      
      Fix this by introducing a new helper ieee80211_is_bufferable_mmpdu()
      and using it for the RX path that currently ignores the PM bit in
      any non-data frames for doze->wake transitions, but listens to it in
      all frames for wake->doze transitions, both of which are wrong.
      
      Also use the new helper in the TX path to clean up the code.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      b4ba544c
    • J
      mac80211: add length check in ieee80211_is_robust_mgmt_frame() · d8ca16db
      Johannes Berg 提交于
      A few places weren't checking that the frame passed to the
      function actually has enough data even though the function
      clearly documents it must have a payload byte. Make this
      safer by changing the function to take an skb and checking
      the length inside. The old version is preserved for now as
      the rtl* drivers use it and don't have a correct skb.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      d8ca16db
  14. 07 1月, 2014 2 次提交
  15. 04 12月, 2013 1 次提交
  16. 03 12月, 2013 1 次提交
  17. 26 11月, 2013 3 次提交
  18. 25 11月, 2013 1 次提交
  19. 28 10月, 2013 1 次提交
    • C
      {nl,cfg,mac}80211: implement mesh channel switch userspace API · b8456a14
      Chun-Yeow Yeoh 提交于
      Implement the required procedures for mesh channel switching as defined
      in the IEEE Std 802.11-2012 section 10.9.8.4.3 and also handle the CSA
      and MCSP elements as followed:
       * Add the function for updating the beacon and probe response frames
         with CSA and MCSP elements during the period of switching to the new
         channel. Both CSA and MCSP elements must be included in beacon and
         probe response frames until the intended channel switch time.
       * The ifmsh->csa_settings is set to NULL and the CSA and MCSP elements
         will then be removed from the beacon or probe response frames once the
         new channel is switched to.
      Signed-off-by: NChun-Yeow Yeoh <yeohchunyeow@cozybit.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      b8456a14
  20. 01 10月, 2013 1 次提交
    • M
      mac80211: support reporting A-MSDU subframes individually · 0cfcefef
      Michal Kazior 提交于
      Some devices may not be able to report A-MSDUs in
      single buffers. Drivers for such devices were
      forced to re-assemble A-MSDUs which would then
      be eventually disassembled by mac80211. This could
      lead to CPU cache thrashing and poor performance.
      
      Since A-MSDU has a single sequence number all
      subframes share it. This was in conflict with
      retransmission/duplication recovery
      (IEEE802.11-2012: 9.3.2.10).
      
      Patch introduces a new flag that is meant to be
      set for all individually reported A-MSDU subframes
      except the last one. This ensures the
      last_seq_ctrl is updated after the last subframe
      is processed. If an A-MSDU is actually a duplicate
      transmission all reported subframes will be
      properly discarded.
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      [johannes: add braces that were missing even before]
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      0cfcefef
  21. 27 9月, 2013 1 次提交
  22. 26 9月, 2013 1 次提交
  23. 23 8月, 2013 1 次提交
  24. 16 8月, 2013 1 次提交
    • J
      mac80211: perform power save processing before decryption · 86c228a7
      Johan Almbladh 提交于
      This patch decouples the power save processing from the frame decryption
      by running the decrypt rx handler after sta_process. In the case where
      the decryption failed for some reason, the stack used to not process
      the PM and MOREDATA bits for that frame. The stack now always performs
      power save processing regardless of the decryption result. That means that
      encrypted data frames and NULLFUNC frames are now handled in the same way
      regarding power save processing, making the stack more robust.
      Signed-off-by: NJohan Almbladh <ja@anyfi.net>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      86c228a7
  25. 16 7月, 2013 4 次提交
  26. 04 6月, 2013 1 次提交
    • J
      cfg80211/mac80211: clean up cfg80211 SME APIs · 6ff57cf8
      Johannes Berg 提交于
      Do some cleanups in the cfg80211 SME APIs, which are
      only used by mac80211.
      
      Most of these functions get a frame passed, and there
      isn't really any reason to export multiple functions
      as cfg80211 can check the frame type instead, do that.
      
      Additionally, the API functions have confusing names
      like cfg80211_send_...() which was meant to indicate
      that it sends an event to userspace, but gets a bit
      confusing when there's both TX and RX and they're not
      all clearly labeled.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      6ff57cf8
  27. 24 5月, 2013 1 次提交
  28. 17 5月, 2013 3 次提交