From: Horst Hartmann <redacted>
NET_SKB_PAD has been increased from 32 to 64 and later to max(32, L1_CACHE_BYTES).
This led to a 25% throughput decrease for streaming workloads accompanied by a
37% CPU cost increase on s390.
In order to fix this provide an architecture specific NET_SKB_PAD config symbol.
Signed-off-by: Horst Hartmann <redacted>
Signed-off-by: Frank Blaschka <redacted>
---
arch/s390/Kconfig | 4 ++++
include/linux/skbuff.h | 4 +++-
2 files changed, 7 insertions(+), 1 deletion(-)
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -49,6 +49,10 @@ config NO_DMA
config ARCH_DMA_ADDR_T_64BIT
def_bool 64BIT
+config NET_SKB_PAD
+ int
+ default "32"
+
config GENERIC_LOCKBREAK
def_bool y if SMP && PREEMPT
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1431,8 +1431,10 @@ static inline int pskb_network_may_pull(
* get_rps_cpus() for example only access one 64 bytes aligned block :
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
*/
-#ifndef NET_SKB_PAD
+#ifndef CONFIG_NET_SKB_PAD
#define NET_SKB_PAD max(32, L1_CACHE_BYTES)
+#else
+#define NET_SKB_PAD CONFIG_NET_SKB_PAD
#endif
extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);