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>