svn commit: r279882 - in projects/ifnet/sys/dev: bge msk xl

Gleb Smirnoff glebius at FreeBSD.org
Wed Mar 11 10:43:16 UTC 2015


Author: glebius
Date: Wed Mar 11 10:43:14 2015
New Revision: 279882
URL: https://svnweb.freebsd.org/changeset/base/279882

Log:
  For now use consistent softc lock in drivers transmit methods, due to a
  theoretical race condition.  Note that the condition exists in all
  drbr(9) based drivers in head, but never was evidenced.  Nevertheless,
  leave this branch for KPI redesign instead of performance experiments.
  
  Discussed with:	jhb

Modified:
  projects/ifnet/sys/dev/bge/if_bge.c
  projects/ifnet/sys/dev/msk/if_msk.c
  projects/ifnet/sys/dev/xl/if_xl.c

Modified: projects/ifnet/sys/dev/bge/if_bge.c
==============================================================================
--- projects/ifnet/sys/dev/bge/if_bge.c	Wed Mar 11 09:54:03 2015	(r279881)
+++ projects/ifnet/sys/dev/bge/if_bge.c	Wed Mar 11 10:43:14 2015	(r279882)
@@ -5398,8 +5398,7 @@ bge_transmit(if_t ifp, struct mbuf *m)
 		return (error);
 
 	sc = if_getsoftc(ifp, IF_DRIVER_SOFTC);
-	if (BGE_TRYLOCK(sc) == 0)
-		return (0);
+	BGE_LOCK(sc);
 	error = bge_start_locked(sc);
 	BGE_UNLOCK(sc);
 	return (error);

Modified: projects/ifnet/sys/dev/msk/if_msk.c
==============================================================================
--- projects/ifnet/sys/dev/msk/if_msk.c	Wed Mar 11 09:54:03 2015	(r279881)
+++ projects/ifnet/sys/dev/msk/if_msk.c	Wed Mar 11 10:43:14 2015	(r279882)
@@ -2894,8 +2894,7 @@ msk_transmit(if_t ifp, struct mbuf *m)
 		return (error);
 
 	sc_if = if_getsoftc(ifp, IF_DRIVER_SOFTC);
-	if (MSK_IF_TRYLOCK(sc_if) == 0)
-		return (0);
+	MSK_IF_LOCK(sc_if);
 	error = msk_start(sc_if);
 	MSK_IF_UNLOCK(sc_if);
 	return (error);

Modified: projects/ifnet/sys/dev/xl/if_xl.c
==============================================================================
--- projects/ifnet/sys/dev/xl/if_xl.c	Wed Mar 11 09:54:03 2015	(r279881)
+++ projects/ifnet/sys/dev/xl/if_xl.c	Wed Mar 11 10:43:14 2015	(r279882)
@@ -2414,8 +2414,7 @@ xl_transmit(if_t ifp, struct mbuf *m)
 		return (error);
 
 	sc = if_getsoftc(ifp, IF_DRIVER_SOFTC);
-	if (XL_TRY_LOCK(sc) == 0)
-		return (0);
+	XL_LOCK(sc);
 	if (sc->xl_type == XL_TYPE_905B)
 		xl_start_90xB_locked(sc);
 	else


More information about the svn-src-projects mailing list