diff --git a/sys/netgraph/ng_device.c b/sys/netgraph/ng_device.c index ed81bdb44cd1..09b549228a12 100644 --- a/sys/netgraph/ng_device.c +++ b/sys/netgraph/ng_device.c @@ -63,6 +63,7 @@ #define ERROUT(x) do { error = (x); goto done; } while (0) /* Netgraph methods */ +static int ng_device_mod_event(module_t, int, void *); static ng_constructor_t ng_device_constructor; static ng_rcvmsg_t ng_device_rcvmsg; static ng_shutdown_t ng_device_shutdown; @@ -74,6 +75,7 @@ static ng_disconnect_t ng_device_disconnect; static struct ng_type ngd_typestruct = { .version = NG_ABI_VERSION, .name = NG_DEVICE_NODE_TYPE, + .mod_event = ng_device_mod_event, .constructor = ng_device_constructor, .rcvmsg = ng_device_rcvmsg, .shutdown = ng_device_shutdown, @@ -101,7 +103,6 @@ typedef struct ngd_private *priv_p; /* List of all active nodes and mutex to protect it */ static SLIST_HEAD(, ngd_private) ngd_nodes = SLIST_HEAD_INITIALIZER(ngd_nodes); static struct mtx ng_device_mtx; -MTX_SYSINIT(ng_device, &ng_device_mtx, "ng_device", MTX_DEF); /* Maximum number of NGD devices */ #define MAX_NGD 25 /* should be more than enough for now */ @@ -535,3 +536,25 @@ get_free_unit() return (unit); } + +/* + * Handle loading and unloading for this node type. + */ +static int +ng_device_mod_event(module_t mod, int event, void *data) +{ + int error = 0; + + switch (event) { + case MOD_LOAD: + mtx_init(&ng_device_mtx, "ng_device", NULL, MTX_DEF); + break; + case MOD_UNLOAD: + mtx_destroy(&ng_device_mtx); + break; + default: + error = EOPNOTSUPP; + break; + } + return (error); +} diff --git a/sys/netgraph/ng_eiface.c b/sys/netgraph/ng_eiface.c index 6a711cab8699..e4f2198f0578 100644 --- a/sys/netgraph/ng_eiface.c +++ b/sys/netgraph/ng_eiface.c @@ -92,6 +92,7 @@ static void ng_eiface_print_ioctl(struct ifnet *ifp, int cmd, caddr_t data); #endif /* Netgraph methods */ +static int ng_eiface_mod_event(module_t, int, void *); static ng_constructor_t ng_eiface_constructor; static ng_rcvmsg_t ng_eiface_rcvmsg; static ng_shutdown_t ng_eiface_rmnode; @@ -104,6 +105,7 @@ static ng_disconnect_t ng_eiface_disconnect; static struct ng_type typestruct = { .version = NG_ABI_VERSION, .name = NG_EIFACE_NODE_TYPE, + .mod_event = ng_eiface_mod_event, .constructor = ng_eiface_constructor, .rcvmsg = ng_eiface_rcvmsg, .shutdown = ng_eiface_rmnode, @@ -124,7 +126,6 @@ static int ng_units_in_use = 0; #define UNITS_BITSPERWORD (sizeof(*ng_eiface_units) * NBBY) static struct mtx ng_eiface_mtx; -MTX_SYSINIT(ng_eiface, &ng_eiface_mtx, "ng_eiface", MTX_DEF); /************************************************************************ HELPER STUFF @@ -665,3 +666,25 @@ ng_eiface_disconnect(hook_p hook) priv->ether = NULL; return (0); } + +/* + * Handle loading and unloading for this node type. + */ +static int +ng_eiface_mod_event(module_t mod, int event, void *data) +{ + int error = 0; + + switch (event) { + case MOD_LOAD: + mtx_init(&ng_eiface_mtx, "ng_eiface", NULL, MTX_DEF); + break; + case MOD_UNLOAD: + mtx_destroy(&ng_eiface_mtx); + break; + default: + error = EOPNOTSUPP; + break; + } + return (error); +} diff --git a/sys/netgraph/ng_fec.c b/sys/netgraph/ng_fec.c index c35f3b510321..e9c8ce4fa5df 100644 --- a/sys/netgraph/ng_fec.c +++ b/sys/netgraph/ng_fec.c @@ -204,6 +204,7 @@ static void ng_fec_print_ioctl(struct ifnet *ifp, int cmd, caddr_t data); #endif /* Netgraph methods */ +static int ng_fec_mod_event(module_t, int, void *); static ng_constructor_t ng_fec_constructor; static ng_rcvmsg_t ng_fec_rcvmsg; static ng_shutdown_t ng_fec_shutdown; @@ -245,6 +246,7 @@ static const struct ng_cmdlist ng_fec_cmds[] = { static struct ng_type typestruct = { .version = NG_ABI_VERSION, .name = NG_FEC_NODE_TYPE, + .mod_event = ng_fec_mod_event, .constructor = ng_fec_constructor, .rcvmsg = ng_fec_rcvmsg, .shutdown = ng_fec_shutdown, @@ -261,7 +263,6 @@ static int ng_units_in_use = 0; #define UNITS_BITSPERWORD (sizeof(*ng_fec_units) * NBBY) static struct mtx ng_fec_mtx; -MTX_SYSINIT(ng_fec, &ng_fec_mtx, "ng_fec", MTX_DEF); /* * Find the first free unit number for a new interface. @@ -1243,3 +1244,25 @@ ng_fec_shutdown(node_p node) NG_NODE_UNREF(node); return (0); } + +/* + * Handle loading and unloading for this node type. + */ +static int +ng_fec_mod_event(module_t mod, int event, void *data) +{ + int error = 0; + + switch (event) { + case MOD_LOAD: + mtx_init(&ng_fec_mtx, "ng_fec", NULL, MTX_DEF); + break; + case MOD_UNLOAD: + mtx_destroy(&ng_fec_mtx); + break; + default: + error = EOPNOTSUPP; + break; + } + return (error); +} diff --git a/sys/netgraph/ng_iface.c b/sys/netgraph/ng_iface.c index 7014c057a570..c7dee9d80fe0 100644 --- a/sys/netgraph/ng_iface.c +++ b/sys/netgraph/ng_iface.c @@ -130,6 +130,7 @@ static void ng_iface_print_ioctl(struct ifnet *ifp, int cmd, caddr_t data); #endif /* Netgraph methods */ +static int ng_iface_mod_event(module_t, int, void *); static ng_constructor_t ng_iface_constructor; static ng_rcvmsg_t ng_iface_rcvmsg; static ng_shutdown_t ng_iface_shutdown; @@ -195,6 +196,7 @@ static const struct ng_cmdlist ng_iface_cmds[] = { static struct ng_type typestruct = { .version = NG_ABI_VERSION, .name = NG_IFACE_NODE_TYPE, + .mod_event = ng_iface_mod_event, .constructor = ng_iface_constructor, .rcvmsg = ng_iface_rcvmsg, .shutdown = ng_iface_shutdown, @@ -214,7 +216,6 @@ static int ng_units_in_use = 0; #define UNITS_BITSPERWORD (sizeof(*ng_iface_units) * NBBY) static struct mtx ng_iface_mtx; -MTX_SYSINIT(ng_iface, &ng_iface_mtx, "ng_iface", MTX_DEF); /************************************************************************ HELPER STUFF @@ -836,3 +837,24 @@ ng_iface_disconnect(hook_p hook) return (0); } +/* + * Handle loading and unloading for this node type. + */ +static int +ng_iface_mod_event(module_t mod, int event, void *data) +{ + int error = 0; + + switch (event) { + case MOD_LOAD: + mtx_init(&ng_iface_mtx, "ng_iface", NULL, MTX_DEF); + break; + case MOD_UNLOAD: + mtx_destroy(&ng_iface_mtx); + break; + default: + error = EOPNOTSUPP; + break; + } + return (error); +} diff --git a/sys/netgraph/ng_socket.c b/sys/netgraph/ng_socket.c index 36b234228811..6f796d1872e9 100644 --- a/sys/netgraph/ng_socket.c +++ b/sys/netgraph/ng_socket.c @@ -159,7 +159,6 @@ SYSCTL_INT(_net_graph, OID_AUTO, recvspace, CTLFLAG_RW, static LIST_HEAD(, ngpcb) ngsocklist; static struct mtx ngsocketlist_mtx; -MTX_SYSINIT(ngsocketlist, &ngsocketlist_mtx, "ng_socketlist", MTX_DEF); #define sotongpcb(so) ((struct ngpcb *)(so)->so_pcb) @@ -1094,6 +1093,7 @@ ngs_mod_event(module_t mod, int event, void *data) switch (event) { case MOD_LOAD: + mtx_init(&ngsocketlist_mtx, "ng_socketlist", NULL, MTX_DEF); /* Register protocol domain */ net_add_domain(&ngdomain); break; @@ -1109,6 +1109,7 @@ ngs_mod_event(module_t mod, int event, void *data) /* Unregister protocol domain XXX can't do this yet.. */ if ((error = net_rm_domain(&ngdomain)) != 0) break; + mtx_destroy(&ngsocketlist_mtx); } else #endif error = EBUSY;