aboutsummaryrefslogtreecommitdiff
path: root/sys/compat
diff options
context:
space:
mode:
authorBill Paul <wpaul@FreeBSD.org>2004-01-26 08:36:18 +0000
committerBill Paul <wpaul@FreeBSD.org>2004-01-26 08:36:18 +0000
commit6c272c024129330db335dcf1742aa42036095e49 (patch)
tree9fae3b1243baf7d95db74d979363d36e23e82032 /sys/compat
parent09d2d42edd857224d7657d395ee1e20d0ae52f21 (diff)
Notes
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/ndis/kern_ndis.c21
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);
}