summaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorIlan Peer <ilan.peer@intel.com>2015-12-06 21:19:15 +0200
committerJohannes Berg <johannes.berg@intel.com>2015-12-07 11:06:37 +0100
commit1b894521e60c1b91db1e8ba1278660e5c89f1b5f (patch)
treebb29376f01ce0911321024239375e474a8b4526d /net/mac80211
parent641cf2a5ba0345c01f4eb1ca2980372415c2a5e1 (diff)
downloadlinux-1b894521e60c1b91db1e8ba1278660e5c89f1b5f.tar.gz
linux-1b894521e60c1b91db1e8ba1278660e5c89f1b5f.tar.bz2
linux-1b894521e60c1b91db1e8ba1278660e5c89f1b5f.zip
mac80211: handle HW ROC expired properly
In case of HW ROC, when the driver reports that the ROC expired, it is not sufficient to purge the ROCs based on the remaining time, as it possible that the device finished the ROC session before the actual requested duration. To handle such cases, in case of ROC expired notification from the driver, complete all the ROCs which are marked with hw_begun, regardless of the remaining duration. Signed-off-by: Ilan Peer <ilan.peer@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/offchannel.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
index 6719b27aad66..8b2f4eaac2ba 100644
--- a/net/mac80211/offchannel.c
+++ b/net/mac80211/offchannel.c
@@ -224,7 +224,11 @@ static unsigned long ieee80211_end_finished_rocs(struct ieee80211_local *local,
msecs_to_jiffies(roc->duration) -
now;
- if (roc->abort || remaining <= 0)
+ /* In case of HW ROC, it is possible that the HW finished the
+ * ROC session before the actual requested time. In such a case
+ * end the ROC session (disregarding the remaining time).
+ */
+ if (roc->abort || roc->hw_begun || remaining <= 0)
ieee80211_roc_notify_destroy(roc);
else
remaining_dur_min = min(remaining_dur_min, remaining);