Author: vmaffione
Date: Tue Jun 23 20:44:05 2020
New Revision: 362555
URL: https://svnweb.freebsd.org/changeset/base/362555

Log:
  MFC r362185
  
  iflib: netmap: enter/exit netmap mode after device stops
  
  Avoid possible race conditions by calling nm_set_native_flags()
  and nm_clear_native_flags() only after the device has been
  stopped.

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   Tue Jun 23 20:41:10 2020        (r362554)
+++ stable/12/sys/net/iflib.c   Tue Jun 23 20:44:05 2020        (r362555)
@@ -793,13 +793,19 @@ iflib_netmap_register(struct netmap_adapter *na, int o
        if (!CTX_IS_VF(ctx))
                IFDI_CRCSTRIP_SET(ctx, onoff, iflib_crcstrip);
 
-       /* enable or disable flags and callbacks in na and ifp */
+       iflib_stop(ctx);
+
+       /*
+        * Enable (or disable) netmap flags, and intercept (or restore)
+        * ifp->if_transmit. This is done once the device has been stopped
+        * to prevent race conditions.
+        */
        if (onoff) {
                nm_set_native_flags(na);
        } else {
                nm_clear_native_flags(na);
        }
-       iflib_stop(ctx);
+
        iflib_init_locked(ctx);
        IFDI_CRCSTRIP_SET(ctx, onoff, iflib_crcstrip); // XXX why twice ?
        status = ifp->if_drv_flags & IFF_DRV_RUNNING ? 0 : 1;
_______________________________________________
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