1. 05 8月, 2015 1 次提交
  2. 04 8月, 2015 2 次提交
  3. 03 6月, 2015 1 次提交
  4. 27 5月, 2015 1 次提交
    • E
      iwlwifi: mvm: fix ROC reference accounting · c779273b
      Eliad Peller 提交于
      commit b112889c ("iwlwifi: mvm: add Aux ROC request/response flow")
      added aux ROC flow in addition to the existing ROC flow. While doing
      it, it moved the ROC reference release to a common work item, which
      is being called for both the ROC and aux ROC flows.
      
      This resulted in invalid reference accounting, as no reference was
      taken in case of aux ROC, while a reference was released on completion.
      
      Fix it by adding a reference for the aux ROC as well, and release
      only the relevant references on completion (according to the set bits).
      
      While at it, convert cancel_work_sync() to flush_work(), in order
      to make sure the references are being cleaned properly.
      
      Fixes: b112889c ("iwlwifi: mvm: add Aux ROC request/response flow")
      Signed-off-by: NEliad Peller <eliadx.peller@intel.com>
      Reviewed-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      c779273b
  5. 02 4月, 2015 3 次提交
  6. 18 3月, 2015 2 次提交
  7. 12 3月, 2015 2 次提交
  8. 24 2月, 2015 1 次提交
  9. 24 11月, 2014 4 次提交
  10. 24 10月, 2014 1 次提交
  11. 15 9月, 2014 1 次提交
  12. 04 9月, 2014 2 次提交
  13. 23 7月, 2014 1 次提交
    • A
      iwlwifi: mvm: add Aux ROC request/response flow · b112889c
      Ariej Marjieh 提交于
      The Remain On Channel framework added to the firmare is
      a bit like time events. It allows the driver to request
      the firmware to be on a certain channel for a certain time.
      Unlike the time events, the ROC infrastructure doesn't need
      a MAC context in the firmware - it uses a generic context
      called "auxiliary framework".
      
      This is useful for any offchannel activity that is not bound
      to a specific MAC.
      The flow is synchronized much like with time events:
      1) The driver receives an action frame from the wpa_supplicant
         via nl80211 that requests to be sent offchannel.
      2) The driver sends an Aux ROC command (0x53) to the firmware.
      3) The firmware responds with the unique id of the time event.
      4) When time event starts, the driver puts the frame in the
         Aux queue.
      
      Special care needs to be taken when the time events ends:
      the queue needs to be cleaned-up.
      Signed-off-by: NAriej Marjieh <ariej.marjieh@intel.com>
      Reviewed-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      b112889c
  14. 08 7月, 2014 1 次提交
  15. 13 5月, 2014 1 次提交
  16. 14 4月, 2014 1 次提交
  17. 21 2月, 2014 1 次提交
  18. 04 2月, 2014 1 次提交
  19. 14 1月, 2014 1 次提交
  20. 01 1月, 2014 1 次提交
  21. 26 11月, 2013 1 次提交
  22. 03 10月, 2013 1 次提交
  23. 20 8月, 2013 1 次提交
  24. 12 8月, 2013 1 次提交
  25. 06 8月, 2013 2 次提交
  26. 04 4月, 2013 1 次提交
  27. 20 3月, 2013 2 次提交
  28. 06 3月, 2013 1 次提交
  29. 19 2月, 2013 1 次提交
    • J
      iwlwifi: mvm: fix time event command handling race · e3722822
      Johannes Berg 提交于
      Occasionally, we would run into this warning:
      
        iwlwifi 0000:02:00.0: U iwl_mvm_protect_session extend 0x2601: only 200 ms left
        iwlwifi 0000:02:00.0: U iwl_mvm_remove_time_event Removing TE 0x2601
        iwlwifi 0000:02:00.0: I iwl_pcie_enqueue_hcmd Sending command TIME_EVENT_CMD (#29), seq: 0x0925, 60 bytes at 37[5]:9
        iwlwifi 0000:02:00.0: U iwl_pcie_send_hcmd_sync Attempting to send sync command TIME_EVENT_CMD
        iwlwifi 0000:02:00.0: U iwl_pcie_send_hcmd_sync Setting HCMD_ACTIVE for command TIME_EVENT_CMD
        iwlwifi 0000:02:00.0: I iwl_pcie_enqueue_hcmd Sending command TIME_EVENT_CMD (#29), seq: 0x0926, 60 bytes at 38[6]:9
        iwlwifi 0000:02:00.0: U iwl_mvm_time_event_response TIME_EVENT_CMD response - UID = 0x2601
        iwlwifi 0000:02:00.0: I iwl_pcie_hcmd_complete Clearing HCMD_ACTIVE for command TIME_EVENT_CMD
        iwlwifi 0000:02:00.0: U iwl_mvm_rx_time_event_notif Time event notification - UID = 0x2701 action 1
        wlan0: associate with 00:0a:b8:55:a8:30 (try 2/3)
        ------------[ cut here ]------------
        WARNING: at drivers/net/wireless/iwlwifi/mvm/time-event.c:269 iwl_mvm_time_event_send_add+0x163/0x1a0 [iwlmvm]()
        Modules linked in: [...]
        Call Trace:
         [<c1046e42>] warn_slowpath_common+0x72/0xa0
         [<c1046e92>] warn_slowpath_null+0x22/0x30
         [<f8cad913>] iwl_mvm_time_event_send_add+0x163/0x1a0 [iwlmvm]
         [<f8cadead>] iwl_mvm_protect_session+0xcd/0x1c0 [iwlmvm]
         [<f8ca2087>] iwl_mvm_mac_mgd_prepare_tx+0x67/0xa0 [iwlmvm]
         [<f882a130>] ieee80211_sta_work+0x8f0/0x1070 [mac80211]
      
      The reason is a problem with asynchronous vs. synchronous
      commands, what happens here is the following:
       * TE 0x2601 is removed, the TIME_EVENT_CMD for that is async
       * a new TE (will be 0x2701) is created, the TIME_EVENT_CMD
         for that is sync and also uses a notification wait for the
         response (to avoid another race condition)
       * the response for the TE 0x2601 removal comes from the
         firmware, and is handled by the notification wait handler
         that's really waiting for the second response, but can't
         tell the difference, we therefore see the message
         "TIME_EVENT_CMD response - UID = 0x2601" instead of
         "TIME_EVENT_CMD response - UID = 0x2701".
      
      Fix this issue by making the TE removal synchronous as well,
      this means that we wait for the response to that command
      first, before there's any chance of sending a new one.
      
      Also, to detect such issues more easily in the future, add
      a warning to the notification handler that detects them.
      Reviewed-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      e3722822