From 20faa3245f917c47633cb1a7d96ad498437aee52 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Sun, 3 Jan 2016 10:21:43 +0800 Subject: [PATCH] kqueue: Move notifymsglist out of kqinfo It is only used by socket code. --- sys/gnu/vfs/ext2fs/ext2_extern.h | 1 + sys/kern/uipc_msg.c | 6 +++--- sys/kern/uipc_socket.c | 4 ++-- sys/kern/uipc_socket2.c | 11 +++++------ sys/sys/event.h | 4 ---- sys/sys/socketvar.h | 1 + sys/sys/un.h | 1 + 7 files changed, 13 insertions(+), 15 deletions(-) diff --git a/sys/gnu/vfs/ext2fs/ext2_extern.h b/sys/gnu/vfs/ext2fs/ext2_extern.h index c82f61f5a2..50bab0507b 100644 --- a/sys/gnu/vfs/ext2fs/ext2_extern.h +++ b/sys/gnu/vfs/ext2fs/ext2_extern.h @@ -51,6 +51,7 @@ struct vfsconf; struct vnode; struct indir; struct statfs; +struct sockaddr; int ext2_alloc (struct inode *, daddr_t, daddr_t, int, struct ucred *, daddr_t *); diff --git a/sys/kern/uipc_msg.c b/sys/kern/uipc_msg.c index 89e9a7fbb2..f73afba0af 100644 --- a/sys/kern/uipc_msg.c +++ b/sys/kern/uipc_msg.c @@ -630,13 +630,13 @@ netmsg_so_notify(netmsg_t msg) lwkt_getpooltoken(so); atomic_set_int(&ssb->ssb_flags, SSB_MEVENT); if (msg->notify.nm_predicate(&msg->notify)) { - if (TAILQ_EMPTY(&ssb->ssb_kq.ki_mlist)) + if (TAILQ_EMPTY(&ssb->ssb_mlist)) atomic_clear_int(&ssb->ssb_flags, SSB_MEVENT); lwkt_relpooltoken(so); lwkt_replymsg(&msg->base.lmsg, msg->base.lmsg.ms_error); } else { - TAILQ_INSERT_TAIL(&ssb->ssb_kq.ki_mlist, &msg->notify, nm_list); + TAILQ_INSERT_TAIL(&ssb->ssb_mlist, &msg->notify, nm_list); /* * NOTE: * If predict ever blocks, 'tok' will be released, so @@ -710,7 +710,7 @@ netmsg_so_notify_abort(netmsg_t msg) ssb = (nmsg->nm_etype & NM_REVENT) ? &nmsg->base.nm_so->so_rcv : &nmsg->base.nm_so->so_snd; - TAILQ_REMOVE(&ssb->ssb_kq.ki_mlist, nmsg, nm_list); + TAILQ_REMOVE(&ssb->ssb_mlist, nmsg, nm_list); lwkt_relpooltoken(nmsg->base.nm_so); lwkt_replymsg(&nmsg->base.lmsg, EINTR); } else { diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 2266141f70..a98f75c457 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -178,8 +178,8 @@ soalloc(int waitok, struct protosw *pr) /* XXX race condition for reentrant kernel */ so->so_proto = pr; TAILQ_INIT(&so->so_aiojobq); - TAILQ_INIT(&so->so_rcv.ssb_kq.ki_mlist); - TAILQ_INIT(&so->so_snd.ssb_kq.ki_mlist); + TAILQ_INIT(&so->so_rcv.ssb_mlist); + TAILQ_INIT(&so->so_snd.ssb_mlist); lwkt_token_init(&so->so_rcv.ssb_token, "rcvtok"); lwkt_token_init(&so->so_snd.ssb_token, "sndtok"); spin_init(&so->so_rcvd_spin, "soalloc"); diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c index cceb34b22e..7b95e021df 100644 --- a/sys/kern/uipc_socket2.c +++ b/sys/kern/uipc_socket2.c @@ -527,7 +527,6 @@ socantrcvmore(struct socket *so) void sowakeup(struct socket *so, struct signalsockbuf *ssb) { - struct kqinfo *kqinfo = &ssb->ssb_kq; uint32_t flags; /* @@ -579,11 +578,11 @@ sowakeup(struct socket *so, struct signalsockbuf *ssb) pgsigio(so->so_sigio, SIGIO, 0); if (ssb->ssb_flags & SSB_UPCALL) (*so->so_upcall)(so, so->so_upcallarg, M_NOWAIT); - KNOTE(&kqinfo->ki_note, 0); + KNOTE(&ssb->ssb_kq.ki_note, 0); /* * This is a bit of a hack. Multiple threads can wind up scanning - * ki_mlist concurrently due to the fact that this function can be + * ssb_mlist concurrently due to the fact that this function can be * called on a foreign socket, so we can't afford to block here. * * We need the pool token for (so) (likely the listne socket if @@ -594,14 +593,14 @@ sowakeup(struct socket *so, struct signalsockbuf *ssb) struct netmsg_so_notify *msg, *nmsg; lwkt_getpooltoken(so); - TAILQ_FOREACH_MUTABLE(msg, &kqinfo->ki_mlist, nm_list, nmsg) { + TAILQ_FOREACH_MUTABLE(msg, &ssb->ssb_mlist, nm_list, nmsg) { if (msg->nm_predicate(msg)) { - TAILQ_REMOVE(&kqinfo->ki_mlist, msg, nm_list); + TAILQ_REMOVE(&ssb->ssb_mlist, msg, nm_list); lwkt_replymsg(&msg->base.lmsg, msg->base.lmsg.ms_error); } } - if (TAILQ_EMPTY(&ssb->ssb_kq.ki_mlist)) + if (TAILQ_EMPTY(&ssb->ssb_mlist)) atomic_clear_int(&ssb->ssb_flags, SSB_MEVENT); lwkt_relpooltoken(so); } diff --git a/sys/sys/event.h b/sys/sys/event.h index c3b3a2588c..5689530b69 100644 --- a/sys/sys/event.h +++ b/sys/sys/event.h @@ -33,9 +33,6 @@ #ifndef _SYS_TYPES_H_ #include #endif -#ifndef _NET_NETISR_H_ -#include /* struct notifymsglist */ -#endif #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES) #include #endif @@ -161,7 +158,6 @@ SLIST_HEAD(klist, knote); */ struct kqinfo { struct klist ki_note; /* kernel note list */ - struct notifymsglist ki_mlist; /* list of pending predicate messages */ }; #endif diff --git a/sys/sys/socketvar.h b/sys/sys/socketvar.h index e4fe6b34bb..8bed71b243 100644 --- a/sys/sys/socketvar.h +++ b/sys/sys/socketvar.h @@ -76,6 +76,7 @@ struct accept_filter; struct signalsockbuf { struct sockbuf sb; struct kqinfo ssb_kq; /* process selecting read/write */ + struct notifymsglist ssb_mlist; /* list of pending predicate messages */ uint32_t ssb_flags; /* flags, see below (use atomic ops) */ u_int ssb_timeo; /* timeout for read/write */ long ssb_lowat; /* low water mark */ diff --git a/sys/sys/un.h b/sys/sys/un.h index eda7650efc..df226c47a6 100644 --- a/sys/sys/un.h +++ b/sys/sys/un.h @@ -66,6 +66,7 @@ struct sockaddr_un { struct mbuf; struct socket; struct sockopt; +union netmsg; int uipc_usrreq (struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control); -- 2.41.0