Author: jpaetzel
Date: Fri Mar  1 20:33:35 2013
New Revision: 247572
URL: http://svnweb.freebsd.org/changeset/base/247572

Log:
  MFC 246799:
  
  Resolve issue that caused WITNESS to report LORs.

Modified:
  stable/9/sys/dev/oce/oce_if.c
  stable/9/sys/dev/oce/oce_if.h
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/dev/oce/oce_if.c
==============================================================================
--- stable/9/sys/dev/oce/oce_if.c       Fri Mar  1 20:16:06 2013        
(r247571)
+++ stable/9/sys/dev/oce/oce_if.c       Fri Mar  1 20:33:35 2013        
(r247572)
@@ -1856,6 +1856,9 @@ oce_local_timer(void *arg)
 }
 
 
+/* NOTE : This should only be called holding
+ *        DEVICE_LOCK.
+*/
 static void
 oce_if_deactivate(POCE_SOFTC sc)
 {
@@ -1885,11 +1888,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: stable/9/sys/dev/oce/oce_if.h
==============================================================================
--- stable/9/sys/dev/oce/oce_if.h       Fri Mar  1 20:16:06 2013        
(r247571)
+++ stable/9/sys/dev/oce/oce_if.h       Fri Mar  1 20:33:35 2013        
(r247572)
@@ -491,7 +491,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))\
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to