Browse Source

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.
remotes/github/freebsd/12-stable/master
vmaffione 1 month ago
parent
commit
168d276cdc
Notes: vmaffione 1 month ago
svn path=/stable/12/; revision=362555
1 changed files with 8 additions and 2 deletions
  1. +8
    -2
      sys/net/iflib.c

+ 8
- 2
sys/net/iflib.c View File

@@ -793,13 +793,19 @@ iflib_netmap_register(struct netmap_adapter *na, int onoff)
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;

Loading…
Cancel
Save