Resolve issue that caused WITNESS to report LORs.

PR:	kern/171838
Submitted by:	Venkat Duvvuru <venkatduvvuru.ml@gmail.com>
MFC after:	2 weeks
This commit is contained in:
Josh Paetzel 2013-02-14 17:34:17 +00:00
parent 3c4223a65a
commit beb0f7e7d4
2 changed files with 10 additions and 1 deletions

View File

@ -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);

View File

@ -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))\