• Emmanuel Grumbach's avatar
    iwlagn: move the check_empty logic to the transport layer · 464021ff
    Emmanuel Grumbach authored
    
    
    This logic is responsible to tell mac80211 when the HW queues are
    empty and the BA session can be started / torn down.
    
    Fix a bug on the way:
    When the the Tx BA session is stopped and the HW queues aren't empty,
    we stop the SW queue to drain the HW queue and then switch to the
    legacy HW queue. This is the IWL_EMPTYING_HW_QUEUE_DELBA state.
    
    While in this state, we never wake the SW queue, even when the HW
    queue is almost empty, since we need to drain it completely. Look
    at iwl_trans_pcie_reclaim regarding this.
    
    Once the HW queue is really empty, we must wake the SW queue in order
    to get traffic to the legacy queue.
    This step was missing leading to an odd situation were the traffic
    would just stall after we tore down a Tx BA session while the HW
    queue was not empty.
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    464021ff
iwl-core.c 51.3 KB