Move the signal related kqueue filters to kern_event.c.
authorclaudio <claudio@openbsd.org>
Mon, 29 Jul 2024 12:42:53 +0000 (12:42 +0000)
committerclaudio <claudio@openbsd.org>
Mon, 29 Jul 2024 12:42:53 +0000 (12:42 +0000)
Since proc and signal filters share the same klist it makes sense
to keep them together.
OK mvs@

sys/kern/kern_event.c
sys/kern/kern_sig.c
sys/sys/event.h

index 7e3ae6e..e2c99fe 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: kern_event.c,v 1.198 2023/08/20 15:13:43 visa Exp $   */
+/*     $OpenBSD: kern_event.c,v 1.199 2024/07/29 12:42:53 claudio Exp $        */
 
 /*-
  * Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org>
@@ -124,6 +124,9 @@ int filt_kqueue_common(struct knote *kn, struct kqueue *kq);
 int    filt_procattach(struct knote *kn);
 void   filt_procdetach(struct knote *kn);
 int    filt_proc(struct knote *kn, long hint);
+int    filt_sigattach(struct knote *kn);
+void   filt_sigdetach(struct knote *kn);
+int    filt_signal(struct knote *kn, long hint);
 int    filt_fileattach(struct knote *kn);
 void   filt_timerexpire(void *knx);
 int    filt_timerattach(struct knote *kn);
@@ -148,6 +151,13 @@ const struct filterops proc_filtops = {
        .f_event        = filt_proc,
 };
 
+const struct filterops sig_filtops = {
+       .f_flags        = 0,
+       .f_attach       = filt_sigattach,
+       .f_detach       = filt_sigdetach,
+       .f_event        = filt_signal,
+};
+
 const struct filterops file_filtops = {
        .f_flags        = FILTEROP_ISFD | FILTEROP_MPSAFE,
        .f_attach       = filt_fileattach,
@@ -450,6 +460,55 @@ filt_proc(struct knote *kn, long hint)
        return (kn->kn_fflags != 0);
 }
 
+/*
+ * signal knotes are shared with proc knotes, so we apply a mask to
+ * the hint in order to differentiate them from process hints.  This
+ * could be avoided by using a signal-specific knote list, but probably
+ * isn't worth the trouble.
+ */
+int
+filt_sigattach(struct knote *kn)
+{
+       struct process *pr = curproc->p_p;
+       int s;
+
+       if (kn->kn_id >= NSIG)
+               return EINVAL;
+
+       kn->kn_ptr.p_process = pr;
+       kn->kn_flags |= EV_CLEAR;               /* automatically set */
+
+       s = splhigh();
+       klist_insert_locked(&pr->ps_klist, kn);
+       splx(s);
+
+       return (0);
+}
+
+void
+filt_sigdetach(struct knote *kn)
+{
+       struct process *pr = kn->kn_ptr.p_process;
+       int s;
+
+       s = splhigh();
+       klist_remove_locked(&pr->ps_klist, kn);
+       splx(s);
+}
+
+int
+filt_signal(struct knote *kn, long hint)
+{
+
+       if (hint & NOTE_SIGNAL) {
+               hint &= ~NOTE_SIGNAL;
+
+               if (kn->kn_id == hint)
+                       kn->kn_data++;
+       }
+       return (kn->kn_data != 0);
+}
+
 #define NOTE_TIMER_UNITMASK \
        (NOTE_SECONDS|NOTE_MSECONDS|NOTE_USECONDS|NOTE_NSECONDS)
 
index dd54c55..2eafc58 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: kern_sig.c,v 1.335 2024/07/29 09:49:49 claudio Exp $  */
+/*     $OpenBSD: kern_sig.c,v 1.336 2024/07/29 12:42:53 claudio Exp $  */
 /*     $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $   */
 
 /*
 
 int nosuidcoredump = 1;
 
-int    filt_sigattach(struct knote *kn);
-void   filt_sigdetach(struct knote *kn);
-int    filt_signal(struct knote *kn, long hint);
-
-const struct filterops sig_filtops = {
-       .f_flags        = 0,
-       .f_attach       = filt_sigattach,
-       .f_detach       = filt_sigdetach,
-       .f_event        = filt_signal,
-};
-
 /*
  * The array below categorizes the signals and their default actions.
  */
@@ -1974,55 +1963,6 @@ initsiginfo(siginfo_t *si, int sig, u_long trapno, int code, union sigval val)
        }
 }
 
-int
-filt_sigattach(struct knote *kn)
-{
-       struct process *pr = curproc->p_p;
-       int s;
-
-       if (kn->kn_id >= NSIG)
-               return EINVAL;
-
-       kn->kn_ptr.p_process = pr;
-       kn->kn_flags |= EV_CLEAR;               /* automatically set */
-
-       s = splhigh();
-       klist_insert_locked(&pr->ps_klist, kn);
-       splx(s);
-
-       return (0);
-}
-
-void
-filt_sigdetach(struct knote *kn)
-{
-       struct process *pr = kn->kn_ptr.p_process;
-       int s;
-
-       s = splhigh();
-       klist_remove_locked(&pr->ps_klist, kn);
-       splx(s);
-}
-
-/*
- * signal knotes are shared with proc knotes, so we apply a mask to
- * the hint in order to differentiate them from process hints.  This
- * could be avoided by using a signal-specific knote list, but probably
- * isn't worth the trouble.
- */
-int
-filt_signal(struct knote *kn, long hint)
-{
-
-       if (hint & NOTE_SIGNAL) {
-               hint &= ~NOTE_SIGNAL;
-
-               if (kn->kn_id == hint)
-                       kn->kn_data++;
-       }
-       return (kn->kn_data != 0);
-}
-
 void
 userret(struct proc *p)
 {
index 6d052d2..20cca20 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: event.h,v 1.71 2023/08/20 15:13:43 visa Exp $ */
+/*     $OpenBSD: event.h,v 1.72 2024/07/29 12:42:53 claudio Exp $      */
 
 /*-
  * Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org>
@@ -285,7 +285,6 @@ struct proc;
 struct rwlock;
 struct timespec;
 
-extern const struct filterops sig_filtops;
 extern const struct filterops dead_filtops;
 
 extern void    kqpoll_init(unsigned int);