Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Mar 2015 10:43:15 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r279882 - in projects/ifnet/sys/dev: bge msk xl
Message-ID:  <201503111043.t2BAhFCF028283@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503111043.t2BAhFCF028283>