Remove adapters from t4_list earlier during detach.
This ensures the clip task won't race with t4_destroy_clip_table. While here, make some mutex destroys unconditional since attach always initializes them. Reviewed by: np MFC after: 1 week Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D21952
This commit is contained in:
parent
516b5533ca
commit
bf3394bad4
@ -1475,6 +1475,10 @@ t4_detach_common(device_t dev)
|
||||
sc->cdev = NULL;
|
||||
}
|
||||
|
||||
sx_xlock(&t4_list_lock);
|
||||
SLIST_REMOVE(&t4_list, sc, adapter, link);
|
||||
sx_xunlock(&t4_list_lock);
|
||||
|
||||
sc->flags &= ~CHK_MBOX_ACCESS;
|
||||
if (sc->flags & FULL_INIT_DONE) {
|
||||
if (!(sc->flags & IS_VF))
|
||||
@ -1568,12 +1572,6 @@ t4_detach_common(device_t dev)
|
||||
free(sc->tids.tid_tab, M_CXGBE);
|
||||
free(sc->tt.tls_rx_ports, M_CXGBE);
|
||||
t4_destroy_dma_tag(sc);
|
||||
if (mtx_initialized(&sc->sc_lock)) {
|
||||
sx_xlock(&t4_list_lock);
|
||||
SLIST_REMOVE(&t4_list, sc, adapter, link);
|
||||
sx_xunlock(&t4_list_lock);
|
||||
mtx_destroy(&sc->sc_lock);
|
||||
}
|
||||
|
||||
callout_drain(&sc->sfl_callout);
|
||||
if (mtx_initialized(&sc->tids.ftid_lock)) {
|
||||
@ -1582,12 +1580,8 @@ t4_detach_common(device_t dev)
|
||||
}
|
||||
if (mtx_initialized(&sc->tids.atid_lock))
|
||||
mtx_destroy(&sc->tids.atid_lock);
|
||||
if (mtx_initialized(&sc->sfl_lock))
|
||||
mtx_destroy(&sc->sfl_lock);
|
||||
if (mtx_initialized(&sc->ifp_lock))
|
||||
mtx_destroy(&sc->ifp_lock);
|
||||
if (mtx_initialized(&sc->reg_lock))
|
||||
mtx_destroy(&sc->reg_lock);
|
||||
|
||||
if (rw_initialized(&sc->policy_lock)) {
|
||||
rw_destroy(&sc->policy_lock);
|
||||
@ -1604,6 +1598,10 @@ t4_detach_common(device_t dev)
|
||||
rw_destroy(&mw->mw_lock);
|
||||
}
|
||||
|
||||
mtx_destroy(&sc->sfl_lock);
|
||||
mtx_destroy(&sc->reg_lock);
|
||||
mtx_destroy(&sc->sc_lock);
|
||||
|
||||
bzero(sc, sizeof(*sc));
|
||||
|
||||
return (0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user