git: 644ca0846da3 - main - domains: make domain_init() initialize only global state

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Mon, 03 Jan 2022 18:22:58 UTC
The branch main has been updated by glebius:

URL: https://cgit.FreeBSD.org/src/commit/?id=644ca0846da3492bf286201fd9a81659d044f589

commit 644ca0846da3492bf286201fd9a81659d044f589
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2022-01-03 18:15:22 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2022-01-03 18:15:22 +0000

    domains: make domain_init() initialize only global state
    
    Now that each module handles its global and VNET initialization
    itself, there is no VNET related stuff left to do in domain_init().
    
    Differential revision:  https://reviews.freebsd.org/D33541
---
 sys/dev/hyperv/hvsock/hv_sock.c             |  2 +-
 sys/kern/uipc_domain.c                      | 52 +++++++----------------------
 sys/net/rtsock.c                            |  2 +-
 sys/netgraph/bluetooth/socket/ng_btsocket.c |  2 +-
 sys/netgraph/ng_socket.c                    |  2 +-
 sys/netinet/in_proto.c                      |  2 +-
 sys/netinet6/in6_proto.c                    |  2 +-
 sys/sys/domain.h                            | 13 --------
 8 files changed, 18 insertions(+), 59 deletions(-)

diff --git a/sys/dev/hyperv/hvsock/hv_sock.c b/sys/dev/hyperv/hvsock/hv_sock.c
index b2a84befafa2..4bd98d154cbf 100644
--- a/sys/dev/hyperv/hvsock/hv_sock.c
+++ b/sys/dev/hyperv/hvsock/hv_sock.c
@@ -130,7 +130,7 @@ static struct domain		hv_socket_domain = {
 	.dom_protoswNPROTOSW =	&hv_socket_protosw[nitems(hv_socket_protosw)]
 };
 
-VNET_DOMAIN_SET(hv_socket_);
+DOMAIN_SET(hv_socket_);
 
 #define MAX_PORT			((uint32_t)0xFFFFFFFF)
 #define MIN_PORT			((uint32_t)0x0)
diff --git a/sys/kern/uipc_domain.c b/sys/kern/uipc_domain.c
index 832db9f6e667..dc4a1541319c 100644
--- a/sys/kern/uipc_domain.c
+++ b/sys/kern/uipc_domain.c
@@ -183,29 +183,21 @@ domain_init(void *arg)
 	struct protosw *pr;
 	int flags;
 
+	MPASS(IS_DEFAULT_VNET(curvnet));
+
 	flags = atomic_load_acq_int(&dp->dom_flags);
 	if ((flags & DOMF_SUPPORTED) == 0)
 		return;
-	KASSERT((flags & DOMF_INITED) == 0 || !IS_DEFAULT_VNET(curvnet),
-	    ("Premature initialization of domain in non-default vnet"));
+	MPASS((flags & DOMF_INITED) == 0);
+
 	for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) {
-		/*
-		 * Note that with VIMAGE enabled, domain_init() will be
-		 * re-invoked for each new vnet that's created.  The below lists
-		 * are intended to be system-wide, so avoid altering global
-		 * state for non-default vnets.
-		 */
-		if (IS_DEFAULT_VNET(curvnet)) {
-			pr_usrreqs_init(pr);
-			rm_wlock(&pftimo_lock);
-			if (pr->pr_fasttimo != NULL)
-				LIST_INSERT_HEAD(&pffast_list, pr,
-				    pr_fasttimos);
-			if (pr->pr_slowtimo != NULL)
-				LIST_INSERT_HEAD(&pfslow_list, pr,
-				    pr_slowtimos);
-			rm_wunlock(&pftimo_lock);
-		}
+		pr_usrreqs_init(pr);
+		rm_wlock(&pftimo_lock);
+		if (pr->pr_fasttimo != NULL)
+			LIST_INSERT_HEAD(&pffast_list, pr, pr_fasttimos);
+		if (pr->pr_slowtimo != NULL)
+			LIST_INSERT_HEAD(&pfslow_list, pr, pr_slowtimos);
+		rm_wunlock(&pftimo_lock);
 	}
 
 	/*
@@ -215,29 +207,9 @@ domain_init(void *arg)
 	max_datalen = MHLEN - max_hdr;
 	if (max_datalen < 1)
 		panic("%s: max_datalen < 1", __func__);
-	if (IS_DEFAULT_VNET(curvnet))
-		atomic_set_rel_int(&dp->dom_flags, DOMF_INITED);
-}
-
-#ifdef VIMAGE
-void
-vnet_domain_init(void *arg)
-{
-
-	/* Virtualized case is no different -- call init functions. */
-	domain_init(arg);
+	atomic_set_rel_int(&dp->dom_flags, DOMF_INITED);
 }
 
