Changeset 4c60255 in mainline


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

Location:
kernel/generic/include
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/arch.h

    r3802fcd r4c60255  
    3737
    3838#include <arch/arch.h>
     39#include <proc/thread.h>
    3940#include <proc/task.h>
    4041
  • kernel/generic/include/proc/task.h

    r3802fcd r4c60255  
    5353
    5454#define IPC_MAX_PHONES  16
    55 #define THREAD_NAME_BUFLEN      20
    5655
    5756struct answerbox;
     
    168167} thread_join_type_t;
    169168
    170 /** Thread structure. There is one per thread. */
    171 typedef struct thread {
    172         link_t rq_link;                         /**< Run queue link. */
    173         link_t wq_link;                         /**< Wait queue link. */
    174         link_t th_link;                         /**< Links to threads within containing task. */
    175        
    176         /** Lock protecting thread structure.
    177          *
    178          * Protects the whole thread structure except list links above.
    179          */
    180         SPINLOCK_DECLARE(lock);
    181 
    182         char name[THREAD_NAME_BUFLEN];
    183 
    184         void (* thread_code)(void *);           /**< Function implementing the thread. */
    185         void *thread_arg;                       /**< Argument passed to thread_code() function. */
    186 
    187         /** From here, the stored context is restored when the thread is scheduled. */
    188         context_t saved_context;
    189         /** From here, the stored timeout context is restored when sleep times out. */
    190         context_t sleep_timeout_context;
    191         /** From here, the stored interruption context is restored when sleep is interrupted. */
    192         context_t sleep_interruption_context;
    193 
    194         bool sleep_interruptible;               /**< If true, the thread can be interrupted from sleep. */
    195         waitq_t *sleep_queue;                   /**< Wait queue in which this thread sleeps. */
    196         timeout_t sleep_timeout;                /**< Timeout used for timeoutable sleeping.  */
    197         volatile int timeout_pending;           /**< Flag signalling sleep timeout in progress. */
    198 
    199         /** True if this thread is executing copy_from_uspace(). False otherwise. */
    200         bool in_copy_from_uspace;
    201         /** True if this thread is executing copy_to_uspace(). False otherwise. */
    202         bool in_copy_to_uspace;
    203        
    204         /**
    205          * If true, the thread will not go to sleep at all and will
    206          * call thread_exit() before returning to userspace.
    207          */
    208         bool interrupted;                       
    209        
    210         thread_join_type_t      join_type;      /**< Who joinins the thread. */
    211         bool detached;                          /**< If true, thread_join_timeout() cannot be used on this thread. */
    212         waitq_t join_wq;                        /**< Waitq for thread_join_timeout(). */
    213 
    214         fpu_context_t *saved_fpu_context;
    215         int fpu_context_exists;
    216 
    217         /*
    218          * Defined only if thread doesn't run.
    219          * It means that fpu context is in CPU that last time executes this thread.
    220          * This disables migration.
    221          */
    222         int fpu_context_engaged;
    223 
    224         rwlock_type_t rwlock_holder_type;
    225 
    226         void (* call_me)(void *);               /**< Funtion to be called in scheduler before the thread is put asleep. */
    227         void *call_me_with;                     /**< Argument passed to call_me(). */
    228 
    229         state_t state;                          /**< Thread's state. */
    230         int flags;                              /**< Thread's flags. */
    231        
    232         cpu_t *cpu;                             /**< Thread's CPU. */
    233         task_t *task;                           /**< Containing task. */
    234 
    235         uint64_t ticks;                         /**< Ticks before preemption. */
    236        
    237         uint64_t cycles;                        /**< Thread accounting. */
    238         uint64_t last_cycle;            /**< Last sampled cycle. */
    239         bool uncounted;                         /**< Thread doesn't affect accumulated accounting. */
    240 
    241         int priority;                           /**< Thread's priority. Implemented as index to CPU->rq */
    242         uint32_t tid;                           /**< Thread ID. */
    243        
    244         thread_arch_t arch;                     /**< Architecture-specific data. */
    245 
    246         uint8_t *kstack;                        /**< Thread's kernel stack. */
    247 } thread_t;
    248 
    249169SPINLOCK_EXTERN(tasks_lock);
    250170extern btree_t tasks_btree;
  • 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.