diff options
| author | Bill Paul <wpaul@FreeBSD.org> | 2004-01-26 08:36:18 +0000 |
|---|---|---|
| committer | Bill Paul <wpaul@FreeBSD.org> | 2004-01-26 08:36:18 +0000 |
| commit | 6c272c024129330db335dcf1742aa42036095e49 (patch) | |
| tree | 9fae3b1243baf7d95db74d979363d36e23e82032 /sys/compat | |
| parent | 09d2d42edd857224d7657d395ee1e20d0ae52f21 (diff) | |
Notes
Diffstat (limited to 'sys/compat')
| -rw-r--r-- | sys/compat/ndis/kern_ndis.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/sys/compat/ndis/kern_ndis.c b/sys/compat/ndis/kern_ndis.c index c02b15a08d47..e640e8e78b9a 100644 --- a/sys/compat/ndis/kern_ndis.c +++ b/sys/compat/ndis/kern_ndis.c @@ -113,6 +113,7 @@ static STAILQ_HEAD(ndisqhead, ndis_req) ndis_ttodo; struct ndisqhead ndis_itodo; struct ndisqhead ndis_free; static int ndis_jobs = 32; +static int ndis_devs = 0; static struct ndisproc ndis_tproc; static struct ndisproc ndis_iproc; @@ -145,10 +146,22 @@ ndis_modevent(module_t mod, int cmd, void *arg) ndis_create_kthreads(); break; - case MOD_UNLOAD: case MOD_SHUTDOWN: /* stop kthreads */ ndis_destroy_kthreads(); + if (ndis_devs == 0) { + /* Shut down subsystems */ + ndis_libfini(); + ntoskrnl_libfini(); + + /* Remove zones */ + uma_zdestroy(ndis_packet_zone); + uma_zdestroy(ndis_buffer_zone); + } + break; + case MOD_UNLOAD: + /* stop kthreads */ + ndis_destroy_kthreads(); /* Shut down subsystems */ ndis_libfini(); @@ -1191,6 +1204,9 @@ ndis_shutdown_nic(arg) else shutdownfunc(sc->ndis_chars.nmc_rsvd0); + ndis_shrink_thrqueue(8); + ndis_devs--; + return(0); } @@ -1384,6 +1400,7 @@ ndis_unload_driver(arg) ndis_flush_sysctls(sc); ndis_shrink_thrqueue(8); + ndis_devs--; return(0); } @@ -1493,5 +1510,7 @@ ndis_load_driver(img, arg) ndis_enlarge_thrqueue(8); + ndis_devs++; + return(0); } |
