svn commit: r280604 - stable/10/sys/dev/sfxge
Andrew Rybchenko
arybchik at FreeBSD.org
Wed Mar 25 13:47:50 UTC 2015
Author: arybchik
Date: Wed Mar 25 13:47:48 2015
New Revision: 280604
URL: https://svnweb.freebsd.org/changeset/base/280604
Log:
MFC: 280374
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.
Original Differential Revision: https://reviews.freebsd.org/D2075
Modified:
stable/10/sys/dev/sfxge/sfxge_tx.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/dev/sfxge/sfxge_tx.c
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge_tx.c Wed Mar 25 13:46:30 2015 (r280603)
+++ stable/10/sys/dev/sfxge/sfxge_tx.c Wed Mar 25 13:47:48 2015 (r280604)
@@ -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)) {
More information about the svn-src-stable
mailing list