From: Vitaliy Makkoveev Subject: Re: retire PR_MPSOCKET To: Alexander Bluhm Cc: tech@openbsd.org Date: Sun, 5 Jan 2025 14:24:36 +0300 > On 5 Jan 2025, at 14:11, Alexander Bluhm 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 = ðer_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 */ > > /* >