]> git.baikalelectronics.ru Git - kernel.git/commit
mac80211: don't split remain-on-channel for coalescing
authorJohannes Berg <johannes.berg@intel.com>
Tue, 19 May 2015 11:36:38 +0000 (13:36 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 20 May 2015 13:09:22 +0000 (15:09 +0200)
commit3fbe3198c634a0f5df3faaf1b5ab0402b05a7981
treeaa99419180f9711834e4142e8c3c261d8ebdb85a
parent957940e33f1133cd78901c06b910e08fbaaff561
mac80211: don't split remain-on-channel for coalescing

Due to remain-on-channel scheduling delays, when we split an ROC
while coalescing, we'll usually get a picture like this:

existing ROC:  |------------------|
current time:              ^
new ROC:                   |------|              |-------|

If the expected response frames are then transmitted by the peer
in the hole between the two fragments of the new ROC, we miss
them and the process (e.g. ANQP query) fails.

mac80211 expects that the window to miss something is small:

existing ROC:  |------------------|
new ROC:                   |------||-------|

but that's normally not the case.

To avoid this problem, coalesce only if the new ROC's duration
is <= the remaining time on the existing one:

existing ROC:  |------------------|
new ROC:                   |-----|

and never split a new one but schedule it afterwards instead:

existing ROC:  |------------------|
new ROC:                                       |-------------|

type=bugfix
bug=not-tracked
fixes=unknown

Reported-by: Matti Gottlieb <matti.gottlieb@intel.com>
Reviewed-by: EliadX Peller <eliad@wizery.com>
Reviewed-by: Matti Gottlieb <matti.gottlieb@intel.com>
Tested-by: Matti Gottlieb <matti.gottlieb@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/cfg.c
net/mac80211/ieee80211_i.h