Author: shurd
Date: Mon Nov 12 16:08:14 2018
New Revision: 340365
URL: https://svnweb.freebsd.org/changeset/base/340365

Log:
  MFC r340236:
  
  Fix rxcsum issue introduced in r338838
  
  r338838 attempted to fix issues with rxcsum and rxcsum6.
  However, the rxcsum bits were set as though if_setcapenablebit() was
  being called, not if_togglecapenable() which is in use. As a result,
  it was not possible to disable rxcsum when rxcsum6 was supported.
  
  PR:           233004
  Reported by:  lev
  Reviewed by:  lev
  Approved by:  re (kib)
  Sponsored by: Limelight Networks
  Differential Revision:        https://reviews.freebsd.org/D17881

Modified:
  stable/12/sys/net/iflib.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/net/iflib.c
==============================================================================
--- stable/12/sys/net/iflib.c   Mon Nov 12 15:59:32 2018        (r340364)
+++ stable/12/sys/net/iflib.c   Mon Nov 12 16:08:14 2018        (r340365)
@@ -4256,18 +4256,13 @@ iflib_if_ioctl(if_t ifp, u_long command, caddr_t data)
                setmask |= (mask & IFCAP_WOL);
 
                /*
-                * If we're disabling any RX csum, disable all the ones
-                * the driver supports.  This assumes all supported are
-                * enabled.
-                * 
-                * Otherwise, if they've changed, enable all of them.
+                * If any RX csum has changed, change all the ones that
+                * are supported by the driver.
                 */
-               if ((setmask & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) <
-                   (oldmask & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)))
-                       setmask &= ~(IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6);
-               else if ((setmask & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) !=
-                   (oldmask & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)))
-                       setmask |= (mask & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6));
+               if (setmask & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) {
+                       setmask |= ctx->ifc_softc_ctx.isc_capabilities &
+                           (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6);
+               }
 
                /*
                 * want to ensure that traffic has stopped before we change any 
of the flags
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to