RTEMS
|
Thread Handler. More...
Files | |
file | thread.h |
Constants and Structures Related with the Thread Control Block. | |
file | threaddispatch.h |
Constants and Structures Related with Thread Dispatch. | |
file | threadidledata.h |
Constants for the idle threads. | |
file | threadimpl.h |
Inlined Routines from the Thread Handler. | |
file | thread.c |
Initialize Thread Handler. | |
file | threadchangepriority.c |
Changes the Priority of a Thread. | |
file | threadclearstate.c |
Clear Thread state. | |
file | threadcreateidle.c |
Create Idle Thread. | |
file | threaddispatch.c |
Dispatch Thread. | |
file | threadget.c |
Maps Thread IDs to TCB Pointer. | |
file | threadhandler.c |
Thread Handler. | |
file | threadinitialize.c |
Initialize Thread. | |
file | threadloadenv.c |
Initializes Enviroment for A Thread. | |
file | threadrestart.c |
Restart Thread. | |
file | threadsetstate.c |
Sets States for a Thread. | |
file | threadstart.c |
Initializes Thread and Executes it. | |
file | threadstartmultitasking.c |
Start Thread Multitasking. | |
file | threadtimeout.c |
Thread Wait Timeout. | |
file | threadyield.c |
Thread Yield. | |
Classes | |
struct | Thread_Entry_idle |
Data for idle thread entry. More... | |
struct | Thread_Entry_numeric |
Data for thread entry with one numeric argument and no return value. More... | |
struct | Thread_Entry_pointer |
Data for thread entry with one pointer argument and a pointer return value. More... | |
struct | Thread_Entry_information |
Thread entry information. More... | |
struct | Thread_Start_information |
struct | Thread_Scheduler_control |
Thread scheduler control. More... | |
union | Thread_Wait_information_Object_argument_type |
Union type to hold a pointer to an immutable or a mutable object. More... | |
struct | Thread_Wait_information |
Information required to manage a thread while it is blocked. More... | |
struct | Thread_Timer_information |
Information required to manage a thread timer. More... | |
struct | Thread_Proxy_control |
struct | Thread_Action |
Thread action. More... | |
struct | Thread_Keys_information |
Per-thread information for POSIX Keys. More... | |
struct | Thread_Action_control |
Control block to manage thread actions. More... | |
struct | Thread_Life_control |
Thread life control. More... | |
struct | Thread_Capture_control |
struct | _Thread_Control |
struct | Thread_Control_add_on |
Thread control add-on. More... | |
struct | Thread_Information |
The thread object information. More... | |
struct | Thread_Configuration |
The configuration of a new thread to initialize. More... | |
struct | Thread_Close_context |
Macros | |
#define | RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE |
#define | RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT |
#define | THREAD_API_FIRST THREAD_API_RTEMS |
#define | THREAD_API_LAST THREAD_API_POSIX |
#define | THREAD_DEFAULT_MAXIMUM_NAME_SIZE 16 |
The default maximum size of a thread name in characters (including the terminating '\0' character). More... | |
#define | THREAD_INFORMATION_DEFINE_ZERO(name, api, cls) |
#define | THREAD_INFORMATION_DEFINE(name, api, cls, max) |
#define | RTEMS_SCORE_ROBUST_THREAD_DISPATCH |
Enables a robust thread dispatch. More... | |
#define | THREAD_OF_SCHEDULER_HELP_NODE(node) RTEMS_CONTAINER_OF( node, Thread_Control, Scheduler.Help_node ) |
#define | THREAD_QUEUE_CONTEXT_OF_REQUEST(node) RTEMS_CONTAINER_OF( node, Thread_queue_Context, Lock_context.Wait.Gate.Node ) |
#define | THREAD_WAIT_FLAGS_INITIAL 0x0U |
The initial thread wait flags value set by _Thread_Initialize(). | |
#define | THREAD_WAIT_STATE_MASK 0xffU |
Mask to get the thread wait state flags. | |
#define | THREAD_WAIT_STATE_INTEND_TO_BLOCK 0x1U |
Indicates that the thread begins with the blocking operation. More... | |
#define | THREAD_WAIT_STATE_BLOCKED 0x2U |
Indicates that the thread completed the blocking operation. | |
#define | THREAD_WAIT_STATE_READY_AGAIN 0x4U |
Indicates that a condition to end the thread wait occurred. More... | |
#define | THREAD_WAIT_CLASS_MASK 0xff00U |
Mask to get the thread wait class flags. | |
#define | THREAD_WAIT_CLASS_EVENT 0x100U |
Indicates that the thread waits for an event. | |
#define | THREAD_WAIT_CLASS_SYSTEM_EVENT 0x200U |
Indicates that the thread waits for a system event. | |
#define | THREAD_WAIT_CLASS_OBJECT 0x400U |
Indicates that the thread waits for an object. | |
#define | THREAD_WAIT_CLASS_PERIOD 0x800U |
Indicates that the thread waits for a period. | |
#define | THREAD_PIN_STEP 2 |
#define | THREAD_PIN_PREEMPTION 1 |
Typedefs | |
typedef CPU_Uint32ptr | Thread_Entry_numeric_type |
Type of the numeric argument of a thread entry function with at least one numeric argument. More... | |
typedef void(* | Thread_CPU_budget_algorithm_callout) (Thread_Control *) |
typedef unsigned int | Thread_Wait_flags |
This type is able to contain several flags used to control the wait class and state of a thread. More... | |
typedef struct Thread_Action | Thread_Action |
typedef void(* | Thread_Action_handler) (Thread_Control *the_thread, Thread_Action *action, ISR_lock_Context *lock_context) |
Thread action handler. More... | |
typedef void(* | rtems_per_thread_routine) (Thread_Control *) |
typedef struct Thread_Configured_control | Thread_Configured_control |
The configured thread control block. More... | |
typedef struct Thread_queue_Configured_heads | Thread_queue_Configured_heads |
The configured thread queue heads. More... | |
typedef void *(* | Thread_Idle_body) (uintptr_t) |
The idle thread body type. | |
typedef bool(* | Thread_Visitor) (Thread_Control *the_thread, void *arg) |
Enumerations | |
enum | Thread_CPU_budget_algorithms { THREAD_CPU_BUDGET_ALGORITHM_NONE, THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE, THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE, THREAD_CPU_BUDGET_ALGORITHM_CALLOUT } |
enum | Thread_Scheduler_state { THREAD_SCHEDULER_BLOCKED, THREAD_SCHEDULER_SCHEDULED, THREAD_SCHEDULER_READY } |
The thread state with respect to the scheduler. More... | |
enum | Thread_APIs { THREAD_API_RTEMS, THREAD_API_POSIX } |
enum | Thread_Life_state { THREAD_LIFE_PROTECTED = 0x1, THREAD_LIFE_RESTARTING = 0x2, THREAD_LIFE_TERMINATING = 0x4, THREAD_LIFE_CHANGE_DEFERRED = 0x8, THREAD_LIFE_DETACHED = 0x10 } |
Thread life states. More... | |
Functions | |
void | rtems_iterate_over_all_threads (rtems_per_thread_routine routine) RTEMS_DEPRECATED |
Deprecated, use rtems_task_iterate() instead. More... | |
Objects_Control * | _Thread_Allocate_unlimited (Objects_Information *information) |
Return an inactive thread object or NULL. More... | |
static __inline__ bool | _Thread_Dispatch_is_enabled (void) |
Indicates if the executing thread is inside a thread dispatch critical section. More... | |
static __inline__ uint32_t | _Thread_Dispatch_get_disable_level (void) |
Gets thread dispatch disable level. More... | |
static __inline__ void | _Thread_Dispatch_initialization (void) |
Thread dispatch initialization. More... | |
void | _Thread_Dispatch (void) |
Performs a thread dispatch if necessary. More... | |
void | _Thread_Dispatch_direct (Per_CPU_Control *cpu_self) |
Directly do a thread dispatch. More... | |
void | _Thread_Do_dispatch (Per_CPU_Control *cpu_self, ISR_Level level) |
Performs a thread dispatch on the current processor. More... | |
static __inline__ Per_CPU_Control * | _Thread_Dispatch_disable_with_CPU (Per_CPU_Control *cpu_self, const ISR_lock_Context *lock_context) |
Disables thread dispatching inside a critical section (interrupts disabled) with the current processor. More... | |
static __inline__ Per_CPU_Control * | _Thread_Dispatch_disable_critical (const ISR_lock_Context *lock_context) |
Disables thread dispatching inside a critical section (interrupts disabled). More... | |
static __inline__ Per_CPU_Control * | _Thread_Dispatch_disable (void) |
Disables thread dispatching. More... | |
void | _Thread_Dispatch_enable (Per_CPU_Control *cpu_self) |
Enables thread dispatching. More... | |
static __inline__ void | _Thread_Dispatch_unnest (Per_CPU_Control *cpu_self) |
Unnests thread dispatching. More... | |
static __inline__ void | _Thread_Dispatch_request (Per_CPU_Control *cpu_self, Per_CPU_Control *cpu_target) |
Requests a thread dispatch on the target processor. More... | |
void | _Thread_Iterate (Thread_Visitor visitor, void *arg) |
Calls the visitor with all threads and the given argument until it is done. More... | |
void | _Thread_Initialize_information (Thread_Information *information) |
Initializes the thread information. More... | |
void | _Thread_Handler_initialization (void) |
Initializes thread handler. More... | |
void | _Thread_Create_idle (void) |
Creates idle thread. More... | |
void | _Thread_Start_multitasking (void) RTEMS_NO_RETURN |
Starts thread multitasking. More... | |
bool | _Thread_Initialize (Thread_Information *information, Thread_Control *the_thread, const Thread_Configuration *config) |
Initializes thread. More... | |
bool | _Thread_Start (Thread_Control *the_thread, const Thread_Entry_information *entry, ISR_lock_Context *lock_context) |
Starts the specified thread. More... | |
void | _Thread_Restart_self (Thread_Control *executing, const Thread_Entry_information *entry, ISR_lock_Context *lock_context) RTEMS_NO_RETURN |
Restarts the currently executing thread. More... | |
bool | _Thread_Restart_other (Thread_Control *the_thread, const Thread_Entry_information *entry, ISR_lock_Context *lock_context) |
Restarts the thread. More... | |
void | _Thread_Yield (Thread_Control *executing) |
Yields the currently executing thread. More... | |
Thread_Life_state | _Thread_Change_life (Thread_Life_state clear, Thread_Life_state set, Thread_Life_state ignore) |
Changes the currently executing thread to a new state with the sets. More... | |
Thread_Life_state | _Thread_Set_life_protection (Thread_Life_state state) |
Set the thread to life protected. More... | |
void | _Thread_Kill_zombies (void) |
Kills all zombie threads in the system. More... | |
void | _Thread_Exit (Thread_Control *executing, Thread_Life_state set, void *exit_value) |
Exits the currently executing thread. More... | |
void | _Thread_Join (Thread_Control *the_thread, States_Control waiting_for_join, Thread_Control *executing, Thread_queue_Context *queue_context) |
Joins the currently executing thread with the given thread to wait for. More... | |
void | _Thread_Cancel (Thread_Control *the_thread, Thread_Control *executing, void *exit_value) |
Cancels the thread. More... | |
void | _Thread_Close (Thread_Control *the_thread, Thread_Control *executing, Thread_Close_context *context) |
Closes the thread. More... | |
static __inline__ bool | _Thread_Is_ready (const Thread_Control *the_thread) |
Checks if the thread is ready. More... | |
States_Control | _Thread_Clear_state_locked (Thread_Control *the_thread, States_Control state) |
Clears the specified thread state without locking the lock context. More... | |
States_Control | _Thread_Clear_state (Thread_Control *the_thread, States_Control state) |
Clears the specified thread state. More... | |
States_Control | _Thread_Set_state_locked (Thread_Control *the_thread, States_Control state) |
Sets the specified thread state without locking the lock context. More... | |
States_Control | _Thread_Set_state (Thread_Control *the_thread, States_Control state) |
Sets the specified thread state. More... | |
void | _Thread_Load_environment (Thread_Control *the_thread) |
Initializes enviroment for a thread. More... | |
void | _Thread_Entry_adaptor_idle (Thread_Control *executing) |
Calls the start kinds idle entry of the thread. More... | |
void | _Thread_Entry_adaptor_numeric (Thread_Control *executing) |
Calls the start kinds numeric entry of the thread. More... | |
void | _Thread_Entry_adaptor_pointer (Thread_Control *executing) |
Calls the start kinds pointer entry of the thread. More... | |
void | _Thread_Handler (void) |
Wrapper function for all threads. More... | |
static __inline__ void | _Thread_State_acquire_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Acquires the lock context in a critical section. More... | |
static __inline__ void | _Thread_State_acquire (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Disables interrupts and acquires the lock_context. More... | |
static __inline__ Thread_Control * | _Thread_State_acquire_for_executing (ISR_lock_Context *lock_context) |
Disables interrupts and acquires the lock context for the currently executing thread. More... | |
static __inline__ void | _Thread_State_release_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Release the lock context in a critical section. More... | |
static __inline__ void | _Thread_State_release (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Releases the lock context and enables interrupts. More... | |
void | _Thread_Priority_perform_actions (Thread_Control *start_of_path, Thread_queue_Context *queue_context) |
Checks if the thread is owner of the lock of the join queue. More... | |
void | _Thread_Priority_add (Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context) |
Adds the specified thread priority node to the corresponding thread priority aggregation. More... | |
void | _Thread_Priority_remove (Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context) |
Removes the specified thread priority node from the corresponding thread priority aggregation. More... | |
void | _Thread_Priority_changed (Thread_Control *the_thread, Priority_Node *priority_node, bool prepend_it, Thread_queue_Context *queue_context) |
Propagates a thread priority value change in the specified thread priority node to the corresponding thread priority aggregation. More... | |
static __inline__ void | _Thread_Priority_change (Thread_Control *the_thread, Priority_Node *priority_node, Priority_Control new_priority, bool prepend_it, Thread_queue_Context *queue_context) |
Changes the thread priority value of the specified thread priority node in the corresponding thread priority aggregation. More... | |
void | _Thread_Priority_replace (Thread_Control *the_thread, Priority_Node *victim_node, Priority_Node *replacement_node) |
Replaces the victim priority node with the replacement priority node in the corresponding thread priority aggregation. More... | |
void | _Thread_Priority_update (Thread_queue_Context *queue_context) |
Updates the priority of all threads in the set. More... | |
void | _Thread_Priority_and_sticky_update (Thread_Control *the_thread, int sticky_level_change) |
Updates the priority of the thread and changes it sticky level. More... | |
static __inline__ bool | _Thread_Priority_less_than (Priority_Control left, Priority_Control right) |
Checks if the left thread priority is less than the right thread priority in the intuitive sense of priority. More... | |
static __inline__ Priority_Control | _Thread_Priority_highest (Priority_Control left, Priority_Control right) |
Returns the highest priority of the left and right thread priorities in the intuitive sense of priority. More... | |
static __inline__ Objects_Information * | _Thread_Get_objects_information (Objects_Id id) |
Gets object information for the object id. More... | |
Thread_Control * | _Thread_Get (Objects_Id id, ISR_lock_Context *lock_context) |
Gets a thread by its identifier. More... | |
static __inline__ Per_CPU_Control * | _Thread_Get_CPU (const Thread_Control *thread) |
Gets the cpu of the thread's scheduler. More... | |
static __inline__ void | _Thread_Set_CPU (Thread_Control *thread, Per_CPU_Control *cpu) |
Sets the cpu of the thread's scheduler. More... | |
static __inline__ bool | _Thread_Is_executing (const Thread_Control *the_thread) |
Checks if the thread is the currently executing thread. More... | |
static __inline__ bool | _Thread_Is_executing_on_a_processor (const Thread_Control *the_thread) |
Checks if the thread executes currently on some processor in the system. More... | |
static __inline__ bool | _Thread_Is_heir (const Thread_Control *the_thread) |
Checks if the thread is the heir. More... | |
static __inline__ void | _Thread_Unblock (Thread_Control *the_thread) |
Unblocks the thread. More... | |
static __inline__ void | _Thread_Save_fp (Thread_Control *executing) |
Checks if the floating point context of the thread is currently loaded in the floating point unit. More... | |
static __inline__ void | _Thread_Restore_fp (Thread_Control *executing) |
Restores the executing thread's floating point area. More... | |
static __inline__ bool | _Thread_Is_context_switch_necessary (void) |
Deallocates the currently loaded floating point context. More... | |
static __inline__ bool | _Thread_Is_null (const Thread_Control *the_thread) |
Checks if the thread is NULL. More... | |
static __inline__ uint32_t | _Thread_Get_maximum_internal_threads (void) |
Gets the maximum number of internal threads. More... | |
static __inline__ Thread_Control * | _Thread_Internal_allocate (void) |
Allocates an internal thread and returns it. More... | |
static __inline__ Thread_Control * | _Thread_Get_heir_and_make_it_executing (Per_CPU_Control *cpu_self) |
Gets the heir of the processor and makes it executing. More... | |
static __inline__ void | _Thread_Update_CPU_time_used (Thread_Control *the_thread, Per_CPU_Control *cpu) |
Updates the cpu time used of the thread. More... | |
static __inline__ void | _Thread_Dispatch_update_heir (Per_CPU_Control *cpu_self, Per_CPU_Control *cpu_for_heir, Thread_Control *heir) |
Updates the used cpu time for the heir and dispatches a new heir. More... | |
void | _Thread_Get_CPU_time_used (Thread_Control *the_thread, Timestamp_Control *cpu_time_used) |
Gets the used cpu time of the thread and stores it in the given Timestamp_Control. More... | |
static __inline__ void | _Thread_Action_control_initialize (Thread_Action_control *action_control) |
Initializes the control chain of the action control. More... | |
static __inline__ void | _Thread_Action_initialize (Thread_Action *action) |
Initializes the Thread action. More... | |
static __inline__ void | _Thread_Add_post_switch_action (Thread_Control *the_thread, Thread_Action *action, Thread_Action_handler handler) |
Adds a post switch action to the thread with the given handler. More... | |
static __inline__ bool | _Thread_Is_life_restarting (Thread_Life_state life_state) |
Checks if the thread life state is restarting. More... | |
static __inline__ bool | _Thread_Is_life_terminating (Thread_Life_state life_state) |
Checks if the thread life state is terminating. More... | |
static __inline__ bool | _Thread_Is_life_change_allowed (Thread_Life_state life_state) |
Checks if the thread life state allos life change. More... | |
static __inline__ bool | _Thread_Is_life_changing (Thread_Life_state life_state) |
Checks if the thread life state is life changing. More... | |
static __inline__ bool | _Thread_Is_joinable (const Thread_Control *the_thread) |
Checks if the thread is joinable. More... | |
static __inline__ void | _Thread_Resource_count_increment (Thread_Control *the_thread) |
Increments the thread's resource count. More... | |
static __inline__ void | _Thread_Resource_count_decrement (Thread_Control *the_thread) |
Decrements the thread's resource count. More... | |
static __inline__ void | _Thread_Scheduler_cancel_need_for_help (Thread_Control *the_thread, Per_CPU_Control *cpu) |
Cancels the thread's need for help. More... | |
static __inline__ const Scheduler_Control * | _Thread_Scheduler_get_home (const Thread_Control *the_thread) |
Gets the home scheduler of the thread. More... | |
static __inline__ Scheduler_Node * | _Thread_Scheduler_get_home_node (const Thread_Control *the_thread) |
Gets the scheduler's home node. More... | |
static __inline__ Scheduler_Node * | _Thread_Scheduler_get_node_by_index (const Thread_Control *the_thread, size_t scheduler_index) |
Gets the thread's scheduler node by index. More... | |
static __inline__ void | _Thread_Scheduler_acquire_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Acquires the lock context in a critical section. More... | |
static __inline__ void | _Thread_Scheduler_release_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Releases the lock context in a critical section. More... | |
void | _Thread_Scheduler_process_requests (Thread_Control *the_thread) |
Process the thread's scheduler requests. More... | |
static __inline__ void | _Thread_Scheduler_add_request (Thread_Control *the_thread, Scheduler_Node *scheduler_node, Scheduler_Node_request request) |
Add a scheduler request to the thread. More... | |
static __inline__ void | _Thread_Scheduler_add_wait_node (Thread_Control *the_thread, Scheduler_Node *scheduler_node) |
Adds a wait node to the thread and adds a corresponding request to the thread. More... | |
static __inline__ void | _Thread_Scheduler_remove_wait_node (Thread_Control *the_thread, Scheduler_Node *scheduler_node) |
Remove a wait node from the thread and add a corresponding request to it. More... | |
static __inline__ Priority_Control | _Thread_Get_priority (const Thread_Control *the_thread) |
Returns the priority of the thread. More... | |
static __inline__ Priority_Control | _Thread_Get_unmapped_priority (const Thread_Control *the_thread) |
Returns the unmapped priority of the thread. More... | |
static __inline__ Priority_Control | _Thread_Get_unmapped_real_priority (const Thread_Control *the_thread) |
Returns the unmapped real priority of the thread. More... | |
static __inline__ void | _Thread_Wait_acquire_default_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Acquires the thread wait default lock inside a critical section (interrupts disabled). More... | |
static __inline__ Thread_Control * | _Thread_Wait_acquire_default_for_executing (ISR_lock_Context *lock_context) |
Acquires the thread wait default lock and returns the executing thread. More... | |
static __inline__ void | _Thread_Wait_acquire_default (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Acquires the thread wait default lock and disables interrupts. More... | |
static __inline__ void | _Thread_Wait_release_default_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Releases the thread wait default lock inside a critical section (interrupts disabled). More... | |
static __inline__ void | _Thread_Wait_release_default (Thread_Control *the_thread, ISR_lock_Context *lock_context) |
Releases the thread wait default lock and restores the previous interrupt status. More... | |
static __inline__ void | _Thread_Wait_remove_request_locked (Thread_Control *the_thread, Thread_queue_Lock_context *queue_lock_context) |
Removes the first pending wait lock request. More... | |
static __inline__ void | _Thread_Wait_acquire_queue_critical (Thread_queue_Queue *queue, Thread_queue_Lock_context *queue_lock_context) |
Acquires the wait queue inside a critical section. More... | |
static __inline__ void | _Thread_Wait_release_queue_critical (Thread_queue_Queue *queue, Thread_queue_Lock_context *queue_lock_context) |
Releases the wait queue inside a critical section. More... | |
static __inline__ void | _Thread_Wait_acquire_critical (Thread_Control *the_thread, Thread_queue_Context *queue_context) |
Acquires the thread wait lock inside a critical section (interrupts disabled). More... | |
static __inline__ void | _Thread_Wait_acquire (Thread_Control *the_thread, Thread_queue_Context *queue_context) |
Acquires the thread wait default lock and disables interrupts. More... | |
static __inline__ void | _Thread_Wait_release_critical (Thread_Control *the_thread, Thread_queue_Context *queue_context) |
Releases the thread wait lock inside a critical section (interrupts disabled). More... | |
static __inline__ void | _Thread_Wait_release (Thread_Control *the_thread, Thread_queue_Context *queue_context) |
Releases the thread wait lock and restores the previous interrupt status. More... | |
static __inline__ void | _Thread_Wait_claim (Thread_Control *the_thread, Thread_queue_Queue *queue) |
Claims the thread wait queue. More... | |
static __inline__ void | _Thread_Wait_claim_finalize (Thread_Control *the_thread, const Thread_queue_Operations *operations) |
Finalizes the thread wait queue claim via registration of the corresponding thread queue operations. More... | |
static __inline__ void | _Thread_Wait_remove_request (Thread_Control *the_thread, Thread_queue_Lock_context *queue_lock_context) |
Removes a thread wait lock request. More... | |
static __inline__ void | _Thread_Wait_restore_default (Thread_Control *the_thread) |
Restores the default thread wait queue and operations. More... | |
static __inline__ void | _Thread_Wait_tranquilize (Thread_Control *the_thread) |
Tranquilizes the thread after a wait on a thread queue. More... | |
static __inline__ void | _Thread_Wait_cancel (Thread_Control *the_thread, Thread_queue_Context *queue_context) |
Cancels a thread wait on a thread queue. More... | |
static __inline__ void | _Thread_Wait_flags_set (Thread_Control *the_thread, Thread_Wait_flags flags) |
Sets the thread's wait flags. More... | |
static __inline__ Thread_Wait_flags | _Thread_Wait_flags_get (const Thread_Control *the_thread) |
Gets the thread's wait flags according to the ATOMIC_ORDER_RELAXED. More... | |
static __inline__ Thread_Wait_flags | _Thread_Wait_flags_get_acquire (const Thread_Control *the_thread) |
Gets the thread's wait flags according to the ATOMIC_ORDER_ACQUIRE. More... | |
static __inline__ bool | _Thread_Wait_flags_try_change_release (Thread_Control *the_thread, Thread_Wait_flags expected_flags, Thread_Wait_flags desired_flags) |
Tries to change the thread wait flags with release semantics in case of success. More... | |
static __inline__ bool | _Thread_Wait_flags_try_change_acquire (Thread_Control *the_thread, Thread_Wait_flags expected_flags, Thread_Wait_flags desired_flags) |
Tries to change the thread wait flags with acquire semantics. More... | |
Objects_Id | _Thread_Wait_get_id (const Thread_Control *the_thread) |
Returns the object identifier of the object containing the current thread wait queue. More... | |
static __inline__ Status_Control | _Thread_Wait_get_status (const Thread_Control *the_thread) |
Get the status of the wait return code of the thread. More... | |
void | _Thread_Continue (Thread_Control *the_thread, Status_Control status) |
Cancels a blocking operation so that the thread can continue its execution. More... | |
void | _Thread_Timeout (Watchdog_Control *the_watchdog) |
General purpose thread wait timeout. More... | |
static __inline__ void | _Thread_Timer_initialize (Thread_Timer_information *timer, Per_CPU_Control *cpu) |
Initializes the thread timer. More... | |
static __inline__ void | _Thread_Add_timeout_ticks (Thread_Control *the_thread, Per_CPU_Control *cpu, Watchdog_Interval ticks) |
Adds timeout ticks to the thread. More... | |
static __inline__ void | _Thread_Timer_insert_realtime (Thread_Control *the_thread, Per_CPU_Control *cpu, Watchdog_Service_routine_entry routine, uint64_t expire) |
Inserts the cpu's watchdog realtime into the thread's timer. More... | |
static __inline__ void | _Thread_Timer_remove (Thread_Control *the_thread) |
Remove the watchdog timer from the thread. More... | |
static __inline__ void | _Thread_Remove_timer_and_unblock (Thread_Control *the_thread, Thread_queue_Queue *queue) |
Remove the watchdog timer from the thread and unblock if necessary. More... | |
Status_Control | _Thread_Set_name (Thread_Control *the_thread, const char *name) |
Sets the name of the thread. More... | |
size_t | _Thread_Get_name (const Thread_Control *the_thread, char *buffer, size_t buffer_size) |
Gets the name of the thread. More... | |
void | _Thread_Do_unpin (Thread_Control *executing, Per_CPU_Control *cpu_self) |
Unpins the thread. More... | |
static __inline__ void | _Thread_Pin (Thread_Control *executing) |
Pin the executing thread. More... | |
static __inline__ void | _Thread_Unpin (Thread_Control *executing, Per_CPU_Control *cpu_self) |
Unpins the thread. More... | |
Variables | |
const Thread_Control_add_on | _Thread_Control_add_ons [] |
Thread control add-ons. More... | |
const size_t | _Thread_Control_add_on_count |
Thread control add-on count. More... | |
const size_t | _Thread_Initial_thread_count |
Count of configured threads. More... | |
const size_t | _Thread_Maximum_name_size |
Maximum size of a thread name in characters (including the terminating '\0' character). More... | |
const size_t | _Thread_Maximum_TLS_size |
If this constant is greater than zero, then it defines the maximum thread-local storage size, otherwise the thread-local storage size is defined by the linker depending on the thread-local storage objects used by the application in the statically-linked executable. More... | |
const size_t | _Thread_queue_Heads_size |
Size of the thread queue heads of a particular application. More... | |
Thread_Information | _Thread_Information |
The internal thread objects information. | |
char | _Thread_Idle_stacks [] |
The idle thread stacks. More... | |
const size_t | _Thread_Idle_stack_size |
The idle thread stack size in bytes. More... | |
const Thread_Idle_body | _Thread_Idle_body |
The idle thread body. More... | |
void * | rtems_ada_self |
Objects_Id | _Thread_Global_constructor |
Object identifier of the global constructor thread. More... | |
Thread Handler.
This handler encapsulates functionality related to the management of threads. This includes the creation, deletion, and scheduling of threads.
The following variables are maintained as part of the per cpu data structure.
#define RTEMS_SCORE_ROBUST_THREAD_DISPATCH |
Enables a robust thread dispatch.
On each change of the thread dispatch disable level from one to zero the interrupt status is checked. In case interrupts are disabled and SMP is enabled or the CPU port needs it, then the system terminates with the fatal internal error INTERNAL_ERROR_BAD_THREAD_DISPATCH_ENVIRONMENT.
Definition at line 44 of file threaddispatch.h.
#define THREAD_API_FIRST THREAD_API_RTEMS |
#define THREAD_API_LAST THREAD_API_POSIX |
#define THREAD_DEFAULT_MAXIMUM_NAME_SIZE 16 |
#define THREAD_INFORMATION_DEFINE | ( | name, | |
api, | |||
cls, | |||
max | |||
) |
#define THREAD_INFORMATION_DEFINE_ZERO | ( | name, | |
api, | |||
cls | |||
) |
#define THREAD_OF_SCHEDULER_HELP_NODE | ( | node | ) | RTEMS_CONTAINER_OF( node, Thread_Control, Scheduler.Help_node ) |
The following points to the thread whose floating point context is currently loaded.
Definition at line 76 of file threadimpl.h.
#define THREAD_WAIT_STATE_INTEND_TO_BLOCK 0x1U |
Indicates that the thread begins with the blocking operation.
A blocking operation consists of an optional watchdog initialization and the setting of the appropriate thread blocking state with the corresponding scheduler block operation.
Definition at line 2151 of file threadimpl.h.
#define THREAD_WAIT_STATE_READY_AGAIN 0x4U |
Indicates that a condition to end the thread wait occurred.
This could be a timeout, a signal, an event or a resource availability.
Definition at line 2163 of file threadimpl.h.
typedef void( * Thread_Action_handler) (Thread_Control *the_thread, Thread_Action *action, ISR_lock_Context *lock_context) |
Thread action handler.
The thread action handler will be called with interrupts disabled and a corresponding lock acquired, e.g. _Thread_State_acquire(). The handler must release the corresponding lock, e.g. _Thread_State_release(). So, the corresponding lock may be used to protect private data used by the particular action.
Since the action is passed to the handler additional data may be accessed via RTEMS_CONTAINER_OF().
[in] | the_thread | The thread performing the action. |
[in] | action | The thread action. |
[in] | lock_context | The lock context to use for the lock release. |
typedef struct Thread_Configured_control Thread_Configured_control |
The configured thread control block.
This type is defined in <rtems/confdefs.h> and depends on the application configuration.
typedef void(* Thread_CPU_budget_algorithm_callout) (Thread_Control *) |
Type of the numeric argument of a thread entry function with at least one numeric argument.
This numeric argument type designates an unsigned integer type with the property that any valid pointer to void can be converted to this type and then converted back to a pointer to void. The result will compare equal to the original pointer.
typedef struct Thread_queue_Configured_heads Thread_queue_Configured_heads |
The configured thread queue heads.
In SMP configurations, this type is defined in <rtems/confdefs.h> and depends on the application configuration.
typedef unsigned int Thread_Wait_flags |
This type is able to contain several flags used to control the wait class and state of a thread.
The mutually exclusive wait class flags are
The mutually exclusive wait state flags are
enum Thread_APIs |
enum Thread_Life_state |
Thread life states.
The thread life states are orthogonal to the thread states used for synchronization primitives and blocking operations. They reflect the state changes triggered with thread restart and delete requests.
The individual state values must be a power of two to allow use of bit operations to manipulate and evaluate the thread life state.
The thread state with respect to the scheduler.
|
static |
Initializes the control chain of the action control.
[out] | action_control | The action control to initialize. |
Definition at line 1208 of file threadimpl.h.
|
static |
Initializes the Thread action.
[out] | action | The Thread_Action to initialize. |
Definition at line 1220 of file threadimpl.h.
|
static |
Adds a post switch action to the thread with the given handler.
[in,out] | the_thread | The thread. |
[in,out] | action | The action to add. |
handler | The handler for the action. |
Definition at line 1234 of file threadimpl.h.
|
static |
Adds timeout ticks to the thread.
[in,out] | the_thread | The thread to add the timeout ticks to. |
cpu | The cpu for the operation. | |
ticks | The ticks to add to the timeout ticks. |
Definition at line 2405 of file threadimpl.h.
Objects_Control* _Thread_Allocate_unlimited | ( | Objects_Information * | information | ) |
Return an inactive thread object or NULL.
NULL | No inactive object is available. |
object | An inactive object. |
void _Thread_Cancel | ( | Thread_Control * | the_thread, |
Thread_Control * | executing, | ||
void * | exit_value | ||
) |
Cancels the thread.
[in,out] | the_thread | The thread to cancel. |
executing | The currently executing thread. | |
exit_value | The exit value for the thread. |
Definition at line 459 of file threadrestart.c.
Thread_Life_state _Thread_Change_life | ( | Thread_Life_state | clear, |
Thread_Life_state | set, | ||
Thread_Life_state | ignore | ||
) |
Changes the currently executing thread to a new state with the sets.
clear | States to clear. |
set | States to set. |
ignore | States to ignore. |
Definition at line 658 of file threadrestart.c.
States_Control _Thread_Clear_state | ( | Thread_Control * | the_thread, |
States_Control | state | ||
) |
Clears the specified thread state.
In the case the previous state is a non-ready state and the next state is the ready state, then the thread is unblocked by the scheduler.
[in,out] | the_thread | The thread. |
state | The state to clear. It must not be zero. |
Definition at line 51 of file threadclearstate.c.
States_Control _Thread_Clear_state_locked | ( | Thread_Control * | the_thread, |
States_Control | state | ||
) |
Clears the specified thread state without locking the lock context.
In the case the previous state is a non-ready state and the next state is the ready state, then the thread is unblocked by the scheduler.
[in,out] | the_thread | The thread. |
state | The state to clear. It must not be zero. |
Definition at line 25 of file threadclearstate.c.
void _Thread_Close | ( | Thread_Control * | the_thread, |
Thread_Control * | executing, | ||
Thread_Close_context * | context | ||
) |
Closes the thread.
Closes the thread object and starts the thread termination sequence. In case the executing thread is not terminated, then this function waits until the terminating thread reached the zombie state.
the_thread | The thread to close. | |
executing | The currently executing thread. | |
[in,out] | context | The thread close context. |
Definition at line 518 of file threadrestart.c.
void _Thread_Continue | ( | Thread_Control * | the_thread, |
Status_Control | status | ||
) |
Cancels a blocking operation so that the thread can continue its execution.
In case this function actually cancelled the blocking operation, then the thread wait return code is set to the specified status.
A specialization of this function is _Thread_Timeout().
[in,out] | the_thread | The thread. |
status | The thread wait status. |
Definition at line 25 of file threadtimeout.c.
void _Thread_Create_idle | ( | void | ) |
Creates idle thread.
This routine creates the idle thread.
Definition at line 93 of file threadcreateidle.c.
void _Thread_Dispatch | ( | void | ) |
Performs a thread dispatch if necessary.
This routine is responsible for transferring control of the processor from the executing thread to the heir thread. Once the heir is running an attempt is made to run the pending post-switch thread actions.
As part of this process, it is responsible for the following actions
On entry the thread dispatch level must be equal to zero.
Definition at line 331 of file threaddispatch.c.
void _Thread_Dispatch_direct | ( | Per_CPU_Control * | cpu_self | ) |
Directly do a thread dispatch.
Must be called with a thread dispatch disable level of one, otherwise the INTERNAL_ERROR_BAD_THREAD_DISPATCH_DISABLE_LEVEL will occur. This function is useful for operations which synchronously block, e.g. self restart, self deletion, yield, sleep.
cpu_self | The current processor. |
Definition at line 350 of file threaddispatch.c.
|
static |
Disables thread dispatching.
Definition at line 191 of file threaddispatch.h.
|
static |
Disables thread dispatching inside a critical section (interrupts disabled).
lock_context | The lock context of the corresponding _ISR_lock_ISR_disable() that started the critical section. |
Definition at line 179 of file threaddispatch.h.
|
static |
Disables thread dispatching inside a critical section (interrupts disabled) with the current processor.
cpu_self | The current processor. |
lock_context | The lock context of the corresponding _ISR_lock_ISR_disable() that started the critical section. |
Definition at line 152 of file threaddispatch.h.
void _Thread_Dispatch_enable | ( | Per_CPU_Control * | cpu_self | ) |
Enables thread dispatching.
May perform a thread dispatch if necessary as a side-effect.
[in,out] | cpu_self | The current processor. |
Definition at line 362 of file threaddispatch.c.
|
static |
Gets thread dispatch disable level.
Definition at line 79 of file threaddispatch.h.
|
static |
Thread dispatch initialization.
This routine initializes the thread dispatching subsystem.
Definition at line 89 of file threaddispatch.h.
|
static |
Indicates if the executing thread is inside a thread dispatch critical section.
true | Thread dispatching is enabled. |
false | The executing thread is inside a thread dispatch critical section and dispatching is not allowed. |
Definition at line 55 of file threaddispatch.h.
|
static |
Requests a thread dispatch on the target processor.
[in,out] | cpu_self | The current processor. |
[in,out] | cpu_target | The target processor to request a thread dispatch. |
Definition at line 235 of file threaddispatch.h.
|
static |
Unnests thread dispatching.
[in,out] | cpu_self | The current processor. |
Definition at line 223 of file threaddispatch.h.
|
static |
Updates the used cpu time for the heir and dispatches a new heir.
[in,out] | cpu_self | The current processor. |
[in,out] | cpu_for_heir | The processor to do a dispatch on. |
heir | The new heir for cpu_for_heir. |
Definition at line 1177 of file threadimpl.h.
void _Thread_Do_dispatch | ( | Per_CPU_Control * | cpu_self, |
ISR_Level | level | ||
) |
Performs a thread dispatch on the current processor.
On entry the thread dispatch disable level must be equal to one and interrupts must be disabled.
This function assumes that a thread dispatch is necessary.
cpu_self | The current processor. |
level | The previous interrupt level. |
Definition at line 259 of file threaddispatch.c.
void _Thread_Do_unpin | ( | Thread_Control * | executing, |
Per_CPU_Control * | cpu_self | ||
) |
Unpins the thread.
executing | The currently executing thread. |
cpu_self | The cpu for the operation. |
Definition at line 15 of file threadunpin.c.
void _Thread_Entry_adaptor_idle | ( | Thread_Control * | executing | ) |
Calls the start kinds idle entry of the thread.
executing | The currently executing thread. |
Definition at line 21 of file threadentryadaptoridle.c.
void _Thread_Entry_adaptor_numeric | ( | Thread_Control * | executing | ) |
Calls the start kinds numeric entry of the thread.
executing | The currently executing thread. |
Definition at line 21 of file threadentryadaptornumeric.c.
void _Thread_Entry_adaptor_pointer | ( | Thread_Control * | executing | ) |
Calls the start kinds pointer entry of the thread.
Stores the return value in the Wait.return_argument of the thread.
executing | The currently executing thread. |
void _Thread_Exit | ( | Thread_Control * | executing, |
Thread_Life_state | set, | ||
void * | exit_value | ||
) |
Exits the currently executing thread.
[in,out] | executing | The currently executing thread. |
set | The states to set. | |
[out] | exit_value | Contains the exit value of the thread. |
Definition at line 541 of file threadrestart.c.
Thread_Control* _Thread_Get | ( | Objects_Id | id, |
ISR_lock_Context * | lock_context | ||
) |
Gets a thread by its identifier.
id | The id of the thread. |
lock_context | The lock context. |
Definition at line 24 of file threadget.c.
|
static |
Gets the cpu of the thread's scheduler.
thread | The thread. |
Definition at line 867 of file threadimpl.h.
void _Thread_Get_CPU_time_used | ( | Thread_Control * | the_thread, |
Timestamp_Control * | cpu_time_used | ||
) |
Gets the used cpu time of the thread and stores it in the given Timestamp_Control.
the_thread | The thread to get the used cpu time of. | |
[out] | cpu_time_used | Stores the used cpu time of the_thread. |
Definition at line 31 of file threadgetcputimeused.c.
|
static |
Gets the heir of the processor and makes it executing.
Must be called with interrupts disabled. The thread dispatch necessary indicator is cleared as a side-effect.
[in,out] | cpu_self | The processor to get the heir of. |
Definition at line 1135 of file threadimpl.h.
|
static |
Gets the maximum number of internal threads.
Definition at line 1094 of file threadimpl.h.
size_t _Thread_Get_name | ( | const Thread_Control * | the_thread, |
char * | buffer, | ||
size_t | buffer_size | ||
) |
Gets the name of the thread.
the_thread | The thread to get the name of. | |
[out] | buffer | Contains the thread's name. |
buffer_size | The size of buffer. |
|
static |
Gets object information for the object id.
id | The id of the object information. |
pointer | The object information for this id. |
NULL | The object id is not valid. |
Definition at line 826 of file threadimpl.h.
|
static |
Returns the priority of the thread.
Returns the user API and thread wait information relevant thread priority. This includes temporary thread priority adjustments due to locking protocols, a job release or the POSIX sporadic server for example.
the_thread | The thread of which to get the priority. |
Definition at line 1610 of file threadimpl.h.
|
static |
Returns the unmapped priority of the thread.
the_thread | The thread of which to get the unmapped priority. |
Definition at line 1627 of file threadimpl.h.
|
static |
Returns the unmapped real priority of the thread.
the_thread | The thread of which to get the unmapped real priority. |
Definition at line 1641 of file threadimpl.h.
void _Thread_Handler | ( | void | ) |
Wrapper function for all threads.
This routine is the wrapper function for all threads. It is the starting point for all threads. The user provided thread entry point is invoked by this routine. Operations which must be performed immediately before and after the user's thread executes are found here.
Definition at line 76 of file threadhandler.c.
void _Thread_Handler_initialization | ( | void | ) |
bool _Thread_Initialize | ( | Thread_Information * | information, |
Thread_Control * | the_thread, | ||
const Thread_Configuration * | config | ||
) |
Initializes thread.
This routine initializes the specified the thread. It allocates all memory associated with this thread. It completes by adding the thread to the local object table so operations on this thread id are allowed.
information | The thread information. |
the_thread | The thread to initialize. |
config | The configuration of the thread to initialize. |
true | The thread initialization was successful. |
false | The thread initialization failed. |
Definition at line 30 of file threadinitialize.c.
void _Thread_Initialize_information | ( | Thread_Information * | information | ) |
|
static |
Allocates an internal thread and returns it.
pointer | Pointer to the allocated Thread_Control. |
NULL | The operation failed. |
Definition at line 1116 of file threadimpl.h.
|
static |
Deallocates the currently loaded floating point context.
This routine is invoked when the currently loaded floating point context is now longer associated with an active thread. Checks if dispatching is disabled.
This function returns true if dispatching is disabled, and false otherwise.
true | Dispatching is disabled. |
false | Dispatching is enabled. |
Definition at line 1069 of file threadimpl.h.
|
static |
Checks if the thread is the currently executing thread.
This function returns true if the_thread is the currently executing thread, and false otherwise.
the_thread | The thread to verify if it is the currently executing thread. |
true | the_thread is the currently executing one. |
false | the_thread is not the currently executing one. |
Definition at line 910 of file threadimpl.h.
|
static |
Checks if the thread executes currently on some processor in the system.
Do not confuse this with _Thread_Is_executing() which checks only the current processor.
the_thread | The thread for the verification. |
true | the_thread is the currently executing one. |
false | the_thread is not the currently executing one. |
Definition at line 930 of file threadimpl.h.
|
static |
Checks if the thread is the heir.
This function returns true if the_thread is the heir thread, and false otherwise.
the_thread | The thread for the verification. |
true | the_thread is the heir. |
false | the_thread is not the heir. |
Definition at line 949 of file threadimpl.h.
|
static |
Checks if the thread is joinable.
the_thread | The thread for the verification. |
true | life_state is joinable. |
false | life_state is not joinable. |
Definition at line 1326 of file threadimpl.h.
|
static |
Checks if the thread life state allos life change.
life_state | The thread life state for the verification. |
true | life_state allows life change. |
false | life_state does not allow life change. |
Definition at line 1294 of file threadimpl.h.
|
static |
Checks if the thread life state is life changing.
life_state | The thread life state for the verification. |
true | life_state is life changing. |
false | life_state is not life changing. |
Definition at line 1310 of file threadimpl.h.
|
static |
Checks if the thread life state is restarting.
life_state | The thread life state for the verification. |
true | life_state is restarting. |
false | life_state is not restarting. |
Definition at line 1264 of file threadimpl.h.
|
static |
Checks if the thread life state is terminating.
life_state | The thread life state for the verification. |
true | life_state is terminating. |
false | life_state is not terminating. |
Definition at line 1279 of file threadimpl.h.
|
static |
Checks if the thread is NULL.
the_thread | The thread for the verification. |
true | The thread is NULL . |
false | The thread is not NULL . |
Definition at line 1082 of file threadimpl.h.
|
static |
Checks if the thread is ready.
the_thread | The thread to check if it is ready. |
true | The thread is currently in the ready state. |
false | The thread is currently not ready. |
Definition at line 401 of file threadimpl.h.
void _Thread_Iterate | ( | Thread_Visitor | visitor, |
void * | arg | ||
) |
Calls the visitor with all threads and the given argument until it is done.
visitor | Function that gets a thread and arg as parameters and returns if it is done. |
arg | Parameter for visitor |
Definition at line 21 of file threaditerate.c.
void _Thread_Join | ( | Thread_Control * | the_thread, |
States_Control | waiting_for_join, | ||
Thread_Control * | executing, | ||
Thread_queue_Context * | queue_context | ||
) |
Joins the currently executing thread with the given thread to wait for.
[in,out] | the_thread | The thread to wait for. |
waiting_for_join | The states control for the join. | |
[in,out] | executing | The currently executing thread. |
queue_context | The thread queue context. |
Definition at line 430 of file threadrestart.c.
void _Thread_Kill_zombies | ( | void | ) |
Kills all zombie threads in the system.
Threads change into the zombie state as the last step in the thread termination sequence right before a context switch to the heir thread is initiated. Since the thread stack is still in use during this phase we have to postpone the thread stack reclamation until this point. On SMP configurations we may have to busy wait for context switch completion here.
Definition at line 217 of file threadrestart.c.
void _Thread_Load_environment | ( | Thread_Control * | the_thread | ) |
Initializes enviroment for a thread.
This routine initializes the context of the_thread to its appropriate starting state.
[in,out] | the_thread | The pointer to the thread control block. |
Definition at line 24 of file threadloadenv.c.
|
static |
Pin the executing thread.
executing | The currently executing thread. |
Definition at line 2553 of file threadimpl.h.
void _Thread_Priority_add | ( | Thread_Control * | the_thread, |
Priority_Node * | priority_node, | ||
Thread_queue_Context * | queue_context | ||
) |
Adds the specified thread priority node to the corresponding thread priority aggregation.
The caller must be the owner of the thread wait lock.
the_thread | The thread. |
priority_node | The thread priority node to add. |
queue_context | The thread queue context to return an updated set of threads for _Thread_Priority_update(). The thread queue context must be initialized via _Thread_queue_Context_clear_priority_updates() before a call of this function. |
Definition at line 277 of file threadchangepriority.c.
void _Thread_Priority_and_sticky_update | ( | Thread_Control * | the_thread, |
int | sticky_level_change | ||
) |
Updates the priority of the thread and changes it sticky level.
the_thread | The thread. |
sticky_level_change | The new value for the sticky level. |
Definition at line 362 of file threadchangepriority.c.
|
static |
Changes the thread priority value of the specified thread priority node in the corresponding thread priority aggregation.
The caller must be the owner of the thread wait lock.
the_thread | The thread. | |
[out] | priority_node | The thread priority node to change. |
new_priority | The new thread priority value of the thread priority node to change. | |
prepend_it | In case this is true, then the thread is prepended to its priority group in its home scheduler instance, otherwise it is appended. | |
queue_context | The thread queue context to return an updated set of threads for _Thread_Priority_update(). The thread queue context must be initialized via _Thread_queue_Context_clear_priority_updates() before a call of this function. |
Definition at line 722 of file threadimpl.h.
void _Thread_Priority_changed | ( | Thread_Control * | the_thread, |
Priority_Node * | priority_node, | ||
bool | prepend_it, | ||
Thread_queue_Context * | queue_context | ||
) |
Propagates a thread priority value change in the specified thread priority node to the corresponding thread priority aggregation.
The caller must be the owner of the thread wait lock.
the_thread | The thread. | |
[out] | priority_node | The thread priority node to change. |
prepend_it | In case this is true, then the thread is prepended to its priority group in its home scheduler instance, otherwise it is appended. | |
queue_context | The thread queue context to return an updated set of threads for _Thread_Priority_update(). The thread queue context must be initialized via _Thread_queue_Context_clear_priority_updates() before a call of this function. |
Definition at line 307 of file threadchangepriority.c.
|
static |
Returns the highest priority of the left and right thread priorities in the intuitive sense of priority.
left | The left thread priority. |
right | The right thread priority. |
Definition at line 810 of file threadimpl.h.
|
static |
Checks if the left thread priority is less than the right thread priority in the intuitive sense of priority.
left | The left thread priority. |
right | The right thread priority. |
true | The left priority is less in the intuitive sense. |
false | The left priority is greater or equal in the intuitive sense. |
Definition at line 793 of file threadimpl.h.
void _Thread_Priority_perform_actions | ( | Thread_Control * | start_of_path, |
Thread_queue_Context * | queue_context | ||
) |
Checks if the thread is owner of the lock of the join queue.
the_thread | The thread for the verification. |
true | The thread is owner of the lock of the join queue. |
false | The thread is not owner of the lock of the join queue. Performs the priority actions specified by the thread queue context along the thread queue path. |
The caller must be the owner of the thread wait lock.
start_of_path | The start thread of the thread queue path. |
queue_context | The thread queue context specifying the thread queue path and initial thread priority actions. |
Definition at line 182 of file threadchangepriority.c.
void _Thread_Priority_remove | ( | Thread_Control * | the_thread, |
Priority_Node * | priority_node, | ||
Thread_queue_Context * | queue_context | ||
) |
Removes the specified thread priority node from the corresponding thread priority aggregation.
The caller must be the owner of the thread wait lock.
the_thread | The thread. |
priority_node | The thread priority node to remove. |
queue_context | The thread queue context to return an updated set of threads for _Thread_Priority_update(). The thread queue context must be initialized via _Thread_queue_Context_clear_priority_updates() before a call of this function. |
Definition at line 292 of file threadchangepriority.c.
void _Thread_Priority_replace | ( | Thread_Control * | the_thread, |
Priority_Node * | victim_node, | ||
Priority_Node * | replacement_node | ||
) |
Replaces the victim priority node with the replacement priority node in the corresponding thread priority aggregation.
The caller must be the owner of the thread wait lock.
the_thread | The thread. |
victim_node | The victim thread priority node. |
replacement_node | The replacement thread priority node. |
Definition at line 323 of file threadchangepriority.c.
void _Thread_Priority_update | ( | Thread_queue_Context * | queue_context | ) |
Updates the priority of all threads in the set.
queue_context | The thread queue context to return an updated set of threads for _Thread_Priority_update(). The thread queue context must be initialized via _Thread_queue_Context_clear_priority_updates() before a call of this function. |
Definition at line 339 of file threadchangepriority.c.
|
static |
Remove the watchdog timer from the thread and unblock if necessary.
[in,out] | the_thread | The thread to remove the watchdog from and unblock if necessary. |
queue | The thread queue. |
Definition at line 2482 of file threadimpl.h.
|
static |
Decrements the thread's resource count.
[in,out] | the_thread | The thread to decrement the resource count of. |
Definition at line 1355 of file threadimpl.h.
|
static |
Increments the thread's resource count.
[in,out] | the_thread | The thread to increase the resource count of. |
Definition at line 1339 of file threadimpl.h.
bool _Thread_Restart_other | ( | Thread_Control * | the_thread, |
const Thread_Entry_information * | entry, | ||
ISR_lock_Context * | lock_context | ||
) |
Restarts the thread.
[in,out] | the_thread | The thread to restart. |
entry | The start entry information for the_thread. | |
lock_context | The lock context. |
true | The operation was successful. |
false | The operation failed. |
Definition at line 568 of file threadrestart.c.
void _Thread_Restart_self | ( | Thread_Control * | executing, |
const Thread_Entry_information * | entry, | ||
ISR_lock_Context * | lock_context | ||
) |
Restarts the currently executing thread.
[in,out] | executing | The currently executing thread. |
entry | The start entry information for executing. | |
lock_context | The lock context. |
Definition at line 611 of file threadrestart.c.
|
static |
Restores the executing thread's floating point area.
executing | The currently executing thread. |
Definition at line 1029 of file threadimpl.h.
|
static |
Checks if the floating point context of the thread is currently loaded in the floating point unit.
This function returns true if the floating point context of the_thread is currently loaded in the floating point unit, and false otherwise.
the_thread | The thread for the verification. |
true | The floating point context of the_thread is currently loaded in the floating point unit. |
false | The floating point context of the_thread is currently not loaded in the floating point unit. Saves the executing thread's floating point area. |
executing | The currently executing thread. |
Definition at line 1014 of file threadimpl.h.
|
static |
Acquires the lock context in a critical section.
the_thread | The thread to acquire the lock context. |
lock_context | The lock context. |
Definition at line 1483 of file threadimpl.h.
|
static |
Add a scheduler request to the thread.
[in,out] | the_thread | The thread to add a scheduler request to. |
[in,out] | scheduler_node | The scheduler node for the request. |
request | The request to add. |
Definition at line 1519 of file threadimpl.h.
|
static |
Adds a wait node to the thread and adds a corresponding request to the thread.
[in,out] | the_thread | The thread to add the wait node to. |
scheduler_node | The scheduler node which provides the wait node. |
Definition at line 1562 of file threadimpl.h.
|
static |
Cancels the thread's need for help.
the_thread | The thread to cancel the help request of. |
cpu | The cpu to get the lock context of in order to cancel the help request. |
Definition at line 1394 of file threadimpl.h.
|
static |
Gets the home scheduler of the thread.
the_thread | The thread to get the home scheduler of. |
Definition at line 1419 of file threadimpl.h.
|
static |
Gets the scheduler's home node.
the_thread | The thread to get the home node of. |
Definition at line 1438 of file threadimpl.h.
|
static |
Gets the thread's scheduler node by index.
the_thread | The thread of which to get a scheduler node. |
scheduler_index | The index of the desired scheduler node. |
Definition at line 1460 of file threadimpl.h.
void _Thread_Scheduler_process_requests | ( | Thread_Control * | the_thread | ) |
Process the thread's scheduler requests.
[in,out] | the_thread | The thread for the operation. |
Definition at line 23 of file threadscheduler.c.
|
static |
Releases the lock context in a critical section.
the_thread | The thread to release the lock context. |
lock_context | The lock context. |
Definition at line 1497 of file threadimpl.h.
|
static |
Remove a wait node from the thread and add a corresponding request to it.
the_thread | The thread to add the request to remove a wait node. |
scheduler_node | The scheduler node to remove a wait node from. |
Definition at line 1585 of file threadimpl.h.
|
static |
Sets the cpu of the thread's scheduler.
[out] | thread | The thread. |
cpu | The cpu to set. |
Definition at line 886 of file threadimpl.h.
Thread_Life_state _Thread_Set_life_protection | ( | Thread_Life_state | state | ) |
Set the thread to life protected.
Calls _Thread_Change_life with the given state AND THREAD_LIFE_PROTECTED to set and THREAD_LIFE_PROTECTED to clear.
state | The states to set. |
Definition at line 680 of file threadrestart.c.
Status_Control _Thread_Set_name | ( | Thread_Control * | the_thread, |
const char * | name | ||
) |
Sets the name of the thread.
[out] | the_thread | The thread to change the name of. |
name | The new name for the thread. |
STATUS_SUCCESSFUL | The operation succeeded. |
STATUS_RESULT_TOO_LARGE | The name was too long. |
States_Control _Thread_Set_state | ( | Thread_Control * | the_thread, |
States_Control | state | ||
) |
Sets the specified thread state.
In the case the previous state is the ready state, then the thread is blocked by the scheduler.
[in,out] | the_thread | The thread. |
state | The state to set. It must not be zero. |
Definition at line 50 of file threadsetstate.c.
States_Control _Thread_Set_state_locked | ( | Thread_Control * | the_thread, |
States_Control | state | ||
) |
Sets the specified thread state without locking the lock context.
In the case the previous state is the ready state, then the thread is blocked by the scheduler.
[in,out] | the_thread | The thread. |
state | The state to set. It must not be zero. |
Definition at line 28 of file threadsetstate.c.
bool _Thread_Start | ( | Thread_Control * | the_thread, |
const Thread_Entry_information * | entry, | ||
ISR_lock_Context * | lock_context | ||
) |
Starts the specified thread.
If the thread is not in the dormant state, the routine returns with a value of false and performs no actions except enabling interrupts as indicated by the ISR lock context.
Otherwise, this routine initializes the executable information for the thread and makes it ready to execute. After the call of this routine, the thread competes with all other ready threads for CPU time.
Then the routine enables the local interrupts as indicated by the ISR lock context.
Then the thread start user extensions are called with thread dispatching disabled and interrupts enabled after making the thread ready. Please note that in SMP configurations, the thread switch and begin user extensions may be called in parallel on another processor.
Then thread dispatching is enabled and other threads may execute before the routine returns.
[in,out] | the_thread | is the thread to start. |
entry | is the thread entry information. | |
[in,out] | is | the ISR lock context which shall be used to disable the local interrupts before the call of this routine. |
true | The thread was in the dormant state and was sucessefully started. |
false | Otherwise. |
Definition at line 26 of file threadstart.c.
void _Thread_Start_multitasking | ( | void | ) |
Starts thread multitasking.
This routine initiates multitasking. It is invoked only as part of initialization and its invocation is the last act of the non-multitasking part of the system initialization.
Definition at line 24 of file threadstartmultitasking.c.
|
static |
Disables interrupts and acquires the lock_context.
the_thread | The thread to acquire the lock context. |
lock_context | The lock context. |
Definition at line 542 of file threadimpl.h.
|
static |
Acquires the lock context in a critical section.
the_thread | The thread to acquire the lock context. |
lock_context | The lock context. |
Definition at line 528 of file threadimpl.h.
|
static |
Disables interrupts and acquires the lock context for the currently executing thread.
lock_context | The lock context. |
Definition at line 559 of file threadimpl.h.
|
static |
Releases the lock context and enables interrupts.
[in,out] | the_thread | The thread to release the lock context. |
[out] | lock_context | The lock context. |
Definition at line 592 of file threadimpl.h.
|
static |
Release the lock context in a critical section.
the_thread | The thread to release the lock context. |
lock_context | The lock context. |
Definition at line 578 of file threadimpl.h.
void _Thread_Timeout | ( | Watchdog_Control * | the_watchdog | ) |
General purpose thread wait timeout.
the_watchdog | The thread timer watchdog. |
Definition at line 83 of file threadtimeout.c.
|
static |
Initializes the thread timer.
[in,out] | timer | The timer to initialize. |
cpu | The cpu for the operation. |
Definition at line 2388 of file threadimpl.h.
|
static |
Inserts the cpu's watchdog realtime into the thread's timer.
[in,out] | the_thread | for the operation. |
cpu | The cpu to get the watchdog header from. | |
routine | The watchdog routine for the thread. | |
expire | Expiration for the watchdog. |
Definition at line 2431 of file threadimpl.h.
|
static |
Remove the watchdog timer from the thread.
[in,out] | the_thread | The thread to remove the watchdog from. |
Definition at line 2456 of file threadimpl.h.
|
static |
Unblocks the thread.
This routine clears any blocking state for the_thread. It performs any necessary scheduling operations including the selection of a new heir thread.
[in,out] | the_thread | The thread to unblock. |
Definition at line 965 of file threadimpl.h.
|
static |
Unpins the thread.
executing | The currently executing thread. |
cpu_self | The cpu for the operation. |
Definition at line 2570 of file threadimpl.h.
|
static |
Updates the cpu time used of the thread.
[in,out] | the_thread | The thread to add additional cpu time that is used. |
cpu | The cpu. |
Definition at line 1155 of file threadimpl.h.
|
static |
Acquires the thread wait default lock and disables interrupts.
[in,out] | the_thread | The thread. |
[in,out] | queue_context | The thread queue context for the corresponding _Thread_Wait_release(). |
Definition at line 1868 of file threadimpl.h.
|
static |
Acquires the thread wait lock inside a critical section (interrupts disabled).
[in,out] | the_thread | The thread. |
[in,out] | queue_context | The thread queue context for the corresponding _Thread_Wait_release_critical(). |
Definition at line 1812 of file threadimpl.h.
|
static |
Acquires the thread wait default lock and disables interrupts.
[in,out] | the_thread | The thread. |
[out] | lock_context | The lock context used for the corresponding lock release. |
Definition at line 1699 of file threadimpl.h.
|
static |
Acquires the thread wait default lock inside a critical section (interrupts disabled).
[in,out] | the_thread | The thread. |
lock_context | The lock context used for the corresponding lock release. |
Definition at line 1658 of file threadimpl.h.
|
static |
Acquires the thread wait default lock and returns the executing thread.
lock_context | The lock context used for the corresponding lock release. |
Definition at line 1677 of file threadimpl.h.
|
static |
Acquires the wait queue inside a critical section.
queue | The queue that acquires. |
queue_lock_context | The queue lock context. |
Definition at line 1774 of file threadimpl.h.
|
static |
Cancels a thread wait on a thread queue.
[in,out] | the_thread | The thread. |
queue_context | The thread queue context used for corresponding _Thread_Wait_acquire(). |
Definition at line 2106 of file threadimpl.h.
|
static |
Claims the thread wait queue.
The caller must not be the owner of the default thread wait lock. The caller must be the owner of the corresponding thread queue lock. The registration of the corresponding thread queue operations is deferred and done after the deadlock detection. This is crucial to support timeouts on SMP configurations.
[in,out] | the_thread | The thread. |
[in,out] | queue | The new thread queue. |
Definition at line 1952 of file threadimpl.h.
|
static |
Finalizes the thread wait queue claim via registration of the corresponding thread queue operations.
[in,out] | the_thread | The thread. |
operations | The corresponding thread queue operations. |
Definition at line 1981 of file threadimpl.h.
|
static |
Gets the thread's wait flags according to the ATOMIC_ORDER_RELAXED.
the_thread | The thread to get the wait flags of. |
Definition at line 2215 of file threadimpl.h.
|
static |
Gets the thread's wait flags according to the ATOMIC_ORDER_ACQUIRE.
the_thread | The thread to get the wait flags of. |
Definition at line 2233 of file threadimpl.h.
|
static |
Sets the thread's wait flags.
[in,out] | the_thread | The thread to set the wait flags of. |
flags | The flags to set. |
Definition at line 2196 of file threadimpl.h.
|
static |
Tries to change the thread wait flags with acquire semantics.
In case the wait flags are equal to the expected wait flags, then the wait flags are set to the desired wait flags.
the_thread | The thread. |
expected_flags | The expected wait flags. |
desired_flags | The desired wait flags. |
true | The wait flags were equal to the expected wait flags. |
false | The wait flags were not equal to the expected wait flags. |
Definition at line 2300 of file threadimpl.h.
|
static |
Tries to change the thread wait flags with release semantics in case of success.
Must be called inside a critical section (interrupts disabled).
In case the wait flags are equal to the expected wait flags, then the wait flags are set to the desired wait flags.
the_thread | The thread. |
expected_flags | The expected wait flags. |
desired_flags | The desired wait flags. |
true | The wait flags were equal to the expected wait flags. |
false | The wait flags were not equal to the expected wait flags. |
Definition at line 2260 of file threadimpl.h.
Objects_Id _Thread_Wait_get_id | ( | const Thread_Control * | the_thread | ) |
Returns the object identifier of the object containing the current thread wait queue.
This function may be used for debug and system information purposes. The caller must be the owner of the thread lock.
the_thread | The thread. |
0 | The thread waits on no thread queue currently, the thread wait queue is not contained in an object, or the current thread state provides insufficient information, e.g. the thread is in the middle of a blocking operation. |
other | The object identifier of the object containing the thread wait queue. |
|
static |
Get the status of the wait return code of the thread.
the_thread | The thread to get the status of the wait return code of. |
Definition at line 2354 of file threadimpl.h.
|
static |
Releases the thread wait lock and restores the previous interrupt status.
[in,out] | the_thread | The thread. |
[in,out] | queue_context | The thread queue context used for corresponding _Thread_Wait_acquire(). |
Definition at line 1929 of file threadimpl.h.
|
static |
Releases the thread wait lock inside a critical section (interrupts disabled).
The previous interrupt status is not restored.
[in,out] | the_thread | The thread. |
[in,out] | queue_context | The thread queue context used for corresponding _Thread_Wait_acquire_critical(). |
Definition at line 1887 of file threadimpl.h.
|
static |
Releases the thread wait default lock and restores the previous interrupt status.
[in,out] | the_thread | The thread. |
[out] | lock_context | The lock context used for the corresponding lock acquire. |
Definition at line 1734 of file threadimpl.h.
|
static |
Releases the thread wait default lock inside a critical section (interrupts disabled).
The previous interrupt status is not restored.
[in,out] | the_thread | The thread. |
lock_context | The lock context used for the corresponding lock acquire. |
Definition at line 1718 of file threadimpl.h.
|
static |
Releases the wait queue inside a critical section.
queue | The queue that releases. |
queue_lock_context | The queue lock context. |
Definition at line 1792 of file threadimpl.h.
|
static |
Removes a thread wait lock request.
On SMP configurations, removes a thread wait lock request.
On other configurations, this function does nothing.
[in,out] | the_thread | The thread. |
[in,out] | queue_lock_context | The thread queue lock context used for corresponding _Thread_Wait_acquire(). |
Definition at line 2000 of file threadimpl.h.
|
static |
Removes the first pending wait lock request.
the_thread | The thread to remove the request from. |
queue_lock_context | The queue lock context. |
Definition at line 1753 of file threadimpl.h.
|
static |
Restores the default thread wait queue and operations.
The caller must be the owner of the current thread wait queue lock.
On SMP configurations, the pending requests are updated to use the stale thread queue operations.
[in,out] | the_thread | The thread. |
Definition at line 2029 of file threadimpl.h.
|
static |
Tranquilizes the thread after a wait on a thread queue.
After the violent blocking procedure this function makes the thread calm and peaceful again so that it can carry out its normal work.
On SMP configurations, ensures that all pending thread wait lock requests completed before the thread is able to begin a new thread wait procedure.
On other configurations, this function does nothing.
It must be called after a _Thread_Wait_claim() exactly once
the_thread | The thread. |
Definition at line 2088 of file threadimpl.h.
void _Thread_Yield | ( | Thread_Control * | executing | ) |
Yields the currently executing thread.
[in,out] | executing | The thread that performs a yield. |
Definition at line 30 of file threadyield.c.
void rtems_iterate_over_all_threads | ( | rtems_per_thread_routine | routine | ) |
Deprecated, use rtems_task_iterate() instead.
Use rtems_task_iterate() instead.
const size_t _Thread_Control_add_on_count |
Thread control add-on count.
Count of entries in _Thread_Control_add_ons.
This value is provided via <rtems/confdefs.h>.
const Thread_Control_add_on _Thread_Control_add_ons[] |
Thread control add-ons.
The thread control block contains fields that point to application configuration dependent memory areas, like the scheduler information, the API control blocks, the user extension context table, and the Newlib re-entrancy support. Account for these areas in the configuration and avoid extra workspace allocations for these areas.
This array is provided via <rtems/confdefs.h>.
Objects_Id _Thread_Global_constructor |
Object identifier of the global constructor thread.
This variable is set by _RTEMS_tasks_Initialize_user_tasks_body() or _POSIX_Threads_Initialize_user_threads_body().
It is consumed by _Thread_Handler().
Definition at line 53 of file threadhandler.c.
const Thread_Idle_body _Thread_Idle_body |
The idle thread body.
This constant is defined by the application configuration via <rtems/confdefs.h>.
Definition at line 35 of file threadidledefault.c.
const size_t _Thread_Idle_stack_size |
The idle thread stack size in bytes.
This constant is defined by the application configuration via <rtems/confdefs.h>.
char _Thread_Idle_stacks[] |
The idle thread stacks.
Provided by the application via <rtems/confdefs.h>.
const size_t _Thread_Initial_thread_count |
Count of configured threads.
This value is provided via <rtems/confdefs.h>.
const size_t _Thread_Maximum_name_size |
Maximum size of a thread name in characters (including the terminating '\0' character).
This value is provided via <rtems/confdefs.h>.
const size_t _Thread_Maximum_TLS_size |
If this constant is greater than zero, then it defines the maximum thread-local storage size, otherwise the thread-local storage size is defined by the linker depending on the thread-local storage objects used by the application in the statically-linked executable.
This value is provided via <rtems/confdefs.h>.
const size_t _Thread_queue_Heads_size |
Size of the thread queue heads of a particular application.
In SMP configurations, this value is provided via <rtems/confdefs.h>.
void* rtems_ada_self |
Self for the GNU Ada Run-Time