mac80211: release multiple ACs in uAPSD, fix more-data bug
authorJohannes Berg <johannes.berg@intel.com>
Wed, 8 Jan 2014 16:45:07 +0000 (17:45 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 10 Jan 2014 08:43:34 +0000 (09:43 +0100)
commitf9f760b4883d7fbfb463a67267e2be6b440d1aeb
treed026bb050177719db0c35c77f4bf1c72f2ccd3e9
parent0a1cb80975b67e29d572b28c1621203d1d74f4d3
mac80211: release multiple ACs in uAPSD, fix more-data bug

When a response for PS-Poll or a uAPSD trigger frame is sent, the
more-data bit should be set according to 802.11-2012 11.2.1.5 h),
meaning that it should indicate more data on the relevant ACs
(delivery-enabled or nondelivery-enabled for uAPSD or PS-Poll.)

In, for example, the following scenario:
 * 1 frame on VO queue (either in driver or in mac80211)
 * at least 1 frame on VI queue (in the driver)
 * both VO/VI are delivery-enabled
 * uAPSD trigger frame received

The more-data flag to the driver would not be set, even though
it should be.

While fixing this, I noticed that we should really release frames
from multiple ACs where there's data buffered in the driver for
the corresponding TIDs.

To address all this, restructure the code a bit to consider all
ACs if we only release driver frames or only buffered frames.
This also addresses the more-data bug described above as now the
TIDs will all be marked as released, so the driver will have to
check the number of frames.

While at it, clarify some code and comments and remove the found
variable, replacing it with the appropriate sw/hw release check.

Reported-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/sta_info.c