Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cb831b53 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: remove tx_frags driver callback



The implementation of tx_frags is buggy due to
not handling queue stop, and there's no driver
implementing it so remove it.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent ba0afa2f
Loading
Loading
Loading
Loading
+0 −15
Original line number Original line Diff line number Diff line
@@ -1896,19 +1896,6 @@ enum ieee80211_rate_control_changed {
 *	The low-level driver should send the frame out based on
 *	The low-level driver should send the frame out based on
 *	configuration in the TX control data. This handler should,
 *	configuration in the TX control data. This handler should,
 *	preferably, never fail and stop queues appropriately.
 *	preferably, never fail and stop queues appropriately.
 *	This must be implemented if @tx_frags is not.
 *	Must be atomic.
 *
 * @tx_frags: Called to transmit multiple fragments of a single MSDU.
 *	This handler must consume all fragments, sending out some of
 *	them only is useless and it can't ask for some of them to be
 *	queued again. If the frame is not fragmented the queue has a
 *	single SKB only. To avoid issues with the networking stack
 *	when TX status is reported the frames should be removed from
 *	the skb queue.
 *	If this is used, the tx_info @vif and @sta pointers will be
 *	invalid -- you must not use them in that case.
 *	This must be implemented if @tx isn't.
 *	Must be atomic.
 *	Must be atomic.
 *
 *
 * @start: Called before the first netdevice attached to the hardware
 * @start: Called before the first netdevice attached to the hardware
@@ -2260,8 +2247,6 @@ enum ieee80211_rate_control_changed {
 */
 */
struct ieee80211_ops {
struct ieee80211_ops {
	void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
	void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
	void (*tx_frags)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
			 struct ieee80211_sta *sta, struct sk_buff_head *skbs);
	int (*start)(struct ieee80211_hw *hw);
	int (*start)(struct ieee80211_hw *hw);
	void (*stop)(struct ieee80211_hw *hw);
	void (*stop)(struct ieee80211_hw *hw);
#ifdef CONFIG_PM
#ifdef CONFIG_PM
+0 −8
Original line number Original line Diff line number Diff line
@@ -27,14 +27,6 @@ static inline void drv_tx(struct ieee80211_local *local, struct sk_buff *skb)
	local->ops->tx(&local->hw, skb);
	local->ops->tx(&local->hw, skb);
}
}


static inline void drv_tx_frags(struct ieee80211_local *local,
				struct ieee80211_vif *vif,
				struct ieee80211_sta *sta,
				struct sk_buff_head *skbs)
{
	local->ops->tx_frags(&local->hw, vif, sta, skbs);
}

static inline void drv_get_et_strings(struct ieee80211_sub_if_data *sdata,
static inline void drv_get_et_strings(struct ieee80211_sub_if_data *sdata,
				      u32 sset, u8 *data)
				      u32 sset, u8 *data)
{
{
+1 −1
Original line number Original line Diff line number Diff line
@@ -587,7 +587,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,


	local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN);
	local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN);


	BUG_ON(!ops->tx && !ops->tx_frags);
	BUG_ON(!ops->tx);
	BUG_ON(!ops->start);
	BUG_ON(!ops->start);
	BUG_ON(!ops->stop);
	BUG_ON(!ops->stop);
	BUG_ON(!ops->config);
	BUG_ON(!ops->config);
+2 −5
Original line number Original line Diff line number Diff line
@@ -1295,9 +1295,6 @@ static bool __ieee80211_tx(struct ieee80211_local *local,
		break;
		break;
	}
	}


	if (local->ops->tx_frags)
		drv_tx_frags(local, vif, pubsta, skbs);
	else
	result = ieee80211_tx_frags(local, vif, pubsta, skbs,
	result = ieee80211_tx_frags(local, vif, pubsta, skbs,
				    txpending);
				    txpending);