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

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
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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",
				tid);
			ieee80211_stop_tx_ba_session(sta, tid,
						WLAN_BACK_INITIATOR);
			ieee80211_stop_tx_ba_session(sta, tid);
		}
	} else
		IWL_ERR(priv, "Fail finding valid aggregation tid: %d\n", tid);
+2 −4
Original line number Diff line number Diff line
@@ -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.
 * @sta: the station whose BA session to stop
 * @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
 * the need to stop aggregation on a certain RA/TID, the session level
 * will be managed by the mac80211.
 */
int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid,
				 enum ieee80211_back_parties initiator);
int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid);

/**
 * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate.
+3 −4
Original line number Diff line number Diff line
@@ -538,14 +538,13 @@ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
	return ret;
}

int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
				 enum ieee80211_back_parties initiator)
int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	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)
		return -EINVAL;
@@ -553,7 +552,7 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
	if (tid >= STA_TID_NUM)
		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);

+1 −2
Original line number Diff line number Diff line
@@ -210,8 +210,7 @@ static ssize_t sta_agg_status_write(struct file *file, const char __user *userbu
		if (start)
			ret = ieee80211_start_tx_ba_session(&sta->sta, tid);
		else
			ret = ieee80211_stop_tx_ba_session(&sta->sta, tid,
							   WLAN_BACK_RECIPIENT);
			ret = ieee80211_stop_tx_ba_session(&sta->sta, tid);
	} else {
		__ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT, 3);
		ret = 0;
+4 −6
Original line number Diff line number Diff line
@@ -876,25 +876,23 @@ TRACE_EVENT(api_start_tx_ba_cb,
);

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(
		STA_ENTRY
		__field(u16, tid)
		__field(u16, initiator)
	),

	TP_fast_assign(
		STA_ASSIGN;
		__entry->tid = tid;
		__entry->initiator = initiator;
	),

	TP_printk(
		STA_PR_FMT " tid:%d initiator:%d",
		STA_PR_ARG, __entry->tid, __entry->initiator
		STA_PR_FMT " tid:%d",
		STA_PR_ARG, __entry->tid
	)
);