mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
cxgbe: Deactivate upper layer drivers (like TOE) during detach.
Reviewed by: np
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D35237
(cherry picked from commit 12b37f8f9c)
This commit is contained in:
parent
6480563d06
commit
84fc080266
1 changed files with 38 additions and 0 deletions
|
|
@ -859,6 +859,7 @@ static int hold_clip_addr(struct adapter *, struct t4_clip_addr *);
|
|||
static int release_clip_addr(struct adapter *, struct t4_clip_addr *);
|
||||
#ifdef TCP_OFFLOAD
|
||||
static int toe_capability(struct vi_info *, bool);
|
||||
static int t4_deactivate_all_uld(struct adapter *);
|
||||
static void t4_async_event(struct adapter *);
|
||||
#endif
|
||||
#ifdef KERN_TLS
|
||||
|
|
@ -1692,6 +1693,15 @@ t4_detach_common(device_t dev)
|
|||
|
||||
sc = device_get_softc(dev);
|
||||
|
||||
#ifdef TCP_OFFLOAD
|
||||
rc = t4_deactivate_all_uld(sc);
|
||||
if (rc) {
|
||||
device_printf(dev,
|
||||
"failed to detach upper layer drivers: %d\n", rc);
|
||||
return (rc);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (sc->cdev) {
|
||||
destroy_dev(sc->cdev);
|
||||
sc->cdev = NULL;
|
||||
|
|
@ -12624,6 +12634,34 @@ t4_deactivate_uld(struct adapter *sc, int id)
|
|||
return (rc);
|
||||
}
|
||||
|
||||
static int
|
||||
t4_deactivate_all_uld(struct adapter *sc)
|
||||
{
|
||||
int rc;
|
||||
struct uld_info *ui;
|
||||
|
||||
rc = begin_synchronized_op(sc, NULL, SLEEP_OK, "t4detuld");
|
||||
if (rc != 0)
|
||||
return (ENXIO);
|
||||
|
||||
sx_slock(&t4_uld_list_lock);
|
||||
|
||||
SLIST_FOREACH(ui, &t4_uld_list, link) {
|
||||
if (isset(&sc->active_ulds, ui->uld_id)) {
|
||||
rc = ui->deactivate(sc);
|
||||
if (rc != 0)
|
||||
break;
|
||||
clrbit(&sc->active_ulds, ui->uld_id);
|
||||
ui->refcount--;
|
||||
}
|
||||
}
|
||||
|
||||
sx_sunlock(&t4_uld_list_lock);
|
||||
end_synchronized_op(sc, 0);
|
||||
|
||||
return (rc);
|
||||
}
|
||||
|
||||
static void
|
||||
t4_async_event(struct adapter *sc)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue