1. 15 2月, 2016 1 次提交
    • E
      iwlwifi: pcie: fix RF-Kill vs. firmware load race · a6bd005f
      Emmanuel Grumbach 提交于
      When we load the firmware, we hold trans_pcie->mutex to
      avoid nested flows. We also rely on the ISR to wake up the
      thread when the DMA has finished copying a chunk. During
      this flow, we enable the RF-Kill interrupt.
      
      The problem is that the RF-Kill interrupt handler can take
      the mutex and bring the device down. This means that if
      we load the firmware while the RF-Kill switch is enabled
      (which will happen when we load the INIT firmware to read
      the device's capabilities and register to mac80211), we
      may get an RF-Kill interrupt immediately and the ISR will
      be waiting for the mutex held by the thread that is
      currently loading the firmware. At this stage, the ISR
      won't be able to service the DMA's interrupt needed to
      wake up the thread that load the firmware. We are in a
      deadlock situation which ends when the thread that loads
      the firmware fails on timeout and releases the mutex.
      
      To fix this, take the mutex later in the flow, disable
      the interrupts and synchronize_irq() to give a chance to
      the RF-Kill interrupt to run and complete.
      After that, mask all the interrupts besides the DMA
      interrupt and proceed with firmware load. Make sure to
      check that there was no RF-Kill interrupt when the
      interrupts were disabled.
      
      This fixes https://bugzilla.kernel.org/show_bug.cgi?id=111361Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      a6bd005f
  2. 13 12月, 2015 1 次提交
  3. 02 12月, 2015 2 次提交
  4. 26 11月, 2015 2 次提交
  5. 18 11月, 2015 1 次提交
  6. 16 8月, 2015 1 次提交
  7. 05 8月, 2015 1 次提交
    • S
      iwlwifi: pcie: New RBD allocation model · 26d535ae
      Sara Sharon 提交于
      As a preperation for multiple RX queues change the RBD
      allocation model.
      
      The new model includes a background allocator. The allocator is
      called by the interrupt handler when there are two released
      buffers by the queue, and the allocator starts allocating eight
      pages per request.
      When the queue has released 8 pages it tries claiming the
      request. If the pages are not ready - it keeps claiming.
      This new model should make sure that RBDs are always available
      across the multiple queues.
      
      The RBDs are transferred between the allocator and the queue.
      The queue moves the free RBDs upon freeing them to the allocator.
      The allocator moves them back to the queue's possession when the
      request is claimed.
      The allocator has an initial pool to make sure there are always RBDs
      available for the request completion.
      Release of the buffers at exit is done per pools - the allocator
      frees its own initial pool and the queue frees its own pool.
      
      Existing code refactor -
      -Queue's initial pool is the size of the queue only as the allocation
      of the new buffers no longer uses this pool.
      -Removal of replenish background work, and replenish calls in the
      interrupt handler and restock().
      -The replenish() and the rxq used_list are used only during
      initialization.
      -Moved page allocation to a new function for code reuse.
      
      New code -
      Allocator code - new structure and functions.
      Interrupt handler uses the allocator functions for replenishing buffers.
      Reuse of the restock() method.
      Signed-off-by: NSara Sharon <sara.sharon@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      26d535ae
  8. 04 8月, 2015 3 次提交
  9. 13 7月, 2015 1 次提交
  10. 26 6月, 2015 1 次提交
  11. 03 6月, 2015 2 次提交
    • S
      iwlwifi: pcie: New RBD allocation model · 5f175703
      Sara Sharon 提交于
      As a preperation for multiple RX queues change the RBD
      allocation model.
      
      The new model includes a background allocator. The allocator is
      called by the interrupt handler when there are two released
      buffers by the queue, and the allocator starts allocating eight
      pages per request.
      When the queue has released 8 pages it tries claiming the
      request. If the pages are not ready - it keeps claiming.
      This new model should make sure that RBDs are always available
      across the multiple queues.
      
      The RBDs are transferred between the allocator and the queue.
      The queue moves the free RBDs upon freeing them to the allocator.
      The allocator moves them back to the queue's possession when the
      request is claimed.
      The allocator has an initial pool to make sure there are always RBDs
      available for the request completion.
      Release of the buffers at exit is done per pools - the allocator
      frees its own initial pool and the queue frees its own pool.
      
      Existing code refactor -
      -Queue's initial pool is the size of the queue only as the allocation
      of the new buffers no longer uses this pool.
      -Removal of replenish background work, and replenish calls in the
      interrupt handler and restock().
      -The replenish() and the rxq used_list are used only during
      initialization.
      -Moved page allocation to a new function for code reuse.
      
      New code -
      Allocator code - new structure and functions.
      Interrupt handler uses the allocator functions for replenishing buffers.
      Reuse of the restock() method.
      Signed-off-by: NSara Sharon <sara.sharon@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      5f175703
    • A
      iwlwifi: pcie: Control access to the NIC's PM registers via iwl_cfg · 95411d04
      Avri Altman 提交于
      Allow a cleaner way to access those hw-dependent registers,
      instead of using the product family type etc.
      Signed-off-by: NAvri Altman <avri.altman@intel.com>
      Reviewed-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      95411d04
  12. 18 3月, 2015 1 次提交
  13. 14 9月, 2014 1 次提交
  14. 04 9月, 2014 1 次提交
  15. 07 5月, 2014 1 次提交
  16. 13 4月, 2014 5 次提交
  17. 10 3月, 2014 1 次提交
  18. 13 2月, 2014 1 次提交
  19. 04 2月, 2014 1 次提交
  20. 14 1月, 2014 1 次提交
  21. 01 1月, 2014 1 次提交
  22. 22 12月, 2013 5 次提交
  23. 18 12月, 2013 5 次提交