| From foo@baz Sun Jun 17 12:07:34 CEST 2018 |
| From: Sara Sharon <sara.sharon@intel.com> |
| Date: Fri, 20 Apr 2018 13:49:19 +0300 |
| Subject: mac80211: use timeout from the AddBA response instead of the request |
| |
| From: Sara Sharon <sara.sharon@intel.com> |
| |
| [ Upstream commit 914eac248d876f9c00cd1792ffec3d182c863f13 ] |
| |
| 2016 spec, section 10.24.2 specifies that the block ack |
| timeout in the ADD BA request is advisory. |
| |
| That means we should check the value in the response and |
| act upon it (same as buffer size). |
| |
| Signed-off-by: Sara Sharon <sara.sharon@intel.com> |
| Signed-off-by: Luca Coelho <luciano.coelho@intel.com> |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/mac80211/agg-tx.c | 4 ++++ |
| net/mac80211/tx.c | 3 ++- |
| 2 files changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/net/mac80211/agg-tx.c |
| +++ b/net/mac80211/agg-tx.c |
| @@ -8,6 +8,7 @@ |
| * Copyright 2007, Michael Wu <flamingice@sourmilk.net> |
| * Copyright 2007-2010, Intel Corporation |
| * Copyright(c) 2015-2017 Intel Deutschland GmbH |
| + * Copyright (C) 2018 Intel Corporation |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| @@ -970,6 +971,9 @@ void ieee80211_process_addba_resp(struct |
| |
| sta->ampdu_mlme.addba_req_num[tid] = 0; |
| |
| + tid_tx->timeout = |
| + le16_to_cpu(mgmt->u.action.u.addba_resp.timeout); |
| + |
| if (tid_tx->timeout) { |
| mod_timer(&tid_tx->session_timer, |
| TU_TO_EXP_TIME(tid_tx->timeout)); |
| --- a/net/mac80211/tx.c |
| +++ b/net/mac80211/tx.c |
| @@ -4,6 +4,7 @@ |
| * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> |
| * Copyright 2007 Johannes Berg <johannes@sipsolutions.net> |
| * Copyright 2013-2014 Intel Mobile Communications GmbH |
| + * Copyright (C) 2018 Intel Corporation |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| @@ -1138,7 +1139,7 @@ static bool ieee80211_tx_prep_agg(struct |
| } |
| |
| /* reset session timer */ |
| - if (reset_agg_timer && tid_tx->timeout) |
| + if (reset_agg_timer) |
| tid_tx->last_tx = jiffies; |
| |
| return queued; |