Module Name: src Committed By: thorpej Date: Wed Jul 13 03:23:07 UTC 2022
Modified Files: src/sys/kern: kern_event.c Log Message: Funnel knote alloc/free into a single pair of functions. NFCI. To generate a diff of this commit: cvs rdiff -u -r1.141 -r1.142 src/sys/kern/kern_event.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_event.c diff -u src/sys/kern/kern_event.c:1.141 src/sys/kern/kern_event.c:1.142 --- src/sys/kern/kern_event.c:1.141 Tue May 24 20:50:19 2022 +++ src/sys/kern/kern_event.c Wed Jul 13 03:23:07 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_event.c,v 1.141 2022/05/24 20:50:19 andvar Exp $ */ +/* $NetBSD: kern_event.c,v 1.142 2022/07/13 03:23:07 thorpej Exp $ */ /*- * Copyright (c) 2008, 2009, 2021 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ #endif /* _KERNEL_OPT */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_event.c,v 1.141 2022/05/24 20:50:19 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_event.c,v 1.142 2022/07/13 03:23:07 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -423,6 +423,22 @@ knote_detach_quiesce(struct knote *kn) return false; } +static inline struct knote * +knote_alloc(bool sleepok) +{ + struct knote *kn; + + kn = kmem_zalloc(sizeof(*kn), sleepok ? KM_SLEEP : KM_NOSLEEP); + + return kn; +} + +static inline void +knote_free(struct knote *kn) +{ + kmem_free(kn, sizeof(*kn)); +} + static int filter_attach(struct knote *kn) { @@ -952,8 +968,8 @@ knote_proc_fork_track(struct proc *p1, s struct knote *knchild, *kntrack; int error = 0; - knchild = kmem_zalloc(sizeof(*knchild), KM_NOSLEEP); - kntrack = kmem_zalloc(sizeof(*knchild), KM_NOSLEEP); + knchild = knote_alloc(false); + kntrack = knote_alloc(false); if (__predict_false(knchild == NULL || kntrack == NULL)) { error = ENOMEM; goto out; @@ -1041,10 +1057,10 @@ knote_proc_fork_track(struct proc *p1, s out: if (__predict_false(knchild != NULL)) { - kmem_free(knchild, sizeof(*knchild)); + knote_free(knchild); } if (__predict_false(kntrack != NULL)) { - kmem_free(kntrack, sizeof(*kntrack)); + knote_free(kntrack); } mutex_enter(p1->p_lock); mutex_spin_enter(&kq->kq_lock); @@ -1756,14 +1772,14 @@ kqueue_register(struct kqueue *kq, struc error = 0; fd = 0; - newkn = kmem_zalloc(sizeof(*newkn), KM_SLEEP); + newkn = knote_alloc(true); rw_enter(&kqueue_filter_lock, RW_READER); kfilter = kfilter_byfilter(kev->filter); if (kfilter == NULL || kfilter->filtops == NULL) { /* filter not found nor implemented */ rw_exit(&kqueue_filter_lock); - kmem_free(newkn, sizeof(*newkn)); + knote_free(newkn); return (EINVAL); } @@ -1774,7 +1790,7 @@ kqueue_register(struct kqueue *kq, struc if (kev->ident > INT_MAX || (fp = fd_getfile(fd = kev->ident)) == NULL) { rw_exit(&kqueue_filter_lock); - kmem_free(newkn, sizeof(*newkn)); + knote_free(newkn); return EBADF; } mutex_enter(&fdp->fd_lock); @@ -1986,7 +2002,7 @@ kqueue_register(struct kqueue *kq, struc done: rw_exit(&kqueue_filter_lock); if (newkn != NULL) - kmem_free(newkn, sizeof(*newkn)); + knote_free(newkn); if (fp != NULL) fd_putfile(fd); return (error); @@ -2680,7 +2696,7 @@ again: if (kn->kn_fop->f_flags & FILTEROP_ISFD) fd_putfile(kn->kn_id); atomic_dec_uint(&kn->kn_kfilter->refcnt); - kmem_free(kn, sizeof(*kn)); + knote_free(kn); } /*