commit 8387fae16ba08eb21481d0b3482039cc4b7dcc5c Author: Kyle Evans Date: Wed Nov 18 09:45:14 2020 -0600 Move compat32 umtx back diff --git a/sys/compat/freebsd32/freebsd32.h b/sys/compat/freebsd32/freebsd32.h index 46ba54c1971..a3774c99a0c 100644 --- a/sys/compat/freebsd32/freebsd32.h +++ b/sys/compat/freebsd32/freebsd32.h @@ -94,27 +94,6 @@ struct itimerval32 { struct timeval32 it_value; }; -struct umtx_time32 { - struct timespec32 _timeout; - uint32_t _flags; - uint32_t _clockid; -}; - -struct umtx_robust_lists_params_compat32 { - uint32_t robust_list_offset; - uint32_t robust_priv_list_offset; - uint32_t robust_inact_offset; -}; - -struct umutex32 { - volatile __lwpid_t m_owner; /* Owner of the mutex */ - __uint32_t m_flags; /* Flags of the mutex */ - __uint32_t m_ceilings[2]; /* Priority protect ceiling */ - __uint32_t m_rb_lnk; /* Robust linkage */ - __uint32_t m_pad; - __uint32_t m_spare[2]; -}; - #define FREEBSD4_MFSNAMELEN 16 #define FREEBSD4_MNAMELEN (88 - 2 * sizeof(int32_t)) diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c index f1464cb2ba4..d0489919718 100644 --- a/sys/compat/freebsd32/freebsd32_misc.c +++ b/sys/compat/freebsd32/freebsd32_misc.c @@ -3766,11 +3766,3 @@ freebsd32_sched_rr_get_interval(struct thread *td, } return (error); } - -int -freebsd32__umtx_op(struct thread *td, struct freebsd32__umtx_op_args *uap) -{ - - return (kern__umtx_op(td, uap->obj, uap->op, uap->val, uap->uaddr, - uap->uaddr2, &umtx_native_ops32)); -} diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c index acff6947430..58d3920b518 100644 --- a/sys/kern/kern_umtx.c +++ b/sys/kern/kern_umtx.c @@ -219,7 +219,41 @@ struct abs_timeout { struct timespec end; }; +struct umtx_copyops { + int (*copyin_timeout)(const void *uaddr, struct timespec *tsp); + int (*copyin_umtx_time)(const void *uaddr, size_t size, + struct _umtx_time *tp); + int (*copyin_robust_lists)(const void *uaddr, size_t size, + struct umtx_robust_lists_params *rbp); + int (*copyout_timeout)(void *uaddr, size_t size, + struct timespec *tsp); + const size_t timespec_sz; + const size_t umtx_time_sz; + const bool compat32; +}; + #ifdef COMPAT_FREEBSD32 +struct umtx_time32 { + struct timespec32 _timeout; + uint32_t _flags; + uint32_t _clockid; +}; + +struct umtx_robust_lists_params_compat32 { + uint32_t robust_list_offset; + uint32_t robust_priv_list_offset; + uint32_t robust_inact_offset; +}; + +struct umutex32 { + volatile __lwpid_t m_owner; /* Owner of the mutex */ + __uint32_t m_flags; /* Flags of the mutex */ + __uint32_t m_ceilings[2]; /* Priority protect ceiling */ + __uint32_t m_rb_lnk; /* Robust linkage */ + __uint32_t m_pad; + __uint32_t m_spare[2]; +}; + _Static_assert(sizeof(struct umutex) == sizeof(struct umutex32), "umutex32"); _Static_assert(__offsetof(struct umutex, m_spare[0]) == __offsetof(struct umutex32, m_spare[0]), "m_spare32"); @@ -4295,7 +4329,7 @@ const struct umtx_copyops umtx_native_ops32 = { }; #endif -int +static int kern__umtx_op(struct thread *td, void *obj, int op, unsigned long val, void *uaddr1, void *uaddr2, const struct umtx_copyops *ops) { @@ -4320,6 +4354,16 @@ sys__umtx_op(struct thread *td, struct _umtx_op_args *uap) uap->uaddr2, &umtx_native_ops)); } +#ifdef COMPAT_FREEBSD32 +int +freebsd32__umtx_op(struct thread *td, struct freebsd32__umtx_op_args *uap) +{ + + return (kern__umtx_op(td, uap->obj, uap->op, uap->val, uap->uaddr, + uap->uaddr2, &umtx_native_ops32)); +} +#endif + void umtx_thread_init(struct thread *td) { diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h index cc3134acce1..80383be2d15 100644 --- a/sys/sys/syscallsubr.h +++ b/sys/sys/syscallsubr.h @@ -62,7 +62,6 @@ struct sockaddr; struct stat; struct thr_param; struct uio; -struct umtx_copyops; struct vm_map; struct vmspace; @@ -80,8 +79,6 @@ struct mmap_req { int kern___getcwd(struct thread *td, char *buf, enum uio_seg bufseg, size_t buflen, size_t path_max); -int kern__umtx_op(struct thread *td, void *obj, int op, unsigned long val, - void *uaddr1, void *uaddr2, const struct umtx_copyops *ops); int kern_accept(struct thread *td, int s, struct sockaddr **name, socklen_t *namelen, struct file **fp); int kern_accept4(struct thread *td, int s, struct sockaddr **name, diff --git a/sys/sys/umtx.h b/sys/sys/umtx.h index da93d03f932..5383a548042 100644 --- a/sys/sys/umtx.h +++ b/sys/sys/umtx.h @@ -199,21 +199,5 @@ void umtx_thread_fini(struct thread *); void umtx_thread_alloc(struct thread *); void umtx_thread_exit(struct thread *); -struct umtx_copyops { - int (*copyin_timeout)(const void *uaddr, struct timespec *tsp); - int (*copyin_umtx_time)(const void *uaddr, size_t size, - struct _umtx_time *tp); - int (*copyin_robust_lists)(const void *uaddr, size_t size, - struct umtx_robust_lists_params *rbp); - int (*copyout_timeout)(void *uaddr, size_t size, - struct timespec *tsp); - const size_t timespec_sz; - const size_t umtx_time_sz; - const bool compat32; -}; - -#ifdef COMPAT_FREEBSD32 -extern const struct umtx_copyops umtx_native_ops32; -#endif #endif /* !_KERNEL */ #endif /* !_SYS_UMTX_H_ */