Patch "net: support ip generic csum processing in skb_csum_hwoffload_help" has been added to the 4.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: support ip generic csum processing in skb_csum_hwoffload_help

to the 4.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-support-ip-generic-csum-processing-in-skb_csum_h.patch
and it can be found in the queue-4.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 47ab8d8b35c8ebf9b953d0a4f47cab5f0a4b0d74
Author: Xin Long <lucien.xin@xxxxxxxxx>
Date:   Thu Jan 28 17:18:31 2021 +0800

    net: support ip generic csum processing in skb_csum_hwoffload_help
    
    [ Upstream commit 62fafcd63139920eb25b3fbf154177ce3e6f3232 ]
    
    NETIF_F_IP|IPV6_CSUM feature flag indicates UDP and TCP csum offload
    while NETIF_F_HW_CSUM feature flag indicates ip generic csum offload
    for HW, which includes not only for TCP/UDP csum, but also for other
    protocols' csum like GRE's.
    
    However, in skb_csum_hwoffload_help() it only checks features against
    NETIF_F_CSUM_MASK(NETIF_F_HW|IP|IPV6_CSUM). So if it's a non TCP/UDP
    packet and the features doesn't support NETIF_F_HW_CSUM, but supports
    NETIF_F_IP|IPV6_CSUM only, it would still return 0 and leave the HW
    to do csum.
    
    This patch is to support ip generic csum processing by checking
    NETIF_F_HW_CSUM for all protocols, and check (NETIF_F_IP_CSUM |
    NETIF_F_IPV6_CSUM) only for TCP and UDP.
    
    Note that we're using skb->csum_offset to check if it's a TCP/UDP
    proctol, this might be fragile. However, as Alex said, for now we
    only have a few L4 protocols that are requesting Tx csum offload,
    we'd better fix this until a new protocol comes with a same csum
    offset.
    
    v1->v2:
      - not extend skb->csum_not_inet, but use skb->csum_offset to tell
        if it's an UDP/TCP csum packet.
    v2->v3:
      - add a note in the changelog, as Willem suggested.
    
    Suggested-by: Alexander Duyck <alexander.duyck@xxxxxxxxx>
    Signed-off-by: Xin Long <lucien.xin@xxxxxxxxx>
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Stable-dep-of: 04c20a9356f2 ("net: skip offload for NETIF_F_IPV6_CSUM if ipv6 header contains extension")
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/core/dev.c b/net/core/dev.c
index 0409c051ed5d4..fb48a6b1301fb 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3323,7 +3323,18 @@ int skb_csum_hwoffload_help(struct sk_buff *skb,
 		return !!(features & NETIF_F_SCTP_CRC) ? 0 :
 			skb_crc32c_csum_help(skb);
 
-	return !!(features & NETIF_F_CSUM_MASK) ? 0 : skb_checksum_help(skb);
+	if (features & NETIF_F_HW_CSUM)
+		return 0;
+
+	if (features & (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM)) {
+		switch (skb->csum_offset) {
+		case offsetof(struct tcphdr, check):
+		case offsetof(struct udphdr, check):
+			return 0;
+		}
+	}
+
+	return skb_checksum_help(skb);
 }
 EXPORT_SYMBOL(skb_csum_hwoffload_help);
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux