• Emmanuel Grumbach's avatar
    iwlwifi: we can wake SW queues even when draining HW queues · 1ba42da4
    Emmanuel Grumbach authored
    In the very first implementation of HT, the driver was responsible
    for the queueing: stopping and waking the queues while the HW queues
    where being drained. In this implementation, we had to deal with the
    case where we were draining the AGG queue because we wanted to tear
    down the BA agreement.
    In the normal flow (when we don't drain any HW queue), when packets
    are reclaimed, we wake the SW queue in case the SW queue was stopped
    which can happen when the HW queues are too full.
    While draining a HW queue, we must make sure that we don't wake the
    SW queue, since the whole point of the draining is to empty totally
    the HW queue and not only get below a certain threshold.
    This is why there is condition in the reclaim function:
    
    if (NOT EMPTYING DELBA)
    	wake the SW queue is applicable
    
    Since then, a lot has changed and mac80211 is now able to buffer
    packets that are being sent to a packet list that will be spliced
    after the driver has reported it has drained its HW queues.
    Hence, there is no need for the for aforementioned if, and we can
    safely wake up the queue even if we are draining HW queues.
    Removing this if, also allows us to remove the wake_queue in
    check_empty that was there in order to deal with a corner case
    created by the if.
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
    1ba42da4
iwl-trans-pcie.c 55.9 KB