]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mac80211: Store sk_pacing_shift in ieee80211_hw
authorWen Gong <wgong@codeaurora.org>
Wed, 8 Aug 2018 10:40:01 +0000 (18:40 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 5 Sep 2018 08:03:15 +0000 (10:03 +0200)
Make it possibly for drivers to adjust the default skb_pacing_shift
by storing it in the hardware struct.

Signed-off-by: Wen Gong <wgong@codeaurora.org>
[adjust commit log, move & adjust comment]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/main.c
net/mac80211/tx.c

index 00e2e9909d45051f597f9c4f6298cd3af745381e..f8247d2658acb38896ea93128795bc3ae6ca3b5f 100644 (file)
@@ -2308,6 +2308,10 @@ enum ieee80211_hw_flags {
  *     supported by HW.
  * @max_nan_de_entries: maximum number of NAN DE functions supported by the
  *     device.
+ *
+ * @tx_sk_pacing_shift: Pacing shift to set on TCP sockets when frames from
+ *     them are encountered. The default should typically not be changed,
+ *     unless the driver has good reasons for needing more buffers.
  */
 struct ieee80211_hw {
        struct ieee80211_conf conf;
@@ -2343,6 +2347,7 @@ struct ieee80211_hw {
        u8 n_cipher_schemes;
        const struct ieee80211_cipher_scheme *cipher_schemes;
        u8 max_nan_de_entries;
+       u8 tx_sk_pacing_shift;
 };
 
 static inline bool _ieee80211_hw_check(struct ieee80211_hw *hw,
index c78629f8b7a02f7e0e6b7804f925afcaef83ba60..77381017bac77106ec15ec25139cc32223904a39 100644 (file)
@@ -611,6 +611,18 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len,
        local->ops = ops;
        local->use_chanctx = use_chanctx;
 
+       /*
+        * We need a bit of data queued to build aggregates properly, so
+        * instruct the TCP stack to allow more than a single ms of data
+        * to be queued in the stack. The value is a bit-shift of 1
+        * second, so 8 is ~4ms of queued data. Only affects local TCP
+        * sockets.
+        * This is the default, anyhow - drivers may need to override it
+        * for local reasons (longer buffers, longer completion time, or
+        * similar).
+        */
+       local->hw.tx_sk_pacing_shift = 8;
+
        /* set up some defaults */
        local->hw.queues = 1;
        local->hw.max_rates = 1;
index 5083905486c7ec12c397655e1991985a36489899..7d34222337c0c38c55b441444d0ae274cce18f0c 100644 (file)
@@ -3625,13 +3625,7 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb,
        if (!IS_ERR_OR_NULL(sta)) {
                struct ieee80211_fast_tx *fast_tx;
 
-               /* We need a bit of data queued to build aggregates properly, so
-                * instruct the TCP stack to allow more than a single ms of data
-                * to be queued in the stack. The value is a bit-shift of 1
-                * second, so 8 is ~4ms of queued data. Only affects local TCP
-                * sockets.
-                */
-               sk_pacing_shift_update(skb->sk, 8);
+               sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift);
 
                fast_tx = rcu_dereference(sta->fast_tx);