Author: arybchik
Date: Mon Mar 23 15:44:17 2015
New Revision: 280374
URL: https://svnweb.freebsd.org/changeset/base/280374

Log:
  sfxge: assert either kernel or internal copy of interface flags
  
  ioctl to put interface down sets ifp->if_flags which holds the intended
  administratively defined state and calls driver callback to apply it.
  When everything is done, driver updates internal copy of
  interface flags sc->if_flags which holds the operational state.
  So, transmit from Rx path is possible when interface is intended to be
  administratively down in accordance with ifp->if_flags, but not applied
  yet and the operational state is up in accordance with sc->if_flags.
  
  Sponsored by:   Solarflare Communications, Inc.
  Differential Revision: https://reviews.freebsd.org/D2075

Modified:
  head/sys/dev/sfxge/sfxge_tx.c

Modified: head/sys/dev/sfxge/sfxge_tx.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_tx.c       Mon Mar 23 15:27:33 2015        
(r280373)
+++ head/sys/dev/sfxge/sfxge_tx.c       Mon Mar 23 15:44:17 2015        
(r280374)
@@ -676,7 +676,16 @@ sfxge_if_transmit(struct ifnet *ifp, str
 
        sc = (struct sfxge_softc *)ifp->if_softc;
 
-       KASSERT(ifp->if_flags & IFF_UP, ("interface not up"));
+       /*
+        * Transmit may be called when interface is up from the kernel
+        * point of view, but not yet up (in progress) from the driver
+        * point of view. I.e. link aggregation bring up.
+        * Transmit may be called when interface is up from the driver
+        * point of view, but already down from the kernel point of
+        * view. I.e. Rx when interface shutdown is in progress.
+        */
+       KASSERT((ifp->if_flags & IFF_UP) || (sc->if_flags & IFF_UP),
+               ("interface not up"));
 
        /* Pick the desired transmit queue. */
        if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_TSO)) {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to