54 lines
1.4 KiB
Diff
54 lines
1.4 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Fri, 21 Aug 2020 05:49:07 +0200
|
|
Subject: [PATCH] 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: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/include/net/mac80211.h
|
|
+++ b/include/net/mac80211.h
|
|
@@ -1095,12 +1095,14 @@ ieee80211_info_get_tx_time_est(struct ie
|
|
* @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;
|
|
};
|
|
|
|
/**
|
|
--- a/net/mac80211/status.c
|
|
+++ b/net/mac80211/status.c
|
|
@@ -1051,7 +1051,10 @@ static void __ieee80211_tx_status(struct
|
|
* with this test...
|
|
*/
|
|
if (!local->monitors && (!send_to_cooked || !local->cooked_mntrs)) {
|
|
- dev_kfree_skb(skb);
|
|
+ if (status->free_list)
|
|
+ list_add_tail(&skb->list, status->free_list);
|
|
+ else
|
|
+ dev_kfree_skb(skb);
|
|
return;
|
|
}
|
|
|
|
@@ -1180,7 +1183,10 @@ free:
|
|
return;
|
|
|
|
ieee80211_report_used_skb(local, skb, false);
|
|
- dev_kfree_skb(skb);
|
|
+ if (status->free_list)
|
|
+ list_add_tail(&skb->list, status->free_list);
|
|
+ else
|
|
+ dev_kfree_skb(skb);
|
|
}
|
|
EXPORT_SYMBOL(ieee80211_tx_status_ext);
|
|
|