RTEMS  5.0.0
Data Structures | Macros | Typedefs | Functions | Variables
threadimpl.h File Reference

Inlined Routines from the Thread Handler. More...

#include <rtems/score/thread.h>
#include <rtems/score/assert.h>
#include <rtems/score/chainimpl.h>
#include <rtems/score/interr.h>
#include <rtems/score/isr.h>
#include <rtems/score/objectimpl.h>
#include <rtems/score/schedulernodeimpl.h>
#include <rtems/score/statesimpl.h>
#include <rtems/score/status.h>
#include <rtems/score/sysstate.h>
#include <rtems/score/timestampimpl.h>
#include <rtems/score/threadqimpl.h>
#include <rtems/score/todimpl.h>
#include <rtems/score/watchdogimpl.h>
#include <rtems/config.h>

Go to the source code of this file.

Data Structures

struct  Thread_Close_context
 

Macros

#define THREAD_STATUS_PROXY_BLOCKING   0x1111111
 
#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.
 

Typedefs

typedef bool(* Thread_Visitor) (Thread_Control *the_thread, void *arg)
 

Functions

void _Thread_Iterate (Thread_Visitor visitor, void *arg)
 
void _Thread_Initialize_information (Thread_Information *information)
 
void _Thread_Handler_initialization (void)
 Initialize thread handler. More...
 
void _Thread_Create_idle (void)
 Create idle thread. More...
 
void _Thread_Start_multitasking (void) RTEMS_NO_RETURN
 Start thread multitasking. More...
 
size_t _Thread_Stack_Allocate (Thread_Control *the_thread, size_t stack_size)
 Allocate the requested stack space for the thread. More...
 
void _Thread_Stack_Free (Thread_Control *the_thread)
 Deallocate thread stack. More...
 
bool _Thread_Initialize (Thread_Information *information, Thread_Control *the_thread, const struct _Scheduler_Control *scheduler, void *stack_area, size_t stack_size, bool is_fp, Priority_Control priority, bool is_preemptible, Thread_CPU_budget_algorithms budget_algorithm, Thread_CPU_budget_algorithm_callout budget_callout, uint32_t isr_level, Objects_Name name)
 Initialize thread. More...
 
bool _Thread_Start (Thread_Control *the_thread, const Thread_Entry_information *entry, ISR_lock_Context *lock_context)
 Initializes thread and executes it. More...
 
void _Thread_Restart_self (Thread_Control *executing, const Thread_Entry_information *entry, ISR_lock_Context *lock_context) RTEMS_NO_RETURN
 
bool _Thread_Restart_other (Thread_Control *the_thread, const Thread_Entry_information *entry, ISR_lock_Context *lock_context)
 
void _Thread_Yield (Thread_Control *executing)
 
Thread_Life_state _Thread_Change_life (Thread_Life_state clear, Thread_Life_state set, Thread_Life_state ignore)
 
Thread_Life_state _Thread_Set_life_protection (Thread_Life_state state)
 
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)
 
void _Thread_Join (Thread_Control *the_thread, States_Control waiting_for_join, Thread_Control *executing, Thread_queue_Context *queue_context)
 
void _Thread_Cancel (Thread_Control *the_thread, Thread_Control *executing, void *exit_value)
 
void _Thread_Close (Thread_Control *the_thread, Thread_Control *executing, Thread_Close_context *context)
 Closes the thread. More...
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_ready (const Thread_Control *the_thread)
 
States_Control _Thread_Clear_state_locked (Thread_Control *the_thread, States_Control state)
 
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)
 
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)
 
void _Thread_Entry_adaptor_numeric (Thread_Control *executing)
 
void _Thread_Entry_adaptor_pointer (Thread_Control *executing)
 
void _Thread_Handler (void)
 Wrapper function for all threads. More...
 
RTEMS_INLINE_ROUTINE void _Thread_State_acquire_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context)
 
RTEMS_INLINE_ROUTINE void _Thread_State_acquire (Thread_Control *the_thread, ISR_lock_Context *lock_context)
 
RTEMS_INLINE_ROUTINE Thread_Control_Thread_State_acquire_for_executing (ISR_lock_Context *lock_context)
 
RTEMS_INLINE_ROUTINE void _Thread_State_release_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context)
 
RTEMS_INLINE_ROUTINE void _Thread_State_release (Thread_Control *the_thread, ISR_lock_Context *lock_context)
 
void _Thread_Priority_perform_actions (Thread_Control *start_of_path, Thread_queue_Context *queue_context)
 Performs the priority actions specified by the thread queue context along the thread queue path. 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...
 
RTEMS_INLINE_ROUTINE 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)
 Adds a priority node to the corresponding thread priority aggregation. More...
 
RTEMS_INLINE_ROUTINE bool _Thread_Priority_less_than (Priority_Control left, Priority_Control right)
 Returns true if the left thread priority is less than the right thread priority in the intuitive sense of priority and false otherwise.
 
RTEMS_INLINE_ROUTINE 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.
 
RTEMS_INLINE_ROUTINE Objects_Information_Thread_Get_objects_information (Objects_Id id)
 
Thread_Control_Thread_Get (Objects_Id id, ISR_lock_Context *lock_context)
 Gets a thread by its identifier. More...
 
RTEMS_INLINE_ROUTINE Per_CPU_Control_Thread_Get_CPU (const Thread_Control *thread)
 
