Index: sys/arch/amd64/conf/GENERIC.MP =================================================================== RCS file: /mount/openbsd/cvs/src/sys/arch/amd64/conf/GENERIC.MP,v diff -u -p -u -p -r1.16 GENERIC.MP --- sys/arch/amd64/conf/GENERIC.MP 9 Feb 2021 14:06:19 -0000 1.16 +++ sys/arch/amd64/conf/GENERIC.MP 4 Feb 2025 19:21:25 -0000 @@ -4,6 +4,6 @@ include "arch/amd64/conf/GENERIC" option MULTIPROCESSOR #option MP_LOCKDEBUG -#option WITNESS +option WITNESS cpu* at mainbus? Index: sys/arch/arm64/conf/GENERIC.MP =================================================================== RCS file: /mount/openbsd/cvs/src/sys/arch/arm64/conf/GENERIC.MP,v diff -u -p -u -p -r1.5 GENERIC.MP --- sys/arch/arm64/conf/GENERIC.MP 1 Jul 2018 21:05:07 -0000 1.5 +++ sys/arch/arm64/conf/GENERIC.MP 4 Feb 2025 19:21:25 -0000 @@ -4,6 +4,6 @@ include "arch/arm64/conf/GENERIC" option MULTIPROCESSOR #option MP_LOCKDEBUG -#option WITNESS +option WITNESS cpu* at mainbus? Index: sys/arch/i386/conf/GENERIC.MP =================================================================== RCS file: /mount/openbsd/cvs/src/sys/arch/i386/conf/GENERIC.MP,v diff -u -p -u -p -r1.11 GENERIC.MP --- sys/arch/i386/conf/GENERIC.MP 3 Jun 2018 05:18:33 -0000 1.11 +++ sys/arch/i386/conf/GENERIC.MP 4 Feb 2025 19:21:25 -0000 @@ -7,6 +7,6 @@ include "arch/i386/conf/GENERIC" option MULTIPROCESSOR # Multiple processor support #option MP_LOCKDEBUG -#option WITNESS +option WITNESS cpu* at mainbus? Index: sys/arch/macppc/conf/GENERIC.MP =================================================================== RCS file: /mount/openbsd/cvs/src/sys/arch/macppc/conf/GENERIC.MP,v diff -u -p -u -p -r1.2 GENERIC.MP --- sys/arch/macppc/conf/GENERIC.MP 15 Apr 2020 08:09:33 -0000 1.2 +++ sys/arch/macppc/conf/GENERIC.MP 4 Feb 2025 19:21:25 -0000 @@ -4,6 +4,6 @@ include "arch/macppc/conf/GENERIC" option MULTIPROCESSOR #option MP_LOCKDEBUG -#option WITNESS +option WITNESS cpu* at mainbus? Index: sys/arch/powerpc64/conf/GENERIC.MP =================================================================== RCS file: /mount/openbsd/cvs/src/sys/arch/powerpc64/conf/GENERIC.MP,v diff -u -p -u -p -r1.1 GENERIC.MP --- sys/arch/powerpc64/conf/GENERIC.MP 21 Jul 2020 21:38:31 -0000 1.1 +++ sys/arch/powerpc64/conf/GENERIC.MP 4 Feb 2025 19:21:25 -0000 @@ -4,6 +4,6 @@ include "arch/powerpc64/conf/GENERIC" option MULTIPROCESSOR #option MP_LOCKDEBUG -#option WITNESS +option WITNESS cpu* at mainbus? Index: sys/arch/riscv64/conf/GENERIC.MP =================================================================== RCS file: /mount/openbsd/cvs/src/sys/arch/riscv64/conf/GENERIC.MP,v diff -u -p -u -p -r1.1 GENERIC.MP --- sys/arch/riscv64/conf/GENERIC.MP 29 Jun 2021 21:27:52 -0000 1.1 +++ sys/arch/riscv64/conf/GENERIC.MP 4 Feb 2025 19:21:25 -0000 @@ -4,6 +4,6 @@ include "arch/riscv64/conf/GENERIC" option MULTIPROCESSOR #option MP_LOCKDEBUG -#option WITNESS +option WITNESS cpu* at mainbus? Index: sys/kern/uipc_socket.c =================================================================== RCS file: /mount/openbsd/cvs/src/sys/kern/uipc_socket.c,v diff -u -p -u -p -r1.370 uipc_socket.c --- sys/kern/uipc_socket.c 3 Feb 2025 09:00:55 -0000 1.370 +++ sys/kern/uipc_socket.c 4 Feb 2025 19:21:23 -0000 @@ -77,6 +77,9 @@ int filt_sowprocess(struct knote *kn, st int filt_sormodify(struct kevent *kev, struct knote *kn); int filt_sorprocess(struct knote *kn, struct kevent *kev); +int filt_soemodify(struct kevent *kev, struct knote *kn); +int filt_soeprocess(struct knote *kn, struct kevent *kev); + const struct filterops soread_filtops = { .f_flags = FILTEROP_ISFD | FILTEROP_MPSAFE, .f_attach = NULL, @@ -100,8 +103,8 @@ const struct filterops soexcept_filtops .f_attach = NULL, .f_detach = filt_sordetach, .f_event = filt_soexcept, - .f_modify = filt_sormodify, - .f_process = filt_sorprocess, + .f_modify = filt_soemodify, + .f_process = filt_soeprocess, }; #ifndef SOMINCONN @@ -2241,38 +2244,6 @@ sohasoutofband(struct socket *so) knote(&so->so_rcv.sb_klist, 0); } -void -sofilt_lock(struct socket *so, struct sockbuf *sb) -{ - switch (so->so_proto->pr_domain->dom_family) { - case PF_INET: - case PF_INET6: - NET_LOCK_SHARED(); - break; - default: - rw_enter_write(&so->so_lock); - break; - } - - mtx_enter(&sb->sb_mtx); -} - -void -sofilt_unlock(struct socket *so, struct sockbuf *sb) -{ - mtx_leave(&sb->sb_mtx); - - switch (so->so_proto->pr_domain->dom_family) { - case PF_INET: - case PF_INET6: - NET_UNLOCK_SHARED(); - break; - default: - rw_exit_write(&so->so_lock); - break; - } -} - int soo_kqfilter(struct file *fp, struct knote *kn) { @@ -2470,9 +2441,13 @@ filt_sormodify(struct kevent *kev, struc struct socket *so = kn->kn_fp->f_data; int rv; - sofilt_lock(so, &so->so_rcv); + if (so->so_proto->pr_flags & PR_WANTRCVD) + solock_shared(so); + mtx_enter(&so->so_rcv.sb_mtx); rv = knote_modify(kev, kn); - sofilt_unlock(so, &so->so_rcv); + mtx_leave(&so->so_rcv.sb_mtx); + if (so->so_proto->pr_flags & PR_WANTRCVD) + sounlock_shared(so); return (rv); } @@ -2483,9 +2458,39 @@ filt_sorprocess(struct knote *kn, struct struct socket *so = kn->kn_fp->f_data; int rv; - sofilt_lock(so, &so->so_rcv); + if (so->so_proto->pr_flags & PR_WANTRCVD) + solock_shared(so); + mtx_enter(&so->so_rcv.sb_mtx); rv = knote_process(kn, kev); - sofilt_unlock(so, &so->so_rcv); + mtx_leave(&so->so_rcv.sb_mtx); + if (so->so_proto->pr_flags & PR_WANTRCVD) + sounlock_shared(so); + + return (rv); +} + +int +filt_soemodify(struct kevent *kev, struct knote *kn) +{ + struct socket *so = kn->kn_fp->f_data; + int rv; + + mtx_enter(&so->so_rcv.sb_mtx); + rv = knote_modify(kev, kn); + mtx_leave(&so->so_rcv.sb_mtx); + + return (rv); +} + +int +filt_soeprocess(struct knote *kn, struct kevent *kev) +{ + struct socket *so = kn->kn_fp->f_data; + int rv; + + mtx_enter(&so->so_rcv.sb_mtx); + rv = knote_process(kn, kev); + mtx_leave(&so->so_rcv.sb_mtx); return (rv); }