Changeset 80bcaed in mainline for kernel/generic/include/proc/thread.h


Ignore:
Timestamp:
2007-02-03T13:22:24Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f619ec11
Parents:
fa8e7d2
Message:

Merge as_t structure into one and leave the differring parts in as_genarch_t.

Indentation and formatting changes in header files.

File:
1 edited

Legend:

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

    rfa8e7d2 r80bcaed  
    5353
    5454/* Thread flags */
    55 #define THREAD_FLAG_WIRED       (1 << 0)        /**< Thread cannot be migrated to another CPU. */
    56 #define THREAD_FLAG_STOLEN      (1 << 1)        /**< Thread was migrated to another CPU and has not run yet. */
    57 #define THREAD_FLAG_USPACE      (1 << 2)        /**< Thread executes in userspace. */
     55
     56/** Thread cannot be migrated to another CPU. */
     57#define THREAD_FLAG_WIRED       (1 << 0)
     58/** Thread was migrated to another CPU and has not run yet. */
     59#define THREAD_FLAG_STOLEN      (1 << 1)
     60/** Thread executes in userspace. */
     61#define THREAD_FLAG_USPACE      (1 << 2)
    5862
    5963/** Thread states. */
    6064typedef enum {
    61         Invalid,        /**< It is an error, if thread is found in this state. */
    62         Running,        /**< State of a thread that is currently executing on some CPU. */
    63         Sleeping,       /**< Thread in this state is waiting for an event. */
    64         Ready,          /**< State of threads in a run queue. */
    65         Entering,       /**< Threads are in this state before they are first readied. */
    66         Exiting,        /**< After a thread calls thread_exit(), it is put into Exiting state. */
    67         Undead          /**< Threads that were not detached but exited are in the Undead state. */
     65        /** It is an error, if thread is found in this state. */
     66        Invalid,
     67        /** State of a thread that is currently executing on some CPU. */
     68        Running,
     69        /** Thread in this state is waiting for an event. */
     70        Sleeping,
     71        /** State of threads in a run queue. */
     72        Ready,
     73        /** Threads are in this state before they are first readied. */
     74        Entering,
     75        /** After a thread calls thread_exit(), it is put into Exiting state. */
     76        Exiting,
     77        /** Threads that were not detached but exited are in the Undead state. */
     78        Undead
    6879} state_t;
    6980
     
    7788/** Thread structure. There is one per thread. */
    7889typedef struct thread {
    79         link_t rq_link;                         /**< Run queue link. */
    80         link_t wq_link;                         /**< Wait queue link. */
    81         link_t th_link;                         /**< Links to threads within containing task. */
     90        link_t rq_link;         /**< Run queue link. */
     91        link_t wq_link;         /**< Wait queue link. */
     92        link_t th_link;         /**< Links to threads within containing task. */
    8293       
    8394        /** Lock protecting thread structure.
     
    89100        char name[THREAD_NAME_BUFLEN];
    90101
    91         void (* thread_code)(void *);           /**< Function implementing the thread. */
    92         void *thread_arg;                       /**< Argument passed to thread_code() function. */
    93 
    94         /** From here, the stored context is restored when the thread is scheduled. */
     102        /** Function implementing the thread. */
     103        void (* thread_code)(void *);
     104        /** Argument passed to thread_code() function. */
     105        void *thread_arg;
     106
     107        /**
     108         * From here, the stored context is restored when the thread is
     109         * scheduled.
     110         */
    95111        context_t saved_context;
    96         /** From here, the stored timeout context is restored when sleep times out. */
     112        /**
     113         * From here, the stored timeout context is restored when sleep times
     114         * out.
     115         */
    97116        context_t sleep_timeout_context;
    98         /** From here, the stored interruption context is restored when sleep is interrupted. */
     117        /**
     118         * From here, the stored interruption context is restored when sleep is
     119         * interrupted.
     120         */
    99121        context_t sleep_interruption_context;
    100122
    101         bool sleep_interruptible;               /**< If true, the thread can be interrupted from sleep. */
    102         waitq_t *sleep_queue;                   /**< Wait queue in which this thread sleeps. */
    103         timeout_t sleep_timeout;                /**< Timeout used for timeoutable sleeping.  */
    104         volatile int timeout_pending;           /**< Flag signalling sleep timeout in progress. */
    105 
    106         /** True if this thread is executing copy_from_uspace(). False otherwise. */
     123        /** If true, the thread can be interrupted from sleep. */
     124        bool sleep_interruptible;
     125        /** Wait queue in which this thread sleeps. */
     126        waitq_t *sleep_queue;
     127        /** Timeout used for timeoutable sleeping.  */
     128        timeout_t sleep_timeout;
     129        /** Flag signalling sleep timeout in progress. */
     130        volatile int timeout_pending;
     131
     132        /**
     133         * True if this thread is executing copy_from_uspace().
     134         * False otherwise.
     135         */
    107136        bool in_copy_from_uspace;
    108         /** True if this thread is executing copy_to_uspace(). False otherwise. */
     137        /**
     138         * True if this thread is executing copy_to_uspace().
     139         * False otherwise.
     140         */
    109141        bool in_copy_to_uspace;
    110142       
    111143        /**
    112          * If true, the thread will not go to sleep at all and will
    113          * call thread_exit() before returning to userspace.
     144         * If true, the thread will not go to sleep at all and will call
     145         * thread_exit() before returning to userspace.
    114146         */
    115147        bool interrupted;                       
    116148       
    117         thread_join_type_t      join_type;      /**< Who joinins the thread. */
    118         bool detached;                          /**< If true, thread_join_timeout() cannot be used on this thread. */
    119         waitq_t join_wq;                        /**< Waitq for thread_join_timeout(). */
     149        /** Who joinins the thread. */
     150        thread_join_type_t join_type;
     151        /** If true, thread_join_timeout() cannot be used on this thread. */
     152        bool detached;
     153        /** Waitq for thread_join_timeout(). */
     154        waitq_t join_wq;
    120155
    121156        fpu_context_t *saved_fpu_context;
     
    124159        /*
    125160         * Defined only if thread doesn't run.
    126          * It means that fpu context is in CPU that last time executes this thread.
    127          * This disables migration.
     161         * It means that fpu context is in CPU that last time executes this
     162         * thread. This disables migration.
    128163         */
    129164        int fpu_context_engaged;
     
    131166        rwlock_type_t rwlock_holder_type;
    132167
    133         void (* call_me)(void *);               /**< Funtion to be called in scheduler before the thread is put asleep. */
    134         void *call_me_with;                     /**< Argument passed to call_me(). */
    135 
    136         state_t state;                          /**< Thread's state. */
    137         int flags;                              /**< Thread's flags. */
    138        
    139         cpu_t *cpu;                             /**< Thread's CPU. */
    140         task_t *task;                           /**< Containing task. */
    141 
    142         uint64_t ticks;                         /**< Ticks before preemption. */
    143        
    144         uint64_t cycles;                        /**< Thread accounting. */
    145         uint64_t last_cycle;            /**< Last sampled cycle. */
    146         bool uncounted;                         /**< Thread doesn't affect accumulated accounting. */
    147 
    148         int priority;                           /**< Thread's priority. Implemented as index to CPU->rq */
    149         uint32_t tid;                           /**< Thread ID. */
    150        
    151         thread_arch_t arch;                     /**< Architecture-specific data. */
    152 
    153         uint8_t *kstack;                        /**< Thread's kernel stack. */
     168        /** Callback fired in scheduler before the thread is put asleep. */
     169        void (* call_me)(void *);
     170        /** Argument passed to call_me(). */
     171        void *call_me_with;
     172
     173        /** Thread's state. */
     174        state_t state;
     175        /** Thread's flags. */
     176        int flags;
     177       
     178        /** Thread's CPU. */
     179        cpu_t *cpu;
     180        /** Containing task. */
     181        task_t *task;
     182
     183        /** Ticks before preemption. */
     184        uint64_t ticks;
     185       
     186        /** Thread accounting. */
     187        uint64_t cycles;
     188        /** Last sampled cycle. */
     189        uint64_t last_cycle;
     190        /** Thread doesn't affect accumulated accounting. */   
     191        bool uncounted;
     192
     193        /** Thread's priority. Implemented as index to CPU->rq */
     194        int priority;
     195        /** Thread ID. */
     196        uint32_t tid;
     197       
     198        /** Architecture-specific data. */
     199        thread_arch_t arch;
     200
     201        /** Thread's kernel stack. */
     202        uint8_t *kstack;
    154203} thread_t;
    155204
     
    162211SPINLOCK_EXTERN(threads_lock);
    163212
    164 extern btree_t threads_btree;                   /**< B+tree containing all threads. */
     213/** B+tree containing all threads. */
     214extern btree_t threads_btree;
    165215
    166216extern void thread_init(void);
    167 extern thread_t *thread_create(void (* func)(void *), void *arg, task_t *task, int flags, char *name, bool uncounted);
     217extern thread_t *thread_create(void (* func)(void *), void *arg, task_t *task,
     218    int flags, char *name, bool uncounted);
    168219extern void thread_ready(thread_t *t);
    169220extern void thread_exit(void) __attribute__((noreturn));
     
    182233extern void thread_usleep(uint32_t usec);
    183234
    184 #define thread_join(t)  thread_join_timeout((t), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE)
     235#define thread_join(t) \
     236        thread_join_timeout((t), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE)
    185237extern int thread_join_timeout(thread_t *t, uint32_t usec, int flags);
    186238extern void thread_detach(thread_t *t);
    187239
    188 extern void thread_register_call_me(void (* call_me)(void *), void *call_me_with);
     240extern void thread_register_call_me(void (* call_me)(void *),
     241    void *call_me_with);
    189242extern void thread_print_list(void);
    190243extern void thread_destroy(thread_t *t);
     
    193246extern void thread_interrupt_sleep(thread_t *t);
    194247
    195 /* Fpu context slab cache */
     248/** Fpu context slab cache. */
    196249extern slab_cache_t *fpu_context_slab;
    197250
    198 /** Thread syscall prototypes. */
     251/* Thread syscall prototypes. */
    199252unative_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name);
    200253unative_t sys_thread_exit(int uspace_status);
Note: See TracChangeset for help on using the changeset viewer.