1. 06 10月, 2017 1 次提交
  2. 30 8月, 2017 1 次提交
    • D
      iwlwifi: mvm: Avoid deferring non bufferable frames · eb045e6e
      David Spinadel 提交于
      Use bcast station for all non bufferable frames on AP and AD-HOC.
      
      The host is no longer aware of STAs PS status because of buffer
      station offload, so we can't rely on mac80211 to toggle on
      IEEE80211_TX_CTL_NO_PS_BUFFER bit.
      
      A possible issue with buffering such frames, beside the obvious spec
      violation, is when a station disconnects while in PS but the AP isn't
      aware of that. In such scenarios the AP won't be able to send probe
      responses or auth frames so the STA won't be able to reconnect and
      the AP will have a queue hang.
      
      Fixes: 3e56eadf ("iwlwifi: mvm: implement AP/GO uAPSD support")
      Signed-off-by: NDavid Spinadel <david.spinadel@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      eb045e6e
  3. 18 8月, 2017 2 次提交
  4. 09 8月, 2017 1 次提交
    • A
      iwlwifi: mvm: start mac queues when deferred tx frames are purged · 7e39a00d
      Avraham Stern 提交于
      In AP mode, if a station is removed just as it is adding a new stream,
      the queue in question will remain stopped and no more TX will happen
      in this queue, leading to connection failures and other problems.
      
      This is because under DQA, when tx is deferred because a queue needs
      to be allocated, the mac queue for that TID is stopped until the new
      stream is added.  If at this point the station that this stream
      belongs to is removed, all the deferred tx frames are purged, but the
      mac queue is not restarted. As a result, all following tx on this
      queue will not be transmitted.
      
      Fix this by starting the relevant mac queues when the deferred tx
      frames are purged.
      
      Fixes: 24afba76 ("iwlwifi: mvm: support bss dynamic alloc/dealloc of queues")
      Signed-off-by: NAvraham Stern <avraham.stern@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      7e39a00d
  5. 01 8月, 2017 7 次提交
  6. 21 7月, 2017 1 次提交
    • J
      iwlwifi: mvm: defer setting IWL_MVM_STATUS_IN_HW_RESTART · bf8b286f
      Johannes Berg 提交于
      A hardware/firmware error may happen at any point in time. In
      particular, it might happen while mac80211 is in the middle of
      a flow. We observed the following situation:
       * mac80211 is in authentication flow, in ieee80211_prep_connection()
       * iwlwifi firmware crashes, but no error can be reported at this
         precise point (mostly because the driver method is void, but even
         if it wasn't we'd just shift to a race condition)
       * mac80211 continues the flow, trying to add the AP station
       * iwlwifi has already set its internal restart flag, and so thinks
         that adding the station is part of the restart and already set up,
         so it uses the information that's supposed to already be in the
         struct
      
      This can happen with any flow in mac80211 and with any information
      we try to preserve across hardware restarts.
      
      To fix this, only set a new HW_RESTART_REQUESTED flag and translate
      that to IN_HW_RESTART once mac80211 actually starts the restart by
      calling our start() method. As a consequence, any mac80211 flow in
      progress at the time of the restart will properly finish (certainly
      with errors), before the restart is attempted.
      
      This fixes https://bugzilla.kernel.org/show_bug.cgi?id=195299.
      Reported-by: Ndjagoo <dev@djagoo.io>
      Reported-by: NŁukasz Siudut <lsiudut@gmail.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      bf8b286f
  7. 29 6月, 2017 3 次提交
  8. 23 6月, 2017 5 次提交
  9. 06 6月, 2017 3 次提交
  10. 02 6月, 2017 2 次提交
  11. 27 4月, 2017 1 次提交
  12. 26 4月, 2017 3 次提交
  13. 20 4月, 2017 2 次提交
  14. 14 4月, 2017 1 次提交
  15. 11 4月, 2017 2 次提交
    • S
      iwlwifi: mvm: add multicast station · 26d6c16b
      Sara Sharon 提交于
      Currently multicast queue is associated with the broadcast
      station.
      
      This raises quite a few issues:
      
      The multicast queue has a special treatment:
      - It is sent in the MAC context command
      - It is excluded from tfd_queue_mask
      
      In DQA mode we end up enabling two queues - the probe response
      queue and the multicast queue - with the same station (broadcast)
      and TID while in DQA mode it should be unique RA-TID.
      Firmware will enforce it for a000 devices, so this allocation
      will fail.
      
      In addition, in a000 devices the FW will set the FIFO and not
      the driver. So there is a need for FW to know when we enable
      the queue that it is multicast queue so it will be bound to
      the multicast FIFO. There is no such way in current design.
      
      In order to simplify driver and firmware handling of this queue
      create a multicast station.
      This solves the unique RA-TID issue in the short term and serves
      as preparation for the long term.
      
      In the long term we will also add a flag marking this station for
      the FW as the multicast station.
      Once we will do that the FW will know this is the multicast queue
      immediately when it is added and bind it to the correct FIFO.
      It will also enable removing the special treatment of the
      queue in the MAC context command.
      Signed-off-by: NSara Sharon <sara.sharon@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      26d6c16b
    • S
      iwlwifi: mvm: cleanup pending frames in DQA mode · 1c17627b
      Sara Sharon 提交于
      When a station is asleep, the fw will set it as "asleep".
      All queues that are used only by one station will be stopped by
      the fw.
      
      In pre-DQA mode this was relevant for aggregation queues. However,
      in DQA mode a queue is owned by one station only, so all queues
      will be stopped.
      As a result, we don't expect to get filtered frames back to
      mac80211 and don't have to maintain the entire pending_frames
      state logic, the same way as we do in aggregations.
      
      The correct behavior is to align DQA behavior with the aggregation
      queue behaviour pre-DQA:
      - Don't count pending frames.
      - Let mac80211 know we have frames in these queues so that it can
      properly handle trigger frames.
      
      When a trigger frame is received, mac80211 tells the driver to send
      frames from the queues using release_buffered_frames.
      The driver will tell the fw to let frames out even if the station
      is asleep. This is done by iwl_mvm_sta_modify_sleep_tx_count.
      Signed-off-by: NSara Sharon <sara.sharon@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      1c17627b
  16. 24 3月, 2017 1 次提交
  17. 16 3月, 2017 1 次提交
    • S
      iwlwifi: mvm: cleanup pending frames in DQA mode · 9a3fcf91
      Sara Sharon 提交于
      When a station is asleep, the fw will set it as "asleep".
      All queues that are used only by one station will be stopped by
      the fw.
      
      In pre-DQA mode this was relevant for aggregation queues. However,
      in DQA mode a queue is owned by one station only, so all queues
      will be stopped.
      As a result, we don't expect to get filtered frames back to
      mac80211 and don't have to maintain the entire pending_frames
      state logic, the same way as we do in aggregations.
      
      The correct behavior is to align DQA behavior with the aggregation
      queue behaviour pre-DQA:
      - Don't count pending frames.
      - Let mac80211 know we have frames in these queues so that it can
      properly handle trigger frames.
      
      When a trigger frame is received, mac80211 tells the driver to send
      frames from the queues using release_buffered_frames.
      The driver will tell the fw to let frames out even if the station
      is asleep. This is done by iwl_mvm_sta_modify_sleep_tx_count.
      Reported-and-tested-by: NJens Axboe <axboe@kernel.dk>
      Reported-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: NSara Sharon <sara.sharon@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      9a3fcf91
  18. 08 2月, 2017 2 次提交
    • G
      iwlwifi: mvm: avoid race condition in ADD_STA. · 735a0045
      Goodstein, Mordechay 提交于
      The race happens when we send ADD_STA(auth->assoc) -> LQ_CMD
      between the commands the FW sometimes loses the medium for AUX, and
      sends a ndp to the AP and the flow becomes, ADD_STA -> send ndp -> LQ_CMD
      the problem is that there's no rates yet defined for sending the ndp and
      FW generates an assert.
      
      The fix: change the order of the commands to LQ_CMD -> ADD_STA
      Signed-off-by: NMordechay Goodstein <mordechay.goodstein@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      735a0045
    • A
      iwlwifi: mvm: Fix CSA received immediately after association · b45242c9
      Avraham Stern 提交于
      The session protection set for association is only removed when
      BSS_CHANGED_BEACON_INFO is set and BSS_CHANGED_ASSOC is not set.
      
      However, mac80211 may set both on association (in case a beacon was
      already received). In this case, mac80211 will not set
      BSS_CHANGED_BEACON_INFO on the next beacons because it has already
      notified the beacon change, so the session protection is never removed
      (until the session protection ends).
      
      When a CSA is received within this time, the station will fail to
      folllow the channel switch because it cannot schedule the time event.
      
      Fix this by removing the session protection when
      BSS_CHANGED_BEACON_INFO and BSS_CHANGED_ASSOC are both set.
      Signed-off-by: NAvraham Stern <avraham.stern@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      b45242c9
  19. 07 2月, 2017 1 次提交
    • L
      iwlwifi: mvm: release static queues on bcast release · df88c08d
      Liad Kaufman 提交于
      A few of the static queues are enabled along with the bcast
      STA. Make sure they are removed along with it, rather than
      waiting for the mac ctxt release.
      
      This is needed because we sometimes have a STA being removed
      and then added again (either with the same sta_id or a
      different one). If we wait for the mac ctxt release we will
      try to allocate the queues again (as this is currently done
      in the STA allocation and not in the MAC init) although
      they weren't freed, and even if the sta_id of the STA has
      changed.
      Signed-off-by: NLiad Kaufman <liad.kaufman@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      df88c08d