Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/xen/xen remove IPv4 csum offloading for xennet(4) -...



details:   https://anonhg.NetBSD.org/src/rev/d9e322c0f812
branches:  trunk
changeset: 932276:d9e322c0f812
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Mon May 04 08:22:45 2020 +0000

description:
remove IPv4 csum offloading for xennet(4) - it's not complete, and even
if it was, it doesn't work with Linux Dom0 as it expects the IPv4 csum present

diffstat:

 sys/arch/xen/xen/if_xennet_xenbus.c  |  14 ++++++--------
 sys/arch/xen/xen/xennet_checksum.c   |  24 ++++++------------------
 sys/arch/xen/xen/xennetback_xenbus.c |  14 ++++++--------
 3 files changed, 18 insertions(+), 34 deletions(-)

diffs (143 lines):

diff -r 87205f6696a2 -r d9e322c0f812 sys/arch/xen/xen/if_xennet_xenbus.c
--- a/sys/arch/xen/xen/if_xennet_xenbus.c       Mon May 04 06:55:12 2020 +0000
+++ b/sys/arch/xen/xen/if_xennet_xenbus.c       Mon May 04 08:22:45 2020 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: if_xennet_xenbus.c,v 1.121 2020/05/01 19:53:17 jdolecek Exp $      */
+/*      $NetBSD: if_xennet_xenbus.c,v 1.122 2020/05/04 08:22:45 jdolecek Exp $      */
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -81,7 +81,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.121 2020/05/01 19:53:17 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.122 2020/05/04 08:22:45 jdolecek Exp $");
 
 #include "opt_xen.h"
 #include "opt_nfs_boot.h"
@@ -377,15 +377,13 @@
        ifp->if_extflags = IFEF_MPSAFE;
        ifp->if_snd.ifq_maxlen = uimax(ifqmaxlen, NET_TX_RING_SIZE * 2);
        ifp->if_capabilities =
-               IFCAP_CSUM_IPv4_Rx | IFCAP_CSUM_IPv4_Tx
-               | IFCAP_CSUM_UDPv4_Rx | IFCAP_CSUM_UDPv4_Tx
+               IFCAP_CSUM_UDPv4_Rx | IFCAP_CSUM_UDPv4_Tx
                | IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_TCPv4_Tx
                | IFCAP_CSUM_UDPv6_Rx
                | IFCAP_CSUM_TCPv6_Rx;