-void
-vnet_domain_uninit(void *arg)
-{
-	struct domain *dp = arg;
-
-	if ((atomic_load_acq_int(&dp->dom_flags) & DOMF_SUPPORTED) == 0)
-		return;
-}
-#endif
-
 /*
  * Add a new protocol domain to the list of supported domains
  * Note: you cant unload it again because a socket may be using it.
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 7c4ff01e5e73..9ab07b374ea2 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -2702,4 +2702,4 @@ static struct domain routedomain = {
 	.dom_protoswNPROTOSW =	&routesw[nitems(routesw)]
 };
 
-VNET_DOMAIN_SET(route);
+DOMAIN_SET(route);
diff --git a/sys/netgraph/bluetooth/socket/ng_btsocket.c b/sys/netgraph/bluetooth/socket/ng_btsocket.c
index 93866ce79d6c..416f07a670c6 100644
--- a/sys/netgraph/bluetooth/socket/ng_btsocket.c
+++ b/sys/netgraph/bluetooth/socket/ng_btsocket.c
@@ -287,4 +287,4 @@ ng_btsocket_modevent(module_t mod, int event, void *data)
 	return (error);
 } /* ng_btsocket_modevent */
 
-VNET_DOMAIN_SET(ng_btsocket_);
+DOMAIN_SET(ng_btsocket_);
diff --git a/sys/netgraph/ng_socket.c b/sys/netgraph/ng_socket.c
index 05f37579aba1..d8a7d2f3701f 100644
--- a/sys/netgraph/ng_socket.c
+++ b/sys/netgraph/ng_socket.c
@@ -1223,7 +1223,7 @@ ngs_mod_event(module_t mod, int event, void *data)
 	return (error);
 }
 
-VNET_DOMAIN_SET(ng);
+DOMAIN_SET(ng);
 
 SYSCTL_INT(_net_graph, OID_AUTO, family, CTLFLAG_RD, SYSCTL_NULL_INT_PTR, AF_NETGRAPH, "");
 static SYSCTL_NODE(_net_graph, OID_AUTO, data, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
diff --git a/sys/netinet/in_proto.c b/sys/netinet/in_proto.c
index 035051c6f5da..b9f506518cce 100644
--- a/sys/netinet/in_proto.c
+++ b/sys/netinet/in_proto.c
@@ -302,7 +302,7 @@ struct domain inetdomain = {
 	.dom_ifdetach =		in_domifdetach
 };
 
-VNET_DOMAIN_SET(inet);
+DOMAIN_SET(inet);
 #endif /* INET */
 
 SYSCTL_NODE(_net, PF_INET, inet, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
diff --git a/sys/netinet6/in6_proto.c b/sys/netinet6/in6_proto.c
index 44eb0fa4ee62..6ccd90ac6fdd 100644
--- a/sys/netinet6/in6_proto.c
+++ b/sys/netinet6/in6_proto.c
@@ -345,7 +345,7 @@ struct domain inet6domain = {
 	.dom_ifmtu    =		in6_domifmtu
 };
 
-VNET_DOMAIN_SET(inet6);
+DOMAIN_SET(inet6);
 
 /*
  * Internet configuration info
diff --git a/sys/sys/domain.h b/sys/sys/domain.h
index c9defe8e4341..409372e91915 100644
--- a/sys/sys/domain.h
+++ b/sys/sys/domain.h
@@ -87,19 +87,6 @@ void		vnet_domain_uninit(void *);
 	    SI_ORDER_FIRST, domain_add, & name ## domain);		\
 	SYSINIT(domain_init_ ## name, SI_SUB_PROTO_DOMAIN,		\
 	    SI_ORDER_SECOND, domain_init, & name ## domain);
-#ifdef VIMAGE
-#define	VNET_DOMAIN_SET(name)						\
-	SYSINIT(domain_add_ ## name, SI_SUB_PROTO_DOMAIN,		\
-	    SI_ORDER_FIRST, domain_add, & name ## domain);		\
-	VNET_SYSINIT(vnet_domain_init_ ## name, SI_SUB_PROTO_DOMAIN,	\
-	    SI_ORDER_SECOND, vnet_domain_init, & name ## domain);	\
-	VNET_SYSUNINIT(vnet_domain_uninit_ ## name,			\
-	    SI_SUB_PROTO_DOMAIN, SI_ORDER_SECOND, vnet_domain_uninit,	\
-	    & name ## domain)
-#else /* !VIMAGE */
-#define	VNET_DOMAIN_SET(name)	DOMAIN_SET(name)
-#endif /* VIMAGE */
-
 #endif /* _KERNEL */
 
 #endif /* !_SYS_DOMAIN_H_ */