diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-03-11 15:30:37 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-03-11 15:30:37 +0000 | 
| commit | a44b9961dcecd5e426e2294f194f9e31ae01b26d (patch) | |
| tree | 8270f35c03cd9eba7743f7cf46db563d57a1271d | |
| parent | 472d19b31d371eb4d6081332e2324f858a195e8b (diff) | |
mac80211: improve performance a bit
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20145 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -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 000000000..34eeff2f1 --- /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) { | 
