mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2025-12-12 23:52:09 -05:00
Move all patch that got merged upstream from pending to backport and add related tag. This is to make it easier to update to kernel 6.12. Patch 680 required some special care as the upstream version had to be split in a series of 6 patch. Referesh all affected patch. Link: https://github.com/openwrt/openwrt/pull/18464 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
89 lines
2.6 KiB
Diff
89 lines
2.6 KiB
Diff
From 80e85fbdf19ecc4dfa31ecf639adb55555db02fe Mon Sep 17 00:00:00 2001
|
|
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Thu, 2 May 2024 10:44:45 +0200
|
|
Subject: [PATCH 4/6] net: create tcp_gro_lookup helper function
|
|
|
|
This pulls the flow port matching out of tcp_gro_receive, so that it can be
|
|
reused for the next change, which adds the TCP fraglist GRO heuristic.
|
|
|
|
Acked-by: Paolo Abeni <pabeni@redhat.com>
|
|
Reviewed-by: Eric Dumazet <edumazet@google.com>
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
Reviewed-by: David Ahern <dsahern@kernel.org>
|
|
Reviewed-by: Willem de Bruijn <willemb@google.com>
|
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
---
|
|
include/net/tcp.h | 1 +
|
|
net/ipv4/tcp_offload.c | 41 +++++++++++++++++++++++++----------------
|
|
2 files changed, 26 insertions(+), 16 deletions(-)
|
|
|
|
--- a/include/net/tcp.h
|
|
+++ b/include/net/tcp.h
|
|
@@ -2101,6 +2101,7 @@ void tcp_v4_destroy_sock(struct sock *sk
|
|
|
|
struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
|
|
netdev_features_t features);
|
|
+struct sk_buff *tcp_gro_lookup(struct list_head *head, struct tcphdr *th);
|
|
struct sk_buff *tcp_gro_receive(struct list_head *head, struct sk_buff *skb);
|
|
INDIRECT_CALLABLE_DECLARE(int tcp4_gro_complete(struct sk_buff *skb, int thoff));
|
|
INDIRECT_CALLABLE_DECLARE(struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb));
|
|
--- a/net/ipv4/tcp_offload.c
|
|
+++ b/net/ipv4/tcp_offload.c
|
|
@@ -251,6 +251,27 @@ out:
|
|
return segs;
|
|
}
|
|
|
|
+struct sk_buff *tcp_gro_lookup(struct list_head *head, struct tcphdr *th)
|
|
+{
|
|
+ struct tcphdr *th2;
|
|
+ struct sk_buff *p;
|
|
+
|
|
+ list_for_each_entry(p, head, list) {
|
|
+ if (!NAPI_GRO_CB(p)->same_flow)
|
|
+ continue;
|
|
+
|
|
+ th2 = tcp_hdr(p);
|
|
+ if (*(u32 *)&th->source ^ *(u32 *)&th2->source) {
|
|
+ NAPI_GRO_CB(p)->same_flow = 0;
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ return p;
|
|
+ }
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
struct sk_buff *tcp_gro_receive(struct list_head *head, struct sk_buff *skb)
|
|
{
|
|
struct sk_buff *pp = NULL;
|
|
@@ -288,24 +309,12 @@ struct sk_buff *tcp_gro_receive(struct l
|
|
len = skb_gro_len(skb);
|
|
flags = tcp_flag_word(th);
|
|
|
|
- list_for_each_entry(p, head, list) {
|
|
- if (!NAPI_GRO_CB(p)->same_flow)
|
|
- continue;
|
|
-
|
|
- th2 = tcp_hdr(p);
|
|
-
|
|
- if (*(u32 *)&th->source ^ *(u32 *)&th2->source) {
|
|
- NAPI_GRO_CB(p)->same_flow = 0;
|
|
- continue;
|
|
- }
|
|
-
|
|
- goto found;
|
|
- }
|
|
- p = NULL;
|
|
- goto out_check_final;
|
|
+ p = tcp_gro_lookup(head, th);
|
|
+ if (!p)
|
|
+ goto out_check_final;
|
|
|
|
-found:
|
|
/* Include the IP ID check below from the inner most IP hdr */
|
|
+ th2 = tcp_hdr(p);
|
|
flush = NAPI_GRO_CB(p)->flush;
|
|
flush |= (__force int)(flags & TCP_FLAG_CWR);
|
|
flush |= (__force int)((flags ^ tcp_flag_word(th2)) &
|