mac80211: check uapsd state for dynamic power save
authorKalle Valo <kalle.valo@nokia.com>
Tue, 12 Jan 2010 08:42:53 +0000 (10:42 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 12 Jan 2010 19:21:02 +0000 (14:21 -0500)
commit0c74211d19d83729c209ddcd4dc026c2aedeb29e
tree31e81616c508d63aef0ad418dc4252b87d1be208
parent5c1b98a52c3af1044c2d3842af8bae9a89502ca9
mac80211: check uapsd state for dynamic power save

To make U-APSD client mode effective, we must not wake up from dynamic power
save when transmitting frames. So if dynamic power save is enabled, it needs
check the queue the transmitted packet is in and decide if we need to wake
up or not.

In a perfect world, where all packets would have correct QoS tags, U-APSD
enabled queues should not trigger wakeup from power save. But in the real
world, where very few packets have correct QoS tags, this won't work. For
example, if only voip class has U-APSD enabled and we send a packet in voip
class, but the packets we receive are in best effort class, we would receive
the packets with the legacy power save method. And that would increase
latencies too much from a voip application point of view.

The workaround is to enable U-APSD for all qeueus and still use dynamic ps
wakeup for all other queues except voip. That way we can still save power
with a voip application and not sacrifice latency. Normal traffic (in
background, best effort or video class) would still trigger wakeup from
dynamic power save.

Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/tx.c