]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
iwlwifi: mvm: properly flush the queues for buffering transport
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 11 Mar 2015 07:34:31 +0000 (09:34 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 18 Mar 2015 06:41:33 +0000 (08:41 +0200)
commitfe92e32ace11b21311fbeb8dbf14ac45b87e700d
treee565098169c5a85c6a2273bc0eab771ab035563c
parent9243efccd45373fd6431729f88deaa0cf0bbe0be
iwlwifi: mvm: properly flush the queues for buffering transport

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: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/sta.c
drivers/net/wireless/iwlwifi/mvm/tx.c