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


Ignore:
Timestamp:
2007-01-28T13:25:49Z (18 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8e8c1a5
Parents:
1ba41c5
Message:

huge type system cleanup
remove cyclical type dependencies across multiple header files
many minor coding style fixes

File:
1 edited

Legend:

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

    r1ba41c5 rb3f8fb7  
    3636#define KERN_THREAD_H_
    3737
    38 #include <arch/proc/thread.h>
    39 #include <synch/spinlock.h>
    40 #include <arch/context.h>
    41 #include <fpu_context.h>
    42 #include <arch/types.h>
    43 #include <typedefs.h>
    44 #include <time/timeout.h>
     38#include <synch/waitq.h>
     39#include <proc/task.h>
     40#include <cpu.h>
    4541#include <synch/rwlock.h>
    46 #include <synch/synch.h>
    47 #include <config.h>
    4842#include <adt/btree.h>
    49 #include <adt/list.h>
    5043#include <mm/slab.h>
     44#include <arch/cpu.h>
     45#include <mm/tlb.h>
    5146#include <proc/uarg.h>
    5247
    5348#define THREAD_STACK_SIZE       STACK_SIZE
    5449
    55 /** Thread states. */
    56 typedef enum {
    57         Invalid,        /**< It is an error, if thread is found in this state. */
    58         Running,        /**< State of a thread that is currently executing on some CPU. */
    59         Sleeping,       /**< Thread in this state is waiting for an event. */
    60         Ready,          /**< State of threads in a run queue. */
    61         Entering,       /**< Threads are in this state before they are first readied. */
    62         Exiting,        /**< After a thread calls thread_exit(), it is put into Exiting state. */
    63         Undead          /**< Threads that were not detached but exited are in the Undead state. */
    64 } state_t;
    65 
    6650extern char *thread_states[];
    6751
    68 /** Join types. */
    69 typedef enum {
    70         None,
    71         TaskClnp,       /**< The thread will be joined by ktaskclnp thread. */
    72         TaskGC          /**< The thread will be joined by ktaskgc thread. */
    73 } thread_join_type_t;
    74 
    7552/* Thread flags */
    76 #define THREAD_FLAG_WIRED       (1<<0)  /**< Thread cannot be migrated to another CPU. */
    77 #define THREAD_FLAG_STOLEN      (1<<1)  /**< Thread was migrated to another CPU and has not run yet. */
    78 #define THREAD_FLAG_USPACE      (1<<2)  /**< Thread executes in userspace. */
    79 
    80 #define THREAD_NAME_BUFLEN      20
    81 
    82 /** Thread structure. There is one per thread. */
    83 struct thread {
    84         link_t rq_link;                         /**< Run queue link. */
    85         link_t wq_link;                         /**< Wait queue link. */
    86         link_t th_link;                         /**< Links to threads within containing task. */
    87        
    88         /** Lock protecting thread structure.
    89          *
    90          * Protects the whole thread structure except list links above.
    91          */
    92         SPINLOCK_DECLARE(lock);
    93 
    94         char name[THREAD_NAME_BUFLEN];
    95 
    96         void (* thread_code)(void *);           /**< Function implementing the thread. */
    97         void *thread_arg;                       /**< Argument passed to thread_code() function. */
    98 
    99         /** From here, the stored context is restored when the thread is scheduled. */
    100         context_t saved_context;
    101         /** From here, the stored timeout context is restored when sleep times out. */
    102         context_t sleep_timeout_context;
    103         /** From here, the stored interruption context is restored when sleep is interrupted. */
    104         context_t sleep_interruption_context;
    105 
    106         bool sleep_interruptible;               /**< If true, the thread can be interrupted from sleep. */
    107         waitq_t *sleep_queue;                   /**< Wait queue in which this thread sleeps. */
    108         timeout_t sleep_timeout;                /**< Timeout used for timeoutable sleeping.  */
    109         volatile int timeout_pending;           /**< Flag signalling sleep timeout in progress. */
    110 
    111         /** True if this thread is executing copy_from_uspace(). False otherwise. */
    112         bool in_copy_from_uspace;
    113         /** True if this thread is executing copy_to_uspace(). False otherwise. */
    114         bool in_copy_to_uspace;
    115        
    116         /**
    117          * If true, the thread will not go to sleep at all and will
    118          * call thread_exit() before returning to userspace.
    119          */
    120         bool interrupted;                       
    121        
    122         thread_join_type_t      join_type;      /**< Who joinins the thread. */
    123         bool detached;                          /**< If true, thread_join_timeout() cannot be used on this thread. */
    124         waitq_t join_wq;                        /**< Waitq for thread_join_timeout(). */
    125 
    126         fpu_context_t *saved_fpu_context;
    127         int fpu_context_exists;
    128 
    129         /*
    130          * Defined only if thread doesn't run.
    131          * It means that fpu context is in CPU that last time executes this thread.
    132          * This disables migration.
    133          */
    134         int fpu_context_engaged;
    135 
    136         rwlock_type_t rwlock_holder_type;
    137 
    138         void (* call_me)(void *);               /**< Funtion to be called in scheduler before the thread is put asleep. */
    139         void *call_me_with;                     /**< Argument passed to call_me(). */
    140 
    141         state_t state;                          /**< Thread's state. */
    142         int flags;                              /**< Thread's flags. */
    143        
    144         cpu_t *cpu;                             /**< Thread's CPU. */
    145         task_t *task;                           /**< Containing task. */
    146 
    147         uint64_t ticks;                         /**< Ticks before preemption. */
    148        
    149         uint64_t cycles;                        /**< Thread accounting. */
    150         uint64_t last_cycle;            /**< Last sampled cycle. */
    151         bool uncounted;                         /**< Thread doesn't affect accumulated accounting. */
    152 
    153         int priority;                           /**< Thread's priority. Implemented as index to CPU->rq */
    154         uint32_t tid;                           /**< Thread ID. */
    155        
    156         thread_arch_t arch;                     /**< Architecture-specific data. */
    157 
    158         uint8_t *kstack;                        /**< Thread's kernel stack. */
    159 };
     53#define THREAD_FLAG_WIRED       (1 << 0)        /**< Thread cannot be migrated to another CPU. */
     54#define THREAD_FLAG_STOLEN      (1 << 1)        /**< Thread was migrated to another CPU and has not run yet. */
     55#define THREAD_FLAG_USPACE      (1 << 2)        /**< Thread executes in userspace. */
    16056
    16157/** Thread list lock.
     
    19692extern void thread_update_accounting(void);
    19793extern bool thread_exists(thread_t *t);
     94extern void thread_interrupt_sleep(thread_t *t);
    19895
    19996/* Fpu context slab cache */
Note: See TracChangeset for help on using the changeset viewer.