diff options
author | Felix Fietkau <nbd@openwrt.org> | 2010-03-11 15:30:37 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2010-03-11 15:30:37 +0000 |
commit | 9ab5d11a46759fd6fd6a3485ca64eab3c58e92cf (patch) | |
tree | 0713c7654242d6860f8eafa2c5453d325d9df488 /package/mac80211 | |
parent | 1fa777ae6780d722e75e5cb62323d69c09696e40 (diff) | |
download | upstream-9ab5d11a46759fd6fd6a3485ca64eab3c58e92cf.tar.gz upstream-9ab5d11a46759fd6fd6a3485ca64eab3c58e92cf.tar.bz2 upstream-9ab5d11a46759fd6fd6a3485ca64eab3c58e92cf.zip |
mac80211: improve performance a bit
SVN-Revision: 20145
Diffstat (limited to 'package/mac80211')
-rw-r--r-- | package/mac80211/patches/580-tx_status_optimization.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/package/mac80211/patches/580-tx_status_optimization.patch b/package/mac80211/patches/580-tx_status_optimization.patch new file mode 100644 index 0000000000..34eeff2f1f --- /dev/null +++ b/package/mac80211/patches/580-tx_status_optimization.patch @@ -0,0 +1,48 @@ +--- a/net/mac80211/status.c ++++ b/net/mac80211/status.c +@@ -171,7 +171,7 @@ void ieee80211_tx_status(struct ieee8021 + struct net_device *prev_dev = NULL; + struct sta_info *sta, *tmp; + int retry_count = -1, i; +- bool injected; ++ bool send_to_cooked; + + for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { + /* the HW cannot have attempted that rate */ +@@ -296,11 +296,15 @@ void ieee80211_tx_status(struct ieee8021 + /* this was a transmitted frame, but now we want to reuse it */ + skb_orphan(skb); + ++ /* Need to make a copy before skb->cb gets cleared */ ++ send_to_cooked = !!(info->flags & IEEE80211_TX_CTL_INJECTED) || ++ (type != IEEE80211_FTYPE_DATA); ++ + /* + * This is a bit racy but we can avoid a lot of work + * with this test... + */ +- if (!local->monitors && !local->cooked_mntrs) { ++ if (!local->monitors && (!send_to_cooked || !local->cooked_mntrs)) { + dev_kfree_skb(skb); + return; + } +@@ -345,9 +349,6 @@ void ieee80211_tx_status(struct ieee8021 + /* for now report the total retry_count */ + rthdr->data_retries = retry_count; + +- /* Need to make a copy before skb->cb gets cleared */ +- injected = !!(info->flags & IEEE80211_TX_CTL_INJECTED); +- + /* XXX: is this sufficient for BPF? */ + skb_set_mac_header(skb, 0); + skb->ip_summed = CHECKSUM_UNNECESSARY; +@@ -362,8 +363,7 @@ void ieee80211_tx_status(struct ieee8021 + continue; + + if ((sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) && +- !injected && +- (type == IEEE80211_FTYPE_DATA)) ++ !send_to_cooked) + continue; + + if (prev_dev) { |