-#define XN_M_CSUM_SUPPORTED (                                  \
-               M_CSUM_TCPv4 | M_CSUM_UDPv4 | M_CSUM_IPv4       \
-               | M_CSUM_TCPv6 | M_CSUM_UDPv6                   \
-       )
+#define XN_M_CSUM_SUPPORTED                                            \
+       (M_CSUM_TCPv4 | M_CSUM_UDPv4 | | M_CSUM_TCPv6 | M_CSUM_UDPv6)
+
        if (sc->sc_features & FEATURE_IPV6CSUM) {
                /*
                 * If backend supports IPv6 csum offloading, we can skip
diff -r 87205f6696a2 -r d9e322c0f812 sys/arch/xen/xen/xennet_checksum.c
--- a/sys/arch/xen/xen/xennet_checksum.c        Mon May 04 06:55:12 2020 +0000
+++ b/sys/arch/xen/xen/xennet_checksum.c        Mon May 04 08:22:45 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: xennet_checksum.c,v 1.13 2020/05/03 16:10:26 jdolecek Exp $    */
+/*     $NetBSD: xennet_checksum.c,v 1.14 2020/05/04 08:22:45 jdolecek Exp $    */
 
 /*-
  * Copyright (c)2006 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xennet_checksum.c,v 1.13 2020/05/03 16:10:26 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xennet_checksum.c,v 1.14 2020/05/04 08:22:45 jdolecek Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -147,7 +147,7 @@
        switch (nxt) {
        case IPPROTO_UDP:
                if (iph)
-                       m->m_pkthdr.csum_flags = M_CSUM_UDPv4 | M_CSUM_IPv4;
+                       m->m_pkthdr.csum_flags = M_CSUM_UDPv4;
 #ifdef INET6
                else
                        m->m_pkthdr.csum_flags = M_CSUM_UDPv6;
@@ -157,7 +157,7 @@
                break;
        case IPPROTO_TCP:
                if (iph)
-                       m->m_pkthdr.csum_flags = M_CSUM_TCPv4 | M_CSUM_IPv4;
+                       m->m_pkthdr.csum_flags = M_CSUM_TCPv4;
 #ifdef INET6
                else
                        m->m_pkthdr.csum_flags = M_CSUM_TCPv6;
@@ -167,10 +167,6 @@
                break;
        case IPPROTO_ICMP:
        case IPPROTO_IGMP:
-               if (iph)
-                       m->m_pkthdr.csum_flags = M_CSUM_IPv4;
-               m->m_pkthdr.csum_data = iphlen << 16;
-               break;
        case IPPROTO_HOPOPTS:
        case IPPROTO_ICMPV6:
        case IPPROTO_FRAGMENT:
@@ -196,17 +192,9 @@
         */
        sw_csum = m->m_pkthdr.csum_flags & ~ifp->if_csum_flags_rx;
 
-       /*
-        * Always initialize the sum to 0!  Some HW assisted
-        * checksumming requires this. in_undefer_cksum()
-        * also needs it to be zero.
-        */
-       if (iph != NULL && (m->m_pkthdr.csum_flags & M_CSUM_IPv4))
-               iph->ip_sum = 0;
-
-       if (sw_csum & (M_CSUM_IPv4|M_CSUM_UDPv4|M_CSUM_TCPv4)) {
+       if (sw_csum & (M_CSUM_UDPv4|M_CSUM_TCPv4)) {
                in_undefer_cksum(m, ehlen,
-                   sw_csum & (M_CSUM_IPv4|M_CSUM_UDPv4|M_CSUM_TCPv4));
+                   sw_csum & (M_CSUM_UDPv4|M_CSUM_TCPv4));
        }
 
 #ifdef INET6
diff -r 87205f6696a2 -r d9e322c0f812 sys/arch/xen/xen/xennetback_xenbus.c
--- a/sys/arch/xen/xen/xennetback_xenbus.c      Mon May 04 06:55:12 2020 +0000
+++ b/sys/arch/xen/xen/xennetback_xenbus.c      Mon May 04 08:22:45 2020 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: xennetback_xenbus.c,v 1.103 2020/05/03 17:56:19 jdolecek Exp $      */
+/*      $NetBSD: xennetback_xenbus.c,v 1.104 2020/05/04 08:22:45 jdolecek Exp $      */
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.103 2020/05/03 17:56:19 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.104 2020/05/04 08:22:45 jdolecek Exp $");
 
 #include "opt_xen.h"
 
@@ -266,15 +266,13 @@
        ifp->if_snd.ifq_maxlen =
            uimax(ifqmaxlen, NET_TX_RING_SIZE * 2);
        ifp->if_capabilities =
-               IFCAP_CSUM_IPv4_Rx | IFCAP_CSUM_IPv4_Tx
-               | IFCAP_CSUM_UDPv4_Rx | IFCAP_CSUM_UDPv4_Tx
+               IFCAP_CSUM_UDPv4_Rx | IFCAP_CSUM_UDPv4_Tx
                | IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_TCPv4_Tx
                | IFCAP_CSUM_UDPv6_Rx | IFCAP_CSUM_UDPv6_Tx
                | IFCAP_CSUM_TCPv6_Rx | IFCAP_CSUM_TCPv6_Tx;
-#define XN_M_CSUM_SUPPORTED    (                               \
-               M_CSUM_TCPv4 | M_CSUM_UDPv4 | M_CSUM_IPv4       \
-               | M_CSUM_TCPv6 | M_CSUM_UDPv6                   \
-       )
+#define XN_M_CSUM_SUPPORTED                                            \
+       (M_CSUM_TCPv4 | M_CSUM_UDPv4 | M_CSUM_TCPv6 | M_CSUM_UDPv6)
+
        ifp->if_ioctl = xennetback_ifioctl;
        ifp->if_start = xennetback_ifstart;
        ifp->if_watchdog = xennetback_ifwatchdog;



Home | Main Index | Thread Index | Old Index