From c5cf4e87b640e3703de557998d7f08de27696840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 3 Dec 2002 14:05:21 +0000 Subject: [PATCH] Removed the "path" field in the team structure. Renamed "ioctx" to "io_context". Added a "page_faults_allowed" field in the thread structure. Clean up. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2138 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/kernel/thread_types.h | 183 +++++++++++++------------------ 1 file changed, 74 insertions(+), 109 deletions(-) diff --git a/headers/os/kernel/thread_types.h b/headers/os/kernel/thread_types.h index 60f59bd93a..bfb3b7686c 100644 --- a/headers/os/kernel/thread_types.h +++ b/headers/os/kernel/thread_types.h @@ -1,21 +1,11 @@ +/* Thread definition and structures +** +** Distributed under the terms of the OpenBeOS License. +*/ + #ifndef _KERNEL_THREAD_TYPES_H #define _KERNEL_THREAD_TYPES_H -/** - * @file kernel/thread_types.h - * @brief Definitions, structures and functions for threads. - */ - -/** - * @defgroup Kernel_Threads Threads - * @ingroup OpenBeOS_Kernel - * @{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -25,6 +15,7 @@ extern "C" { #include #include + extern spinlock thread_spinlock; #define GRAB_THREAD_LOCK() acquire_spinlock(&thread_spinlock) #define RELEASE_THREAD_LOCK() release_spinlock(&thread_spinlock) @@ -37,16 +28,16 @@ extern spinlock team_spinlock; #define GRAB_TEAM_LOCK() acquire_spinlock(&team_spinlock) #define RELEASE_TEAM_LOCK() release_spinlock(&team_spinlock) -enum { +enum additional_thread_state { // THREAD_STATE_READY = 0, // ready to run // THREAD_STATE_RUNNING, // running right now somewhere // THREAD_STATE_WAITING, // blocked on something // THREAD_STATE_SUSPENDED, // suspended, not in queue - THREAD_STATE_FREE_ON_RESCHED=7, // free the thread structure upon reschedule + THREAD_STATE_FREE_ON_RESCHED = 7, // free the thread structure upon reschedule // THREAD_STATE_BIRTH // thread is being created }; -enum { +enum team_state { TEAM_STATE_NORMAL, // normal state TEAM_STATE_BIRTH, // being contructed TEAM_STATE_DEATH // being killed @@ -57,89 +48,78 @@ enum { #define THREAD_RETURN_INTERRUPTED 0x2 -/** - * The team structure; equivalent to a common process. - * @note This is available only within the kernel. - */ struct team { - /** Pointer to next team structure */ - struct team *next; - /** The team_id for this process. */ - team_id id; - /** name of the process - * @note The maximum length is current SYS_MAX_OS_NAME_LEN chars. - */ - char name[SYS_MAX_OS_NAME_LEN]; - /** How many threads does this process have? */ - int num_threads; - /** Current state of the process. */ - int state; - /** Signals pending for the process? */ - int pending_signals; - /** Pointer to the I/O context for this process. - * @note see fd.h for definition of ioctx - */ - void *ioctx; - /** Path ??? */ - char path[SYS_MAX_PATH_LEN]; - /** Semaphore to wait on for dying threads */ - sem_id death_sem; - /** Our address space pointer */ - aspace_id _aspace_id; + struct team *next; /* next team in the hash */ + team_id id; + char name[SYS_MAX_OS_NAME_LEN]; + int num_threads; /* number of threads in this team */ + int state; /* current team state, see above */ + int pending_signals; + void *io_context; + sem_id death_sem; /* semaphore to wait on for dying threads */ + aspace_id _aspace_id; /* address space pointer */ vm_address_space *aspace; vm_address_space *kaspace; - addr user_env_base; - struct thread *main_thread; - struct thread *thread_list; + addr user_env_base; + struct thread *main_thread; + struct thread *thread_list; struct arch_team arch_info; }; struct thread { - struct thread *all_next; - struct thread *team_next; - struct thread *q_next; - timer alarm; - thread_id id; - char name[SYS_MAX_OS_NAME_LEN]; - int priority; - int state; - int next_state; - union cpu_ent *cpu; - - sigset_t sig_pending; - sigset_t sig_block_mask; - struct sigaction sig_action[32]; - - bool in_kernel; - sem_id sem_blocking; - int sem_count; - int sem_acquire_count; - int sem_deleted_retcode; - int sem_errcode; - int sem_flags; - struct { - sem_id write_sem; - sem_id read_sem; - thread_id sender; - int32 code; - size_t size; - cbuf *buffer; - } msg; - addr fault_handler; - addr entry; - void *args; - struct team *team; - status_t return_code; - sem_id return_code_sem; - int return_flags; - region_id kernel_stack_region_id; - addr kernel_stack_base; - region_id user_stack_region_id; - addr user_stack_base; + struct thread *all_next; + struct thread *team_next; + struct thread *q_next; + timer alarm; + thread_id id; + char name[SYS_MAX_OS_NAME_LEN]; + int priority; + int state; + int next_state; + union cpu_ent *cpu; - bigtime_t user_time; - bigtime_t kernel_time; - bigtime_t last_time; + sigset_t sig_pending; + sigset_t sig_block_mask; + struct sigaction sig_action[32]; + + bool in_kernel; + + sem_id sem_blocking; + int sem_count; + int sem_acquire_count; + int sem_deleted_retcode; + int sem_errcode; + int sem_flags; + + struct { + sem_id write_sem; + sem_id read_sem; + thread_id sender; + int32 code; + size_t size; + cbuf *buffer; + } msg; + + addr fault_handler; + int32 page_faults_allowed; + /* this field may only stay in debug builds in the future*/ + + addr entry; + void *args; + struct team *team; + status_t return_code; + sem_id return_code_sem; + int return_flags; + + // stack + region_id kernel_stack_region_id; + addr kernel_stack_base; + region_id user_stack_region_id; + addr user_stack_base; + + bigtime_t user_time; + bigtime_t kernel_time; + bigtime_t last_time; // architecture dependant section struct arch_thread arch_info; @@ -150,19 +130,4 @@ struct thread_queue { struct thread *tail; }; -#if 1 -/** - * Test routine for threads. - * @note This function will be removed as is intended for test and - * development purposes only. - */ -int thread_test(void); -#endif - -#ifdef __cplusplus -} -#endif -/** @} */ - -#endif /* _KERNEL_THREAD_TYPES_H */ - +#endif /* _KERNEL_THREAD_TYPES_H */