- struct _kevent_scan scan;/* space for the generic data */
- struct fileproc *fp; /* fileproc we hold iocount on */
- int fd; /* filedescriptor for kq */
- register_t *retval; /* place to store return val */
- user_addr_t eventlist; /* user-level event list address */
- int eventcount; /* user-level event count */
- int eventout; /* number of events output */
- } ss_kevent; /* saved state for kevent() */
- } uu_state;
- /* internal support for continuation framework */
- int (*uu_continuation)(int);
- int uu_pri;
- int uu_timo;
- int uu_flag;
- struct proc * uu_proc;
+ struct _kqueue_scan scan; /* space for the generic data */
+ struct fileproc *fp; /* fileproc we hold iocount on */
+ int fd; /* fd for fileproc (if held) */
+ int eventcount; /* user-level event count */
+ int eventout; /* number of events output */
+ struct filt_process_s process_data; /* space for process data fed thru */
+ int32_t *retval; /* place to store return val */
+ user_addr_t eventlist; /* user-level event list address */
+ uint64_t data_available; /* [user/kernel] addr of in/out size */
+ } uus_kevent; /* saved state for kevent() */
+
+ struct _kevent_register {
+ struct kevent_internal_s kev; /* the kevent to maybe copy out */
+ struct knote *knote; /* the knote used for the wait */
+ struct fileproc *fp; /* fileproc we hold iocount on */
+ thread_t handoff_thread; /* thread we handed off to, has +1 */
+ struct kqueue *kq;
+ int fd; /* fd for fileproc (if held) */
+ int eventcount; /* user-level event count */
+ int eventout; /* number of events output */
+ unsigned int flags; /* flags for kevent_copyout() */
+ int32_t *retval; /* place to store return val */
+ user_addr_t ueventlist; /* the user-address to copyout to */
+ } uus_kevent_register; /* saved for EVFILT_WORKLOOP wait */
+
+ struct _kauth {
+ user_addr_t message; /* message in progress */
+ } uus_kauth;
+
+ struct ksyn_waitq_element uus_kwe; /* user for pthread synch */
+
+ struct _waitid_data {
+ struct waitid_nocancel_args *args; /* original syscall arguments */
+ int32_t *retval; /* place to store return val */
+ } uus_waitid_data;
+
+ struct _wait4_data {
+ struct wait4_nocancel_args *args; /* original syscall arguments */
+ int32_t *retval; /* place to store return val */
+ } uus_wait4_data;
+
+ struct _workq_park_data {
+ uint64_t idle_stamp;
+ uint64_t workloop_params;
+ uint32_t fulfilled_snapshot;
+ uint32_t yields;
+ void *thread_request; /* request being fulfilled, for tracing only */
+ uint32_t upcall_flags;
+ bool has_stack;
+ thread_qos_t qos;
+ } uus_workq_park_data; /* saved for parked workq threads */
+
+ struct _ulock_wait_data {
+ thread_t owner_thread;
+ thread_t old_owner;
+ int32_t *retval;
+ uint flags;
+ } uus_ulock_wait_data;
+ } uu_save;
+
+ /* Persistent memory allocations across system calls */
+ struct _select {
+ u_int32_t *ibits, *obits; /* bits to select on */
+ uint nbytes; /* number of bytes in ibits and obits */
+ } uu_select; /* saved state for select() */
+
+ /* internal support for continuation framework */
+ int (*uu_continuation)(int);
+ int uu_pri;
+ int uu_timo;
+ caddr_t uu_wchan; /* sleeping thread wait channel */
+ const char *uu_wmesg; /* ... wait message */
+ struct proc *uu_proc;
+ thread_t uu_thread;