git: f51368016df4 - stable/13 - umtx: Split umtx.h on two counterparts.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 17 Jun 2022 19:37:21 UTC
The branch stable/13 has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=f51368016df44370803b1a5e9666f8409620b06e commit f51368016df44370803b1a5e9666f8409620b06e Author: Dmitry Chagin <dchagin@FreeBSD.org> AuthorDate: 2021-07-29 09:41:29 +0000 Commit: Dmitry Chagin <dchagin@FreeBSD.org> CommitDate: 2022-06-17 19:33:15 +0000 umtx: Split umtx.h on two counterparts. To prevent umtx.h polluting by future changes split it on two headers: umtx.h - ABI header for userspace; umtxvar.h - the kernel staff. While here fix umtx_key_match style. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D31248 MFC after: 2 weeks (cherry picked from commit af29f3995882fac6e1c0360c2276c7a98056957f) --- sys/compat/cloudabi/cloudabi_futex.c | 2 +- sys/compat/linux/linux_futex.c | 2 +- sys/kern/kern_exec.c | 2 +- sys/kern/kern_exit.c | 2 +- sys/kern/kern_kthread.c | 2 +- sys/kern/kern_racct.c | 2 +- sys/kern/kern_resource.c | 2 +- sys/kern/kern_thr.c | 2 +- sys/kern/kern_thread.c | 2 +- sys/kern/kern_umtx.c | 1 + sys/kern/sched_4bsd.c | 2 +- sys/kern/sched_ule.c | 2 +- sys/sys/umtx.h | 73 ------------------------ sys/sys/umtxvar.h | 106 +++++++++++++++++++++++++++++++++++ 14 files changed, 118 insertions(+), 84 deletions(-) diff --git a/sys/compat/cloudabi/cloudabi_futex.c b/sys/compat/cloudabi/cloudabi_futex.c index 153e8bce8495..fd2a1d515483 100644 --- a/sys/compat/cloudabi/cloudabi_futex.c +++ b/sys/compat/cloudabi/cloudabi_futex.c @@ -35,7 +35,7 @@ __FBSDID("$FreeBSD$"); #include <sys/proc.h> #include <sys/sx.h> #include <sys/systm.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <contrib/cloudabi/cloudabi_types_common.h> diff --git a/sys/compat/linux/linux_futex.c b/sys/compat/linux/linux_futex.c index 1858c573a576..547d52c8ca4a 100644 --- a/sys/compat/linux/linux_futex.c +++ b/sys/compat/linux/linux_futex.c @@ -57,7 +57,7 @@ __KERNEL_RCSID(1, "$NetBSD: linux_futex.c,v 1.7 2006/07/24 19:01:49 manu Exp $") #include <sys/queue.h> #include <sys/sched.h> #include <sys/sdt.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <vm/vm_extern.h> diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index f62c4582e89a..d8e1779825c6 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -71,7 +71,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sysent.h> #include <sys/sysproto.h> #include <sys/timers.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <sys/vnode.h> #include <sys/wait.h> #ifdef KTRACE diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index e89139edc825..09bad7873ff5 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -76,7 +76,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sem.h> #include <sys/sysent.h> #include <sys/timers.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #ifdef KTRACE #include <sys/ktrace.h> #endif diff --git a/sys/kern/kern_kthread.c b/sys/kern/kern_kthread.c index 32832bde2f53..2eef7798f3d6 100644 --- a/sys/kern/kern_kthread.c +++ b/sys/kern/kern_kthread.c @@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$"); #include <sys/signalvar.h> #include <sys/sysent.h> #include <sys/sx.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <sys/unistd.h> #include <sys/wait.h> #include <sys/sched.h> diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c index 797a06cc15b1..512e06814c24 100644 --- a/sys/kern/kern_racct.c +++ b/sys/kern/kern_racct.c @@ -57,7 +57,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #include <sys/sysent.h> #include <sys/sysproto.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <machine/smp.h> #ifdef RCTL diff --git a/sys/kern/kern_resource.c b/sys/kern/kern_resource.c index 3dd243199088..a0b2438acec5 100644 --- a/sys/kern/kern_resource.c +++ b/sys/kern/kern_resource.c @@ -59,7 +59,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #include <sys/sysent.h> #include <sys/time.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <vm/vm.h> #include <vm/vm_param.h> diff --git a/sys/kern/kern_thr.c b/sys/kern/kern_thr.c index 69259d78811a..18722cc6a73d 100644 --- a/sys/kern/kern_thr.c +++ b/sys/kern/kern_thr.c @@ -54,7 +54,7 @@ __FBSDID("$FreeBSD$"); #include <sys/ucontext.h> #include <sys/thr.h> #include <sys/rtprio.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <sys/limits.h> #ifdef HWPMC_HOOKS #include <sys/pmckern.h> diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index 54254112b376..c56465835b3d 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -56,7 +56,7 @@ __FBSDID("$FreeBSD$"); #include <sys/taskqueue.h> #include <sys/ktr.h> #include <sys/rwlock.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <sys/vmmeter.h> #include <sys/cpuset.h> #ifdef HWPMC_HOOKS diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c index dd1622c476c5..65e364afc35f 100644 --- a/sys/kern/kern_umtx.c +++ b/sys/kern/kern_umtx.c @@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$"); #include <sys/time.h> #include <sys/eventhandler.h> #include <sys/umtx.h> +#include <sys/umtxvar.h> #include <security/mac/mac_framework.h> diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c index 7591bef4b14e..27621b79d4b7 100644 --- a/sys/kern/sched_4bsd.c +++ b/sys/kern/sched_4bsd.c @@ -56,7 +56,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #include <sys/sx.h> #include <sys/turnstile.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <machine/pcb.h> #include <machine/smp.h> diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c index 1f859b286843..2c3e9fc57bf6 100644 --- a/sys/kern/sched_ule.c +++ b/sys/kern/sched_ule.c @@ -61,7 +61,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #include <sys/sysproto.h> #include <sys/turnstile.h> -#include <sys/umtx.h> +#include <sys/umtxvar.h> #include <sys/vmmeter.h> #include <sys/cpuset.h> #include <sys/sbuf.h> diff --git a/sys/sys/umtx.h b/sys/sys/umtx.h index 60e9dccdad91..82a8e0e4b0f0 100644 --- a/sys/sys/umtx.h +++ b/sys/sys/umtx.h @@ -132,83 +132,10 @@ struct umtx_robust_lists_params { uintptr_t robust_inact_offset; }; -#ifndef _KERNEL - __BEGIN_DECLS int _umtx_op(void *obj, int op, u_long val, void *uaddr, void *uaddr2); __END_DECLS -#else - -/* - * The umtx_key structure is used by both the Linux futex code and the - * umtx implementation to map userland addresses to unique keys. - */ - -enum { - TYPE_SIMPLE_WAIT, - TYPE_CV, - TYPE_SEM, - TYPE_SIMPLE_LOCK, - TYPE_NORMAL_UMUTEX, - TYPE_PI_UMUTEX, - TYPE_PP_UMUTEX, - TYPE_RWLOCK, - TYPE_FUTEX, - TYPE_SHM, - TYPE_PI_ROBUST_UMUTEX, - TYPE_PP_ROBUST_UMUTEX, -}; - -/* Key to represent a unique userland synchronous object */ -struct umtx_key { - int hash; - int type; - int shared; - union { - struct { - struct vm_object *object; - uintptr_t offset; - } shared; - struct { - struct vmspace *vs; - uintptr_t addr; - } private; - struct { - void *a; - uintptr_t b; - } both; - } info; -}; - -#define THREAD_SHARE 0 -#define PROCESS_SHARE 1 -#define AUTO_SHARE 2 - -struct thread; - -static inline int -umtx_key_match(const struct umtx_key *k1, const struct umtx_key *k2) -{ - return (k1->type == k2->type && - k1->info.both.a == k2->info.both.a && - k1->info.both.b == k2->info.both.b); -} - -int umtx_copyin_timeout(const void *, struct timespec *); -void umtx_exec(struct proc *p); -int umtx_key_get(const void *, int, int, struct umtx_key *); -void umtx_key_release(struct umtx_key *); -struct umtx_q *umtxq_alloc(void); -void umtxq_free(struct umtx_q *); -int kern_umtx_wake(struct thread *, void *, int, int); -void umtx_pi_adjust(struct thread *, u_char); -void umtx_thread_init(struct thread *); -void umtx_thread_fini(struct thread *); -void umtx_thread_alloc(struct thread *); -void umtx_thread_exit(struct thread *); - -#endif /* !_KERNEL */ #endif /* !_SYS_UMTX_H_ */ diff --git a/sys/sys/umtxvar.h b/sys/sys/umtxvar.h new file mode 100644 index 000000000000..b898c263201e --- /dev/null +++ b/sys/sys/umtxvar.h @@ -0,0 +1,106 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2002, Jeffrey Roberson <jeff@freebsd.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + * + */ + +#ifndef _SYS_UMTXVAR_H_ +#define _SYS_UMTXVAR_H_ + +#ifdef _KERNEL + +/* + * The umtx_key structure is used by both the Linux futex code and the + * umtx implementation to map userland addresses to unique keys. + */ +enum { + TYPE_SIMPLE_WAIT, + TYPE_CV, + TYPE_SEM, + TYPE_SIMPLE_LOCK, + TYPE_NORMAL_UMUTEX, + TYPE_PI_UMUTEX, + TYPE_PP_UMUTEX, + TYPE_RWLOCK, + TYPE_FUTEX, + TYPE_SHM, + TYPE_PI_ROBUST_UMUTEX, + TYPE_PP_ROBUST_UMUTEX, +}; + +/* Key to represent a unique userland synchronous object */ +struct umtx_key { + int hash; + int type; + int shared; + union { + struct { + struct vm_object *object; + uintptr_t offset; + } shared; + struct { + struct vmspace *vs; + uintptr_t addr; + } private; + struct { + void *a; + uintptr_t b; + } both; + } info; +}; + +#define THREAD_SHARE 0 +#define PROCESS_SHARE 1 +#define AUTO_SHARE 2 + +struct thread; + +static inline int +umtx_key_match(const struct umtx_key *k1, const struct umtx_key *k2) +{ + + return (k1->type == k2->type && + k1->info.both.a == k2->info.both.a && + k1->info.both.b == k2->info.both.b); +} + +int umtx_copyin_timeout(const void *, struct timespec *); +void umtx_exec(struct proc *p); +int umtx_key_get(const void *, int, int, struct umtx_key *); +void umtx_key_release(struct umtx_key *); +struct umtx_q *umtxq_alloc(void); +void umtxq_free(struct umtx_q *); +int kern_umtx_wake(struct thread *, void *, int, int); +void umtx_pi_adjust(struct thread *, u_char); +void umtx_thread_init(struct thread *); +void umtx_thread_fini(struct thread *); +void umtx_thread_alloc(struct thread *); +void umtx_thread_exit(struct thread *); + +#endif /* _KERNEL */ +#endif /* !_SYS_UMTXVAR_H_ */