提交 e6a8a3aa 编写于 作者: J Johannes Berg

mac80211: fix remain-on-channel cancellation

Ilan's previous commit 1b894521 ("mac80211: handle HW
ROC expired properly") neglected to take into account that
hw_begun was now always set in the software implementation
as well as the offloaded case.

Fix hw_begun to only apply to the offloaded case to make
the check in Ilan's commit safe and correct.
Reported-by: NJouni Malinen <j@w1.fi>
Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
上级 e9db4557
...@@ -257,7 +257,6 @@ static void ieee80211_handle_roc_started(struct ieee80211_roc_work *roc, ...@@ -257,7 +257,6 @@ static void ieee80211_handle_roc_started(struct ieee80211_roc_work *roc,
roc->start_time = start_time; roc->start_time = start_time;
roc->started = true; roc->started = true;
roc->hw_begun = true;
if (roc->mgmt_tx_cookie) { if (roc->mgmt_tx_cookie) {
if (!WARN_ON(!roc->frame)) { if (!WARN_ON(!roc->frame)) {
...@@ -286,6 +285,7 @@ static void ieee80211_hw_roc_start(struct work_struct *work) ...@@ -286,6 +285,7 @@ static void ieee80211_hw_roc_start(struct work_struct *work)
if (!roc->started) if (!roc->started)
break; break;
roc->hw_begun = true;
ieee80211_handle_roc_started(roc, local->hw_roc_start_time); ieee80211_handle_roc_started(roc, local->hw_roc_start_time);
} }
...@@ -529,8 +529,10 @@ ieee80211_coalesce_hw_started_roc(struct ieee80211_local *local, ...@@ -529,8 +529,10 @@ ieee80211_coalesce_hw_started_roc(struct ieee80211_local *local,
* begin, otherwise they'll both be marked properly by the work * begin, otherwise they'll both be marked properly by the work
* struct that runs once the driver notifies us of the beginning * struct that runs once the driver notifies us of the beginning
*/ */
if (cur_roc->hw_begun) if (cur_roc->hw_begun) {
new_roc->hw_begun = true;
ieee80211_handle_roc_started(new_roc, now); ieee80211_handle_roc_started(new_roc, now);
}
return true; return true;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册