• Emmanuel Grumbach's avatar
    iwlwifi: mvm: properly flush the queues for buffering transport · fe92e32a
    Emmanuel Grumbach authored
    There are transport that must buffer frames in the driver.
    This means that we have frames that are not in the op_mode
    and not visible to the firwmare. This causes issues when we
    flush the queues: the op_mode flushes a queue, and the
    firmware flushes all the frames that are *currently* on the
    rings, but if the transport buffers frames, it can submit
    these while we are flushing. This leads to a situation
    where we still have frames on the queues after we flushed
    them.
    Preventing those buffered frame from getting into the
    firmware is possible, but then, we have to run the Tx
    response path on frames that didn't reach the firmware
    which is not desirable.
    The way I solve this here is to let these frames go to the
    firmware, but make sure the firmware will not transmit them
    (by setting the station as draining). The op_mode then needs
    to wait until the transport itself is empty to be sure that
    the queue is really empty.
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    fe92e32a
tx.c 32 KB