diff --git a/sys/sys/lwp.h b/sys/sys/lwp.h index 37903d7c7599..61807fc9b0da 100644 --- a/sys/sys/lwp.h +++ b/sys/sys/lwp.h @@ -1,4 +1,4 @@ -/* $NetBSD: lwp.h,v 1.140 2011/01/14 02:06:34 rmind Exp $ */ +/* $NetBSD: lwp.h,v 1.141 2011/01/18 20:17:50 rmind Exp $ */ /*- * Copyright (c) 2001, 2006, 2007, 2008, 2009, 2010 @@ -62,7 +62,6 @@ * S: l_selcluster->sc_lock * (: unlocked, stable * !: unlocked, may only be reliably accessed by the LWP itself - * ?: undecided * * Fields are clustered together by usage (to increase the likelyhood * of cache hits) and by size (to reduce dead space in the structure). @@ -72,7 +71,7 @@ struct sadata_vp; struct sysent; struct lwp { - /* Scheduling and overall state */ + /* Scheduling and overall state. */ TAILQ_ENTRY(lwp) l_runq; /* s: run queue */ union { void * info; /* s: scheduler-specific structure */ @@ -112,7 +111,7 @@ struct lwp { kcpuset_t *l_affinity; /* l: CPU set for affinity */ struct sadata_vp *l_savp; /* p: SA "virtual processor" */ - /* Synchronisation */ + /* Synchronisation. */ struct turnstile *l_ts; /* l: current turnstile */ struct syncobj *l_syncobj; /* l: sync object operations set */ TAILQ_ENTRY(lwp) l_sleepchain; /* l: sleep queue */ @@ -136,16 +135,16 @@ struct lwp { lwpid_t l_lid; /* (: LWP identifier; local to proc */ char *l_name; /* (: name, optional */ - /* State of select() or poll() */ + /* State of select() or poll(). */ int l_selflag; /* S: polling state flags */ SLIST_HEAD(,selinfo) l_selwait; /* S: descriptors waited on */ int l_selret; /* S: return value of select/poll */ - uintptr_t l_selrec; /* (: argument for selrecord() */ - struct selcluster *l_selcluster;/* (: associated cluster data */ + uintptr_t l_selrec; /* !: argument for selrecord() */ + struct selcluster *l_selcluster;/* !: associated cluster data */ void * l_selbits; /* (: select() bit-field */ size_t l_selni; /* (: size of a single bit-field */ - /* Signals */ + /* Signals. */ int l_sigrestore; /* p: need to restore old sig mask */ sigset_t l_sigwaitset; /* p: signals being waited for */ kcondvar_t l_sigcv; /* p: for sigsuspend() */ @@ -157,7 +156,7 @@ struct lwp { sigpend_t l_sigpend; /* p: signals to this LWP */ sigset_t l_sigoldmask; /* p: mask for sigpause */ - /* Private data */ + /* Private data. */ specificdata_reference l_specdataref; /* !: subsystem lwp-specific data */ struct timespec l_ktrcsw; /* !: for ktrace CSW trace XXX */ @@ -184,11 +183,11 @@ struct lwp { int l_tcgen; /* !: for timecounter removal */ int l_unused2; /* !: for future use */ - /* These are only used by 'options SYSCALL_TIMES' */ - uint32_t l_syscall_time; /* !: time epoch for current syscall */ - uint64_t *l_syscall_counter; /* !: counter for current process */ + /* These are only used by 'options SYSCALL_TIMES'. */ + uint32_t l_syscall_time; /* !: time epoch for current syscall */ + uint64_t *l_syscall_counter; /* !: counter for current process */ - struct kdtrace_thread *l_dtrace; /* ?: DTrace-specific data. */ + struct kdtrace_thread *l_dtrace; /* (: DTrace-specific data. */ }; /* @@ -206,11 +205,11 @@ lwp_getpcb(struct lwp *l) return l->l_addr; } -LIST_HEAD(lwplist, lwp); /* a list of LWPs */ +LIST_HEAD(lwplist, lwp); /* A list of LWPs. */ #ifdef _KERNEL -extern struct lwplist alllwp; /* List of all LWPs. */ -extern lwp_t lwp0; /* LWP for proc0 */ +extern struct lwplist alllwp; /* List of all LWPs. */ +extern lwp_t lwp0; /* LWP for proc0. */ #endif /* These flags are kept in l_flag. */ @@ -286,12 +285,18 @@ do { \ lwp_update_creds(l); \ } while (/* CONSTCOND */ 0) +void lwpinit(void); +void lwp0_init(void); +void lwp_sys_init(void); + void lwp_startup(lwp_t *, lwp_t *); +void startlwp(void *); +void cpu_setfunc(lwp_t *, void (*)(void *), void *); +void upcallret(lwp_t *); int lwp_locked(lwp_t *, kmutex_t *); void lwp_setlock(lwp_t *, kmutex_t *); void lwp_unlock_to(lwp_t *, kmutex_t *); -void lwp_relock(lwp_t *, kmutex_t *); int lwp_trylock(lwp_t *); void lwp_addref(lwp_t *); void lwp_delref(lwp_t *); @@ -302,48 +307,41 @@ lwp_t *lwp_find_first(proc_t *); /* Flags for _lwp_wait1 */ #define LWPWAIT_EXITCONTROL 0x00000001 -void lwpinit(void); -void lwp0_init(void); -int lwp_wait1(lwp_t *, lwpid_t, lwpid_t *, int); +int lwp_wait1(lwp_t *, lwpid_t, lwpid_t *, int); void lwp_continue(lwp_t *); +void lwp_unsleep(lwp_t *, bool); void lwp_unstop(lwp_t *); -void cpu_setfunc(lwp_t *, void (*)(void *), void *); -void startlwp(void *); -void upcallret(lwp_t *); void lwp_exit(lwp_t *); void lwp_exit_switchaway(lwp_t *) __dead; int lwp_suspend(lwp_t *, lwp_t *); int lwp_create1(lwp_t *, const void *, size_t, u_long, lwpid_t *); void lwp_update_creds(lwp_t *); void lwp_migrate(lwp_t *, struct cpu_info *); -lwp_t *lwp_find2(pid_t, lwpid_t); -lwp_t *lwp_find(proc_t *, int); +lwp_t * lwp_find2(pid_t, lwpid_t); +lwp_t * lwp_find(proc_t *, int); void lwp_userret(lwp_t *); void lwp_need_userret(lwp_t *); void lwp_free(lwp_t *, bool, bool); -void lwp_sys_init(void); -void lwp_unsleep(lwp_t *, bool); uint64_t lwp_pctr(void); int lwp_setprivate(lwp_t *, void *); void lwpinit_specificdata(void); int lwp_specific_key_create(specificdata_key_t *, specificdata_dtor_t); void lwp_specific_key_delete(specificdata_key_t); -void lwp_initspecific(lwp_t *); -void lwp_finispecific(lwp_t *); +void lwp_initspecific(lwp_t *); +void lwp_finispecific(lwp_t *); void *lwp_getspecific(specificdata_key_t); #if defined(_LWP_API_PRIVATE) void *_lwp_getspecific_by_lwp(lwp_t *, specificdata_key_t); #endif void lwp_setspecific(specificdata_key_t, void *); -/* Syscalls */ +/* Syscalls. */ int lwp_park(struct timespec *, const void *); int lwp_unpark(lwpid_t, const void *); -/* ddb */ -void lwp_whatis(uintptr_t, void (*)(const char *, ...)); - +/* DDB. */ +void lwp_whatis(uintptr_t, void (*)(const char *, ...)); /* * Lock an LWP. XXX _MODULE @@ -497,8 +495,8 @@ KPREEMPT_ENABLE(lwp_t *l) #endif /* _KERNEL */ /* Flags for _lwp_create(), as per Solaris. */ -#define LWP_DETACHED 0x00000040 -#define LWP_SUSPENDED 0x00000080 +#define LWP_DETACHED 0x00000040 +#define LWP_SUSPENDED 0x00000080 /* Kernel-internal flags for LWP creation. */ #define LWP_PIDLID 0x40000000