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:
parent
3c4223a65a
commit
beb0f7e7d4
@ -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);
|
||||
|
@ -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))\
|
||||
|
Loading…
x
Reference in New Issue
Block a user