summaryrefslogtreecommitdiffstats
path: root/sys/dev/bxe
diff options
context:
space:
mode:
authordavidcs <davidcs@FreeBSD.org>2015-06-23 20:09:52 +0000
committerdavidcs <davidcs@FreeBSD.org>2015-06-23 20:09:52 +0000
commitcb5e83ba7d7a9fe7b32562a5970e9ee98a259a13 (patch)
tree01b9be642433f8f4d2cd6630794cfe5c0fd8b55f /sys/dev/bxe
parentd3bae830435e99de517e0ce89f071ba56763bf2c (diff)
downloadFreeBSD-src-cb5e83ba7d7a9fe7b32562a5970e9ee98a259a13.zip
FreeBSD-src-cb5e83ba7d7a9fe7b32562a5970e9ee98a259a13.tar.gz
tx_mtx should be grabbed before calling buf_ring_dequeue_sc()
Submitted by:Attilio.Rao@isilon.com MFC after:5 days
Diffstat (limited to 'sys/dev/bxe')
-rw-r--r--sys/dev/bxe/bxe.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/dev/bxe/bxe.c b/sys/dev/bxe/bxe.c
index 0b26d31..f3e5964 100644
--- a/sys/dev/bxe/bxe.c
+++ b/sys/dev/bxe/bxe.c
@@ -6547,10 +6547,14 @@ bxe_free_fp_buffers(struct bxe_softc *sc)
#if __FreeBSD_version >= 800000
if (fp->tx_br != NULL) {
- struct mbuf *m;
/* just in case bxe_mq_flush() wasn't called */
- while ((m = buf_ring_dequeue_sc(fp->tx_br)) != NULL) {
- m_freem(m);
+ if (mtx_initialized(&fp->tx_mtx)) {
+ struct mbuf *m;
+
+ BXE_FP_TX_LOCK(fp);
+ while ((m = buf_ring_dequeue_sc(fp->tx_br)) != NULL)
+ m_freem(m);
+ BXE_FP_TX_UNLOCK(fp);
}
buf_ring_free(fp->tx_br, M_DEVBUF);
fp->tx_br = NULL;
OpenPOWER on IntegriCloud