_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.
This commit is contained in:
parent
3c85ca21d1
commit
15eaec6a5c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=367928
@ -94,27 +94,6 @@ struct itimerval32 {
|
|||||||
struct timeval32 it_value;
|
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_MFSNAMELEN 16
|
||||||
#define FREEBSD4_MNAMELEN (88 - 2 * sizeof(int32_t))
|
#define FREEBSD4_MNAMELEN (88 - 2 * sizeof(int32_t))
|
||||||
|
|
||||||
|
@ -3766,11 +3766,3 @@ freebsd32_sched_rr_get_interval(struct thread *td,
|
|||||||
}
|
}
|
||||||
return (error);
|
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));
|
|
||||||
}
|
|
||||||
|
@ -219,7 +219,41 @@ struct abs_timeout {
|
|||||||
struct timespec end;
|
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
|
#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(sizeof(struct umutex) == sizeof(struct umutex32), "umutex32");
|
||||||
_Static_assert(__offsetof(struct umutex, m_spare[0]) ==
|
_Static_assert(__offsetof(struct umutex, m_spare[0]) ==
|
||||||
__offsetof(struct umutex32, m_spare[0]), "m_spare32");
|
__offsetof(struct umutex32, m_spare[0]), "m_spare32");
|
||||||
@ -4291,7 +4325,7 @@ const struct umtx_copyops umtx_native_ops32 = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
static int
|
||||||
kern__umtx_op(struct thread *td, void *obj, int op, unsigned long val,
|
kern__umtx_op(struct thread *td, void *obj, int op, unsigned long val,
|
||||||
void *uaddr1, void *uaddr2, const struct umtx_copyops *ops)
|
void *uaddr1, void *uaddr2, const struct umtx_copyops *ops)
|
||||||
{
|
{
|
||||||
@ -4316,6 +4350,16 @@ sys__umtx_op(struct thread *td, struct _umtx_op_args *uap)
|
|||||||
uap->uaddr2, &umtx_native_ops));
|
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
|
void
|
||||||
umtx_thread_init(struct thread *td)
|
umtx_thread_init(struct thread *td)
|
||||||
{
|
{
|
||||||
|
@ -62,7 +62,6 @@ struct sockaddr;
|
|||||||
struct stat;
|
struct stat;
|
||||||
struct thr_param;
|
struct thr_param;
|
||||||
struct uio;
|
struct uio;
|
||||||
struct umtx_copyops;
|
|
||||||
struct vm_map;
|
struct vm_map;
|
||||||
struct vmspace;
|
struct vmspace;
|
||||||
|
|
||||||
@ -80,8 +79,6 @@ struct mmap_req {
|
|||||||
|
|
||||||
int kern___getcwd(struct thread *td, char *buf, enum uio_seg bufseg,
|
int kern___getcwd(struct thread *td, char *buf, enum uio_seg bufseg,
|
||||||
size_t buflen, size_t path_max);
|
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,
|
int kern_accept(struct thread *td, int s, struct sockaddr **name,
|
||||||
socklen_t *namelen, struct file **fp);
|
socklen_t *namelen, struct file **fp);
|
||||||
int kern_accept4(struct thread *td, int s, struct sockaddr **name,
|
int kern_accept4(struct thread *td, int s, struct sockaddr **name,
|
||||||
|
@ -200,21 +200,5 @@ void umtx_thread_fini(struct thread *);
|
|||||||
void umtx_thread_alloc(struct thread *);
|
void umtx_thread_alloc(struct thread *);
|
||||||
void umtx_thread_exit(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 /* !_KERNEL */
|
||||||
#endif /* !_SYS_UMTX_H_ */
|
#endif /* !_SYS_UMTX_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user