Commit 6a8579d0 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

mac80211: clean up ieee80211_stop_tx_ba_session

There's no sense in letting anything but internal
mac80211 functions set the initiator to anything
but WLAN_BACK_INITIATOR, since WLAN_BACK_RECIPIENT
is only valid when we have received a frame from
the peer, which we react to directly in mac80211.

The debugfs code I recently added got this wrong
as well.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 2b2c009e
...@@ -313,8 +313,7 @@ static int rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv, ...@@ -313,8 +313,7 @@ static int rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
*/ */
IWL_DEBUG_HT(priv, "Fail start Tx agg on tid: %d\n", IWL_DEBUG_HT(priv, "Fail start Tx agg on tid: %d\n",
tid); tid);
ieee80211_stop_tx_ba_session(sta, tid, ieee80211_stop_tx_ba_session(sta, tid);
WLAN_BACK_INITIATOR);
} }
} else } else
IWL_ERR(priv, "Fail finding valid aggregation tid: %d\n", tid); IWL_ERR(priv, "Fail finding valid aggregation tid: %d\n", tid);
......
...@@ -2345,16 +2345,14 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, ...@@ -2345,16 +2345,14 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
* ieee80211_stop_tx_ba_session - Stop a Block Ack session. * ieee80211_stop_tx_ba_session - Stop a Block Ack session.
* @sta: the station whose BA session to stop * @sta: the station whose BA session to stop
* @tid: the TID to stop BA. * @tid: the TID to stop BA.
* @initiator: if indicates initiator DELBA frame will be sent.
* *
* Return: error if no sta with matching da found, success otherwise * Return: negative error if the TID is invalid, or no aggregation active
* *
* Although mac80211/low level driver/user space application can estimate * Although mac80211/low level driver/user space application can estimate
* the need to stop aggregation on a certain RA/TID, the session level * the need to stop aggregation on a certain RA/TID, the session level
* will be managed by the mac80211. * will be managed by the mac80211.
*/ */
int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid, int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
enum ieee80211_back_parties initiator);
/** /**
* ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate. * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate.
......
...@@ -538,14 +538,13 @@ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, ...@@ -538,14 +538,13 @@ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
return ret; return ret;
} }
int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid, int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
enum ieee80211_back_parties initiator)
{ {
struct sta_info *sta = container_of(pubsta, struct sta_info, sta); struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
struct ieee80211_sub_if_data *sdata = sta->sdata; struct ieee80211_sub_if_data *sdata = sta->sdata;
struct ieee80211_local *local = sdata->local; struct ieee80211_local *local = sdata->local;
trace_api_stop_tx_ba_session(pubsta, tid, initiator); trace_api_stop_tx_ba_session(pubsta, tid);
if (!local->ops->ampdu_action) if (!local->ops->ampdu_action)
return -EINVAL; return -EINVAL;
...@@ -553,7 +552,7 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid, ...@@ -553,7 +552,7 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
if (tid >= STA_TID_NUM) if (tid >= STA_TID_NUM)
return -EINVAL; return -EINVAL;
return __ieee80211_stop_tx_ba_session(sta, tid, initiator); return __ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR);
} }
EXPORT_SYMBOL(ieee80211_stop_tx_ba_session); EXPORT_SYMBOL(ieee80211_stop_tx_ba_session);
......
...@@ -210,8 +210,7 @@ static ssize_t sta_agg_status_write(struct file *file, const char __user *userbu ...@@ -210,8 +210,7 @@ static ssize_t sta_agg_status_write(struct file *file, const char __user *userbu
if (start) if (start)
ret = ieee80211_start_tx_ba_session(&sta->sta, tid); ret = ieee80211_start_tx_ba_session(&sta->sta, tid);
else else
ret = ieee80211_stop_tx_ba_session(&sta->sta, tid, ret = ieee80211_stop_tx_ba_session(&sta->sta, tid);
WLAN_BACK_RECIPIENT);
} else { } else {
__ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT, 3); __ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT, 3);
ret = 0; ret = 0;
......
...@@ -876,25 +876,23 @@ TRACE_EVENT(api_start_tx_ba_cb, ...@@ -876,25 +876,23 @@ TRACE_EVENT(api_start_tx_ba_cb,
); );
TRACE_EVENT(api_stop_tx_ba_session, TRACE_EVENT(api_stop_tx_ba_session,
TP_PROTO(struct ieee80211_sta *sta, u16 tid, u16 initiator), TP_PROTO(struct ieee80211_sta *sta, u16 tid),
TP_ARGS(sta, tid, initiator), TP_ARGS(sta, tid),
TP_STRUCT__entry( TP_STRUCT__entry(
STA_ENTRY STA_ENTRY
__field(u16, tid) __field(u16, tid)
__field(u16, initiator)
), ),
TP_fast_assign( TP_fast_assign(
STA_ASSIGN; STA_ASSIGN;
__entry->tid = tid; __entry->tid = tid;
__entry->initiator = initiator;
), ),
TP_printk( TP_printk(
STA_PR_FMT " tid:%d initiator:%d", STA_PR_FMT " tid:%d",
STA_PR_ARG, __entry->tid, __entry->initiator STA_PR_ARG, __entry->tid
) )
); );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment