]> 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)
commitbddfbf61af7da1e14156bae179eb6d4a94959e67
treeaa99419180f9711834e4142e8c3c261d8ebdb85a
parent360f77c06e817f55d60b1c73be24b5e3e425e5ae
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