• Emmanuel Grumbach's avatar
    iwlwifi: pcie: buffer packets to avoid overflowing Tx queues · 3955525d
    Emmanuel Grumbach authored
    When the Tx queues are full above a threshold, we
    immediately stop the mac80211's queue to stop getting new
    packets. This worked until TSO was enabled.
    With TSO, one single packet from mac80211 can use many
    descriptors since a large send needs to be split into
    several segments.
    This means that stopping mac80211's queues is not enough
    and we also need to ensure that we don't overflow the Tx
    queues with one single packet from mac80211.
    Add code to transport layer to do just that. Stop
    mac80211's queue as soon as the queue is full above the
    same threshold as before, and keep pushing the current
    packet along with its segments on the queue, but check
    that we don't overflow. If that would happen, buffer the
    segments, and send them when there is room in the Tx queue
    again. Of course, we first need to send the buffered
    segments and only then, wake up mac80211's queues.
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    3955525d
tx.c 65 KB