RTEMS_INLINE_ROUTINE void _Thread_Set_CPU (Thread_Control *thread, Per_CPU_Control *cpu)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_executing (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_heir (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE void _Thread_Unblock (Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_allocated_fp (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE void _Thread_Save_fp (Thread_Control *executing)
 
RTEMS_INLINE_ROUTINE void _Thread_Restore_fp (Thread_Control *executing)
 
RTEMS_INLINE_ROUTINE void _Thread_Deallocate_fp (void)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_context_switch_necessary (void)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_null (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_proxy_blocking (uint32_t code)
 Is proxy blocking. More...
 
RTEMS_INLINE_ROUTINE uint32_t _Thread_Get_maximum_internal_threads (void)
 
RTEMS_INLINE_ROUTINE Thread_Control_Thread_Internal_allocate (void)
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE void _Thread_Update_CPU_time_used (Thread_Control *the_thread, Per_CPU_Control *cpu)
 
void _Thread_Get_CPU_time_used (Thread_Control *the_thread, Timestamp_Control *cpu_time_used)
 
RTEMS_INLINE_ROUTINE void _Thread_Action_control_initialize (Thread_Action_control *action_control)
 
RTEMS_INLINE_ROUTINE void _Thread_Action_initialize (Thread_Action *action)
 
RTEMS_INLINE_ROUTINE void _Thread_Add_post_switch_action (Thread_Control *the_thread, Thread_Action *action, Thread_Action_handler handler)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_life_restarting (Thread_Life_state life_state)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_life_terminating (Thread_Life_state life_state)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_life_change_allowed (Thread_Life_state life_state)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_life_changing (Thread_Life_state life_state)
 
RTEMS_INLINE_ROUTINE bool _Thread_Is_joinable (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE void _Thread_Resource_count_increment (Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE void _Thread_Resource_count_decrement (Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE const Scheduler_Control_Thread_Scheduler_get_home (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE Scheduler_Node_Thread_Scheduler_get_home_node (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE Scheduler_Node_Thread_Scheduler_get_node_by_index (const Thread_Control *the_thread, size_t scheduler_index)
 
RTEMS_INLINE_ROUTINE Priority_Control _Thread_Get_priority (const Thread_Control *the_thread)
 Returns the priority of the thread. More...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE void _Thread_Wait_acquire_default (Thread_Control *the_thread, ISR_lock_Context *lock_context)
 Acquires the thread wait default lock and disables interrupts. More...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE void _Thread_Wait_acquire (Thread_Control *the_thread, Thread_queue_Context *queue_context)
 Acquires the thread wait default lock and disables interrupts. More...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE void _Thread_Wait_claim (Thread_Control *the_thread, Thread_queue_Queue *queue)
 Claims the thread wait queue. More...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE void _Thread_Wait_remove_request (Thread_Control *the_thread, Thread_queue_Lock_context *queue_lock_context)
 Removes a thread wait lock request. More...
 
RTEMS_INLINE_ROUTINE void _Thread_Wait_restore_default (Thread_Control *the_thread)
 Restores the default thread wait queue and operations. More...
 
RTEMS_INLINE_ROUTINE void _Thread_Wait_tranquilize (Thread_Control *the_thread)
 Tranquilizes the thread after a wait on a thread queue. More...
 
RTEMS_INLINE_ROUTINE void _Thread_Wait_cancel (Thread_Control *the_thread, Thread_queue_Context *queue_context)
 Cancels a thread wait on a thread queue. More...
 
RTEMS_INLINE_ROUTINE void _Thread_Wait_flags_set (Thread_Control *the_thread, Thread_Wait_flags flags)
 
RTEMS_INLINE_ROUTINE Thread_Wait_flags _Thread_Wait_flags_get (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE Thread_Wait_flags _Thread_Wait_flags_get_acquire (const Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE 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...
 
RTEMS_INLINE_ROUTINE Status_Control _Thread_Wait_get_status (const Thread_Control *the_thread)
 
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...
 
RTEMS_INLINE_ROUTINE void _Thread_Timer_initialize (Thread_Timer_information *timer, Per_CPU_Control *cpu)
 
RTEMS_INLINE_ROUTINE void _Thread_Add_timeout_ticks (Thread_Control *the_thread, Per_CPU_Control *cpu, Watchdog_Interval ticks)
 
RTEMS_INLINE_ROUTINE void _Thread_Timer_insert_realtime (Thread_Control *the_thread, Per_CPU_Control *cpu, Watchdog_Service_routine_entry routine, uint64_t expire)
 
RTEMS_INLINE_ROUTINE void _Thread_Timer_remove (Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE void _Thread_Remove_timer_and_unblock (Thread_Control *the_thread, Thread_queue_Queue *queue)
 
Status_Control _Thread_Set_name (Thread_Control *the_thread, const char *name)
 
size_t _Thread_Get_name (const Thread_Control *the_thread, char *buffer, size_t buffer_size)
 
RTEMS_INLINE_ROUTINE void _Thread_Pin (Thread_Control *executing)
 
RTEMS_INLINE_ROUTINE void _Thread_Unpin (Thread_Control *executing, Per_CPU_Control *cpu_self)
 

Variables

void * rtems_ada_self
 
Objects_Id _Thread_Global_constructor
 Object identifier of the global constructor thread. More...
 
Thread_Control_Thread_Allocated_fp
 

Detailed Description

Inlined Routines from the Thread Handler.

This file contains the macro implementation of the inlined routines from the Thread handler.