Index | Thread | Search

From:
Vitaliy Makkoveev <otto@bsdbox.dev>
Subject:
Re: retire PR_MPSOCKET
To:
Alexander Bluhm <bluhm@openbsd.org>
Cc:
tech@openbsd.org
Date:
Sun, 5 Jan 2025 14:24:36 +0300

Download raw body.

Thread
  • Alexander Bluhm:

    retire PR_MPSOCKET

    • Vitaliy Makkoveev:

      retire PR_MPSOCKET

> On 5 Jan 2025, at 14:11, Alexander Bluhm <bluhm@openbsd.org> wrote:
> 
> Hi,
> 
> TCP socket layer is MP safe for more than a week now.  That means
> all protocols sockets have the PR_MPSOCKET flag.  So we can remove
> it.
> 
> ok?
> 

ok mvs

> bluhm
> 
> Index: kern/uipc_socket2.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/kern/uipc_socket2.c,v
> diff -u -p -r1.163 uipc_socket2.c
> --- kern/uipc_socket2.c	3 Jan 2025 12:56:14 -0000	1.163
> +++ kern/uipc_socket2.c	5 Jan 2025 10:50:53 -0000
> @@ -362,11 +362,8 @@ solock_shared(struct socket *so)
> 	switch (so->so_proto->pr_domain->dom_family) {
> 	case PF_INET:
> 	case PF_INET6:
> -		if (ISSET(so->so_proto->pr_flags, PR_MPSOCKET)) {
> -			NET_LOCK_SHARED();
> -			rw_enter_write(&so->so_lock);
> -		} else
> -			NET_LOCK();
> +		NET_LOCK_SHARED();
> +		rw_enter_write(&so->so_lock);
> 		break;
> 	default:
> 		rw_enter_write(&so->so_lock);
> @@ -422,11 +419,8 @@ sounlock_shared(struct socket *so)
> 	switch (so->so_proto->pr_domain->dom_family) {
> 	case PF_INET:
> 	case PF_INET6:
> -		if (ISSET(so->so_proto->pr_flags, PR_MPSOCKET)) {
> -			rw_exit_write(&so->so_lock);
> -			NET_UNLOCK_SHARED();
> -		} else
> -			NET_UNLOCK();
> +		rw_exit_write(&so->so_lock);
> +		NET_UNLOCK_SHARED();
> 		break;
> 	default:
> 		rw_exit_write(&so->so_lock);
> @@ -478,15 +472,11 @@ sosleep_nsec(struct socket *so, void *id
> 	switch (so->so_proto->pr_domain->dom_family) {
> 	case PF_INET:
> 	case PF_INET6:
> -		if (ISSET(so->so_proto->pr_flags, PR_MPSOCKET) &&
> -		    rw_status(&netlock) == RW_READ) {
> +		if (rw_status(&netlock) == RW_READ)
> 			rw_exit_write(&so->so_lock);
> -		}
> 		ret = rwsleep_nsec(ident, &netlock, prio, wmesg, nsecs);
> -		if (ISSET(so->so_proto->pr_flags, PR_MPSOCKET) &&
> -		    rw_status(&netlock) == RW_READ) {
> +		if (rw_status(&netlock) == RW_READ)
> 			rw_enter_write(&so->so_lock);
> -		}
> 		break;
> 	default:
> 		ret = rwsleep_nsec(ident, &so->so_lock, prio, wmesg, nsecs);
> Index: net/af_frame.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/af_frame.c,v
> diff -u -p -r1.1 af_frame.c
> --- net/af_frame.c	15 Dec 2024 11:00:05 -0000	1.1
> +++ net/af_frame.c	5 Jan 2025 10:50:53 -0000
> @@ -40,7 +40,7 @@ static const struct protosw framesw[] = 
> 		.pr_type	= SOCK_DGRAM,
> 		.pr_domain	= &framedomain,
> 		.pr_protocol	= IFT_ETHER,
> -		.pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET,
> +		.pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT,
> 
> 		.pr_ctloutput	= ether_frm_ctloutput,
> 		.pr_usrreqs	= &ether_frm_usrreqs,
> Index: netinet/in_proto.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_proto.c,v
> diff -u -p -r1.120 in_proto.c
> --- netinet/in_proto.c	1 Jan 2025 13:44:22 -0000	1.120
> +++ netinet/in_proto.c	5 Jan 2025 10:50:53 -0000
> @@ -185,8 +185,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_DGRAM,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_UDP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_SPLICE|PR_MPINPUT|PR_MPSOCKET|
> -		      PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_SPLICE|PR_MPINPUT|PR_MPSYSCTL,
>   .pr_input	= udp_input,
>   .pr_ctlinput	= udp_ctlinput,
>   .pr_ctloutput	= ip_ctloutput,
> @@ -198,7 +197,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_STREAM,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_TCP,
> -  .pr_flags	= PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS|PR_SPLICE|PR_MPSOCKET,
> +  .pr_flags	= PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS|PR_SPLICE,
>   .pr_input	= tcp_input,
>   .pr_ctlinput	= tcp_ctlinput,
>   .pr_ctloutput	= tcp_ctloutput,
> @@ -211,7 +210,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_RAW,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT,
>   .pr_input	= rip_input,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &rip_usrreqs,
> @@ -220,7 +219,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_ICMP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= icmp_input,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &rip_usrreqs,
> @@ -231,7 +230,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_IPV4,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
> #if NGIF > 0
>   .pr_input	= in_gif_input,
> #else
> @@ -247,7 +246,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_IPV6,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
> #if NGIF > 0
>   .pr_input	= in_gif_input,
> #else
> @@ -262,7 +261,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_MPLS,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
>   .pr_input	= in_gif_input,
>   .pr_usrreqs	= &rip_usrreqs,
> },
> @@ -271,7 +270,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_IGMP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= igmp_input,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &rip_usrreqs,
> @@ -285,7 +284,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_AH,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= ah46_input,
>   .pr_ctlinput	= ah4_ctlinput,
>   .pr_ctloutput	= rip_ctloutput,
> @@ -296,7 +295,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_ESP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
>   .pr_input	= esp46_input,
>   .pr_ctlinput	= esp4_ctlinput,
>   .pr_ctloutput	= rip_ctloutput,
> @@ -307,7 +306,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_IPCOMP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= ipcomp46_input,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &rip_usrreqs,
> @@ -319,7 +318,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_GRE,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= gre_input,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &gre_usrreqs,
> @@ -331,7 +330,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_CARP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= carp_proto_input,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &rip_usrreqs,
> @@ -343,7 +342,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_PFSYNC,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= pfsync_input4,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &rip_usrreqs,
> @@ -355,7 +354,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_DIVERT,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &divert_usrreqs,
>   .pr_init	= divert_init,
> @@ -367,7 +366,7 @@ const struct protosw inetsw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
>   .pr_protocol	= IPPROTO_ETHERIP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= ip_etherip_input,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &rip_usrreqs,
> @@ -378,7 +377,7 @@ const struct protosw inetsw[] = {
>   /* raw wildcard */
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inetdomain,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT,
>   .pr_input	= rip_input,
>   .pr_ctloutput	= rip_ctloutput,
>   .pr_usrreqs	= &rip_usrreqs,
> Index: netinet6/in6_proto.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/in6_proto.c,v
> diff -u -p -r1.123 in6_proto.c
> --- netinet6/in6_proto.c	27 Dec 2024 10:15:09 -0000	1.123
> +++ netinet6/in6_proto.c	5 Jan 2025 10:50:53 -0000
> @@ -136,8 +136,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_DGRAM,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_UDP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_SPLICE|PR_MPINPUT|PR_MPSOCKET|
> -		      PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_SPLICE|PR_MPINPUT|PR_MPSYSCTL,
>   .pr_input	= udp_input,
>   .pr_ctlinput	= udp6_ctlinput,
>   .pr_ctloutput	= ip6_ctloutput,
> @@ -148,7 +147,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_STREAM,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_TCP,
> -  .pr_flags	= PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS|PR_SPLICE|PR_MPSOCKET,
> +  .pr_flags	= PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS|PR_SPLICE,
>   .pr_input	= tcp_input,
>   .pr_ctlinput	= tcp6_ctlinput,
>   .pr_ctloutput	= tcp_ctloutput,
> @@ -159,7 +158,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_RAW,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSYSCTL,
>   .pr_input	= rip6_input,
>   .pr_ctlinput	= rip6_ctlinput,
>   .pr_ctloutput	= rip6_ctloutput,
> @@ -170,7 +169,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_ICMPV6,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
>   .pr_input	= icmp6_input,
>   .pr_ctlinput	= rip6_ctlinput,
>   .pr_ctloutput	= rip6_ctloutput,
> @@ -205,7 +204,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_AH,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= ah46_input,
>   .pr_ctloutput	= rip6_ctloutput,
>   .pr_usrreqs	= &rip6_usrreqs,
> @@ -215,7 +214,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_ESP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
>   .pr_input	= esp46_input,
>   .pr_ctloutput	= rip6_ctloutput,
>   .pr_usrreqs	= &rip6_usrreqs,
> @@ -225,7 +224,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_IPCOMP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= ipcomp46_input,
>   .pr_ctloutput	= rip6_ctloutput,
>   .pr_usrreqs	= &rip6_usrreqs,
> @@ -236,7 +235,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_IPV4,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
> #if NGIF > 0
>   .pr_input	= in6_gif_input,
> #else
> @@ -249,7 +248,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_IPV6,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
> #if NGIF > 0
>   .pr_input	= in6_gif_input,
> #else
> @@ -263,7 +262,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_MPLS,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
> #if NGIF > 0
>   .pr_input	= in6_gif_input,
> #else
> @@ -278,7 +277,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_CARP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_input	= carp6_proto_input,
>   .pr_ctloutput = rip6_ctloutput,
>   .pr_usrreqs	= &rip6_usrreqs,
> @@ -290,7 +289,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_DIVERT,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSYSCTL,
>   .pr_ctloutput	= rip6_ctloutput,
>   .pr_usrreqs	= &divert6_usrreqs,
>   .pr_init	= divert6_init,
> @@ -302,7 +301,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_ETHERIP,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
>   .pr_input	= ip6_etherip_input,
>   .pr_ctloutput	= rip6_ctloutput,
>   .pr_usrreqs	= &rip6_usrreqs,
> @@ -313,7 +312,7 @@ const struct protosw inet6sw[] = {
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
>   .pr_protocol	= IPPROTO_GRE,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR,
>   .pr_input	= gre_input6,
>   .pr_ctloutput	= rip6_ctloutput,
>   .pr_usrreqs	= &rip6_usrreqs,
> @@ -323,7 +322,7 @@ const struct protosw inet6sw[] = {
>   /* raw wildcard */
>   .pr_type	= SOCK_RAW,
>   .pr_domain	= &inet6domain,
> -  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET,
> +  .pr_flags	= PR_ATOMIC|PR_ADDR|PR_MPINPUT,
>   .pr_input	= rip6_input,
>   .pr_ctloutput	= rip6_ctloutput,
>   .pr_usrreqs	= &rip6_usrreqs,
> Index: sys/protosw.h
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/sys/protosw.h,v
> diff -u -p -r1.70 protosw.h
> --- sys/protosw.h	29 Oct 2024 12:40:17 -0000	1.70
> +++ sys/protosw.h	5 Jan 2025 10:50:53 -0000
> @@ -130,7 +130,6 @@ struct protosw {
> 					   socket */
> #define PR_SPLICE	0x0040		/* socket splicing is possible */
> #define PR_MPINPUT	0x0080		/* input runs with shared netlock */
> -#define PR_MPSOCKET	0x0100		/* socket uses shared netlock */
> #define PR_MPSYSCTL	0x0200		/* mp-safe sysctl(2) handler */
> 
> /*
>