Changeset 4c60255 in mainline for kernel/generic/include/proc/thread.h


Ignore:
Timestamp:
2007-01-29T17:59:25Z (18 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c27c988
Parents:
3802fcd
Message:

move thread_t to thread.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/proc/thread.h

    r3802fcd r4c60255  
    4747
    4848#define THREAD_STACK_SIZE       STACK_SIZE
     49#define THREAD_NAME_BUFLEN      20
    4950
    5051extern char *thread_states[];
     
    5455#define THREAD_FLAG_STOLEN      (1 << 1)        /**< Thread was migrated to another CPU and has not run yet. */
    5556#define THREAD_FLAG_USPACE      (1 << 2)        /**< Thread executes in userspace. */
     57
     58/** Thread structure. There is one per thread. */
     59typedef struct thread {
     60        link_t rq_link;                         /**< Run queue link. */
     61        link_t wq_link;                         /**< Wait queue link. */
     62        link_t th_link;                         /**< Links to threads within containing task. */
     63       
     64        /** Lock protecting thread structure.
     65         *
     66         * Protects the whole thread structure except list links above.
     67         */
     68        SPINLOCK_DECLARE(lock);
     69
     70        char name[THREAD_NAME_BUFLEN];
     71
     72        void (* thread_code)(void *);           /**< Function implementing the thread. */
     73        void *thread_arg;                       /**< Argument passed to thread_code() function. */
     74
     75        /** From here, the stored context is restored when the thread is scheduled. */
     76        context_t saved_context;
     77        /** From here, the stored timeout context is restored when sleep times out. */
     78        context_t sleep_timeout_context;
     79        /** From here, the stored interruption context is restored when sleep is interrupted. */
     80        context_t sleep_interruption_context;
     81
     82        bool sleep_interruptible;               /**< If true, the thread can be interrupted from sleep. */
     83        waitq_t *sleep_queue;                   /**< Wait queue in which this thread sleeps. */
     84        timeout_t sleep_timeout;                /**< Timeout used for timeoutable sleeping.  */
     85        volatile int timeout_pending;           /**< Flag signalling sleep timeout in progress. */
     86
     87        /** True if this thread is executing copy_from_uspace(). False otherwise. */
     88        bool in_copy_from_uspace;
     89        /** True if this thread is executing copy_to_uspace(). False otherwise. */
     90        bool in_copy_to_uspace;
     91       
     92        /**
     93         * If true, the thread will not go to sleep at all and will
     94         * call thread_exit() before returning to userspace.
     95         */
     96        bool interrupted;                       
     97       
     98        thread_join_type_t      join_type;      /**< Who joinins the thread. */
     99        bool detached;                          /**< If true, thread_join_timeout() cannot be used on this thread. */
     100        waitq_t join_wq;                        /**< Waitq for thread_join_timeout(). */
     101
     102        fpu_context_t *saved_fpu_context;
     103        int fpu_context_exists;
     104
     105        /*
     106         * Defined only if thread doesn't run.
     107         * It means that fpu context is in CPU that last time executes this thread.
     108         * This disables migration.
     109         */
     110        int fpu_context_engaged;
     111
     112        rwlock_type_t rwlock_holder_type;
     113
     114        void (* call_me)(void *);               /**< Funtion to be called in scheduler before the thread is put asleep. */
     115        void *call_me_with;                     /**< Argument passed to call_me(). */
     116
     117        state_t state;                          /**< Thread's state. */
     118        int flags;                              /**< Thread's flags. */
     119       
     120        cpu_t *cpu;                             /**< Thread's CPU. */
     121        task_t *task;                           /**< Containing task. */
     122
     123        uint64_t ticks;                         /**< Ticks before preemption. */
     124       
     125        uint64_t cycles;                        /**< Thread accounting. */
     126        uint64_t last_cycle;            /**< Last sampled cycle. */
     127        bool uncounted;                         /**< Thread doesn't affect accumulated accounting. */
     128
     129        int priority;                           /**< Thread's priority. Implemented as index to CPU->rq */
     130        uint32_t tid;                           /**< Thread ID. */
     131       
     132        thread_arch_t arch;                     /**< Architecture-specific data. */
     133
     134        uint8_t *kstack;                        /**< Thread's kernel stack. */
     135} thread_t;
    56136
    57137/** Thread list lock.
Note: See TracChangeset for help on using the changeset viewer.