diff options
author | 2016-11-14 08:45:30 +0000 | |
---|---|---|
committer | 2016-11-14 08:45:30 +0000 | |
commit | 441c2739be951a2801e9a8ac15381eb548fd3a44 (patch) | |
tree | 86c499a5d553dbc80c75b73afb6ce1901b8b6469 /sys/kern/uipc_socket.c | |
parent | Markup improvements: (diff) | |
download | wireguard-openbsd-441c2739be951a2801e9a8ac15381eb548fd3a44.tar.xz wireguard-openbsd-441c2739be951a2801e9a8ac15381eb548fd3a44.zip |
Remove splnet() from socket kqueue code.
splnet() was necessary when link state changes were executed from
hardware interrupt handlers, nowdays all the changes are serialized
by the KERNEL_LOCK() so assert that it is held instead.
ok mikeb@
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r-- | sys/kern/uipc_socket.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 9e8d05f6d90..12edabecfbd 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uipc_socket.c,v 1.163 2016/10/06 19:09:08 bluhm Exp $ */ +/* $OpenBSD: uipc_socket.c,v 1.164 2016/11/14 08:45:30 mpi Exp $ */ /* $NetBSD: uipc_socket.c,v 1.21 1996/02/04 02:17:52 christos Exp $ */ /* @@ -1037,12 +1037,10 @@ sorflush(struct socket *so) { struct sockbuf *sb = &so->so_rcv; struct protosw *pr = so->so_proto; - int s; struct sockbuf asb; sb->sb_flags |= SB_NOINTR; (void) sblock(sb, M_WAITOK); - s = splnet(); socantrcvmore(so); sbunlock(sb); asb = *sb; @@ -1052,7 +1050,6 @@ sorflush(struct socket *so) sb->sb_sel.si_note = asb.sb_sel.si_note; sb->sb_flags = SB_KNOTE; } - splx(s); if (pr->pr_flags & PR_RIGHTS && pr->pr_domain->dom_dispose) (*pr->pr_domain->dom_dispose)(asb.sb_mb); sbrelease(&asb); @@ -1876,7 +1873,8 @@ soo_kqfilter(struct file *fp, struct knote *kn) { struct socket *so = kn->kn_fp->f_data; struct sockbuf *sb; - int s; + + KERNEL_ASSERT_LOCKED(); switch (kn->kn_filter) { case EVFILT_READ: @@ -1894,10 +1892,9 @@ soo_kqfilter(struct file *fp, struct knote *kn) return (EINVAL); } - s = splnet(); SLIST_INSERT_HEAD(&sb->sb_sel.si_note, kn, kn_selnext); sb->sb_flags |= SB_KNOTE; - splx(s); + return (0); } @@ -1905,12 +1902,12 @@ void filt_sordetach(struct knote *kn) { struct socket *so = kn->kn_fp->f_data; - int s = splnet(); + + KERNEL_ASSERT_LOCKED(); SLIST_REMOVE(&so->so_rcv.sb_sel.si_note, kn, knote, kn_selnext); if (SLIST_EMPTY(&so->so_rcv.sb_sel.si_note)) so->so_rcv.sb_flags &= ~SB_KNOTE; - splx(s); } int @@ -1939,12 +1936,12 @@ void filt_sowdetach(struct knote *kn) { struct socket *so = kn->kn_fp->f_data; - int s = splnet(); + + KERNEL_ASSERT_LOCKED(); SLIST_REMOVE(&so->so_snd.sb_sel.si_note, kn, knote, kn_selnext); if (SLIST_EMPTY(&so->so_snd.sb_sel.si_note)) so->so_snd.sb_flags &= ~SB_KNOTE; - splx(s); } int |