svn commit: r246799 - head/sys/dev/oce

Josh Paetzel jpaetzel at FreeBSD.org
Thu Feb 14 17:34:18 UTC 2013


Author: jpaetzel
Date: Thu Feb 14 17:34:17 2013
New Revision: 246799
URL: http://svnweb.freebsd.org/changeset/base/246799

Log:
  Resolve issue that caused WITNESS to report LORs.
  
  PR:	kern/171838
  Submitted by:	Venkat Duvvuru <venkatduvvuru.ml at gmail.com>
  MFC after:	2 weeks

Modified:
  head/sys/dev/oce/oce_if.c
  head/sys/dev/oce/oce_if.h

Modified: head/sys/dev/oce/oce_if.c
==============================================================================
--- head/sys/dev/oce/oce_if.c	Thu Feb 14 15:43:37 2013	(r246798)
+++ head/sys/dev/oce/oce_if.c	Thu Feb 14 17:34:17 2013	(r246799)
@@ -1817,6 +1817,9 @@ oce_local_timer(void *arg)
 }
 
 
+/* NOTE : This should only be called holding
+ *        DEVICE_LOCK.
+*/
 static void
 oce_if_deactivate(POCE_SOFTC sc)
 {
@@ -1846,11 +1849,17 @@ oce_if_deactivate(POCE_SOFTC sc)
 	/* Stop intrs and finish any bottom halves pending */
 	oce_hw_intr_disable(sc);
 
+    /* Since taskqueue_drain takes a Giant Lock, We should not acquire
+       any other lock. So unlock device lock and require after
+       completing taskqueue_drain.
+    */
+    UNLOCK(&sc->dev_lock);
 	for (i = 0; i < sc->intr_count; i++) {
 		if (sc->intrs[i].tq != NULL) {
 			taskqueue_drain(sc->intrs[i].tq, &sc->intrs[i].task);
 		}
 	}
+    LOCK(&sc->dev_lock);
 
 	/* Delete RX queue in card with flush param */
 	oce_stop_rx(sc);

Modified: head/sys/dev/oce/oce_if.h
==============================================================================
--- head/sys/dev/oce/oce_if.h	Thu Feb 14 15:43:37 2013	(r246798)
+++ head/sys/dev/oce/oce_if.h	Thu Feb 14 17:34:17 2013	(r246799)
@@ -493,7 +493,7 @@ struct oce_lock {
 #define LOCK_CREATE(lock, desc) 		{ \
 	strncpy((lock)->name, (desc), MAX_LOCK_DESC_LEN); \
 	(lock)->name[MAX_LOCK_DESC_LEN] = '\0'; \
-	mtx_init(&(lock)->mutex, (lock)->name, MTX_NETWORK_LOCK, MTX_DEF); \
+	mtx_init(&(lock)->mutex, (lock)->name, NULL, MTX_DEF); \
 }
 #define LOCK_DESTROY(lock) 			\
 		if (mtx_initialized(&(lock)->mutex))\


More information about the svn-src-head mailing list