Commit f02dff93 authored by Felix Fietkau's avatar Felix Fietkau Committed by Johannes Berg
Browse files

mac80211: extend ieee80211_tx_status_ext to support bulk free



Store processed skbs ready to be freed in a list so the driver bulk free them

Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
Link: https://lore.kernel.org/r/20200908123702.88454-13-nbd@nbd.name


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 23e9f1ef
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1096,12 +1096,14 @@ ieee80211_info_get_tx_time_est(struct ieee80211_tx_info *info)
 * @info: Basic tx status information
 * @skb: Packet skb (can be NULL if not provided by the driver)
 * @rate: The TX rate that was used when sending the packet
 * @free_list: list where processed skbs are stored to be free'd by the driver
 */
struct ieee80211_tx_status {
	struct ieee80211_sta *sta;
	struct ieee80211_tx_info *info;
	struct sk_buff *skb;
	struct rate_info *rate;
	struct list_head *free_list;
};

/**
+8 −2
Original line number Diff line number Diff line
@@ -1044,6 +1044,9 @@ static void __ieee80211_tx_status(struct ieee80211_hw *hw,
	 * with this test...
	 */
	if (!local->monitors && (!send_to_cooked || !local->cooked_mntrs)) {
		if (status->free_list)
			list_add_tail(&skb->list, status->free_list);
		else
			dev_kfree_skb(skb);
		return;
	}
@@ -1173,6 +1176,9 @@ void ieee80211_tx_status_ext(struct ieee80211_hw *hw,
		return;

	ieee80211_report_used_skb(local, skb, false);
	if (status->free_list)
		list_add_tail(&skb->list, status->free_list);
	else
		dev_kfree_skb(skb);
}
EXPORT_SYMBOL(ieee80211_tx_status_ext);