X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/2d21ac55c334faf3a56e5634905ed6987fc787d4..7ee9d059c4eecf68ae4f8b0fb99ae2471eda79af:/bsd/sys/user.h diff --git a/bsd/sys/user.h b/bsd/sys/user.h index 89dd1cd4f..4a59aa866 100644 --- a/bsd/sys/user.h +++ b/bsd/sys/user.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2010 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -73,17 +73,22 @@ #include #include #endif +#ifdef XNU_KERNEL_PRIVATE #include -#ifdef KERNEL_PRIVATE #include #endif #include /* XXX */ #include - + + #ifdef KERNEL +#ifdef BSD_KERNEL_PRIVATE +#include /* for uu_kwe entry */ +#endif /* BSD_KERNEL_PRIVATE */ #ifdef __APPLE_API_PRIVATE #include +#if !defined(__LP64__) || defined(XNU_KERNEL_PRIVATE) /* * VFS context structure (part of uthread) */ @@ -92,17 +97,20 @@ struct vfs_context { kauth_cred_t vc_ucred; /* per thread credential */ }; +#endif /* !__LP64 || XNU_KERNEL_PRIVATE */ + +#ifdef BSD_KERNEL_PRIVATE /* XXX Deprecated: xnu source compatability */ #define uu_ucred uu_context.vc_ucred -#ifdef BSD_KERNEL_PRIVATE +#define MAXTHREADNAMESIZE 64 /* * Per-thread U area. */ struct uthread { /* syscall parameters, results and catches */ - user_addr_t uu_arg[8]; /* arguments to current system call */ + u_int64_t uu_arg[8]; /* arguments to current system call */ int *uu_ap; /* pointer to arglist */ int uu_rval[2]; @@ -119,24 +127,24 @@ struct uthread { int poll; int error; int count; - int kfcount; + int _reserved1; // UNUSED: avoid changing size for now char * wql; } uu_select; /* saved state for select() */ /* to support kevent continuations */ union { - struct _kevent_scan { + struct _kqueue_scan { kevent_callback_t call; /* per-event callback */ - kevent_continue_t cont; /* whole call continuation */ + kqueue_continue_t cont; /* whole call continuation */ uint64_t deadline; /* computed deadline for operation */ void *data; /* caller's private data */ - } ss_kevent_scan; /* saved state for kevent_scan() */ + } ss_kqueue_scan; /* saved state for kevent_scan() */ struct _kevent { - struct _kevent_scan scan;/* space for the generic data */ + struct _kqueue_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 */ + int32_t *retval; /* place to store return val */ user_addr_t eventlist; /* user-level event list address */ - size_t eventsize; /* user-level event size (LP64) */ + size_t eventsize; /* kevent or kevent64_s */ int eventcount; /* user-level event count */ int eventout; /* number of events output */ } ss_kevent; /* saved state for kevent() */ @@ -151,7 +159,9 @@ struct uthread { caddr_t uu_wchan; /* sleeping thread wait channel */ const char *uu_wmesg; /* ... wait message */ int uu_flag; +#if CONFIG_EMBEDDED int uu_iopol_disk; /* disk I/O policy */ +#endif /* CONFIG_EMBEDDED */ struct proc * uu_proc; void * uu_userstate; wait_queue_set_t uu_wqset; /* cached across select calls */ @@ -165,16 +175,17 @@ struct uthread { TAILQ_ENTRY(uthread) uu_list; /* List of uthreads in proc */ - struct kaudit_record *uu_ar; /* audit record */ + struct kaudit_record *uu_ar; /* audit record */ struct task* uu_aio_task; /* target task for async io */ - - /* network support for dlil layer locking */ - u_int32_t dlil_incremented_read; + lck_mtx_t *uu_mtx; - int uu_lowpri_window; + int uu_lowpri_window; + boolean_t uu_throttle_isssd; + boolean_t uu_throttle_bc; + void * uu_throttle_info; /* pointer to throttled I/Os info */ - struct user_sigaltstack uu_sigstk; + struct kern_sigaltstack uu_sigstk; int uu_defer_reclaims; vnode_t uu_vreclaims; int uu_notrigger; /* XXX - flag for autofs */ @@ -185,11 +196,14 @@ struct uthread { int uu_iocount; int uu_vpindex; void * uu_vps[32]; + void * uu_pcs[32][10]; #endif #if CONFIG_DTRACE + siginfo_t t_dtrace_siginfo; uint32_t t_dtrace_errno; /* Most recent errno */ - uint8_t t_dtrace_stop; /* indicates a DTrace-desired stop */ + uint8_t t_dtrace_stop; /* indicates a DTrace desired stop */ uint8_t t_dtrace_sig; /* signal sent via DTrace's raise() */ + uint64_t t_dtrace_resumepid; /* DTrace's pidresume() pid */ union __tdu { struct __tds { @@ -201,7 +215,7 @@ struct uthread { uint8_t _t_dtrace_reg; /* modified register */ #endif } _tds; - unsigned long _t_dtrace_ft; /* bitwise or of these flags */ + u_int32_t _t_dtrace_ft; /* bitwise or of these flags */ } _tdu; #define t_dtrace_ft _tdu._t_dtrace_ft #define t_dtrace_on _tdu._tds._t_dtrace_on @@ -224,7 +238,8 @@ struct uthread { #endif #endif /* CONFIG_DTRACE */ void * uu_threadlist; - mount_t v_mount; + char * pth_name; + struct ksyn_waitq_element uu_kwe; /* user for pthread synch */ }; typedef struct uthread * uthread_t; @@ -241,7 +256,10 @@ typedef struct uthread * uthread_t; #define UT_PASSIVE_IO 0x00000100 /* this thread issues passive I/O */ #define UT_PROCEXIT 0x00000200 /* this thread completed the proc exit */ #define UT_RAGE_VNODES 0x00000400 /* rapid age any vnodes created by this thread */ +#if CONFIG_EMBEDDED #define UT_BACKGROUND 0x00000800 /* this thread is in background state */ +#endif /* !CONFIG_EMBEDDED */ +#define UT_BACKGROUND_TRAFFIC_MGT 0x00001000 /* background traffic is regulated */ #define UT_VFORK 0x02000000 /* thread has vfork children */ #define UT_SETUID 0x04000000 /* thread is settugid() */