Author: kevans
Date: Sun Nov 22 05:34:51 2020
New Revision: 367928
URL: https://svnweb.freebsd.org/changeset/base/367928
Log:
_umtx_op: move compat32 definitions back in
These are reasonably compact, and a future commit will blur the compat32
lines by supporting 32-bit operations with the native _umtx_op.
Modified:
head/sys/compat/freebsd32/freebsd32.h
head/sys/compat/freebsd32/freebsd32_misc.c
head/sys/kern/kern_umtx.c
head/sys/sys/syscallsubr.h
head/sys/sys/umtx.h
Modified: head/sys/compat/freebsd32/freebsd32.h
==
--- head/sys/compat/freebsd32/freebsd32.h Sun Nov 22 05:00:28 2020
(r367927)
+++ head/sys/compat/freebsd32/freebsd32.h Sun Nov 22 05:34:51 2020
(r367928)
@@ -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_trobust_list_offset;
- uint32_trobust_priv_list_offset;
- uint32_trobust_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_MFSNAMELEN16
#define FREEBSD4_MNAMELEN (88 - 2 * sizeof(int32_t))
Modified: head/sys/compat/freebsd32/freebsd32_misc.c
==
--- head/sys/compat/freebsd32/freebsd32_misc.c Sun Nov 22 05:00:28 2020
(r367927)
+++ head/sys/compat/freebsd32/freebsd32_misc.c Sun Nov 22 05:34:51 2020
(r367928)
@@ -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));
-}
Modified: head/sys/kern/kern_umtx.c
==
--- head/sys/kern/kern_umtx.c Sun Nov 22 05:00:28 2020(r367927)
+++ head/sys/kern/kern_umtx.c Sun Nov 22 05:34:51 2020(r367928)
@@ -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_ttimespec_sz;
+ const size_tumtx_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_trobust_list_offset;
+ uint32_trobust_priv_list_offset;
+ uint32_trobust_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");
@@ -4291,7 +4325,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)
{
@@ -4315,6 +4349,16 @@ sys__umtx_op(struct thread *td, struct _umtx_op_args *
return (kern__umtx_op(td, uap->obj, uap->op, uap->val, uap->uaddr1,
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)
Modified: head/sys/sys/syscallsubr.h
===