RTEMS: cpukit/include/rtems/score/threadimpl.h File Reference

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Functions | Variables
threadimpl.h File Reference
Internal » SuperCore » Thread Handler

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_Configuration
| The configuration of a new thread to initialize. More...
struct | Thread_Close_context

## Macros
#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.
#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.
#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)
| Calls the visitor with all threads and the given argument until it is done.
void | _Thread_Initialize_information (Thread_Information *information)
| Initializes the thread information.
void | _Thread_Handler_initialization (void)
| Initializes thread handler.
void | _Thread_Create_idle (void)
| Creates idle thread.
void | _Thread_Start_multitasking (void) RTEMS_NO_RETURN
| Starts thread multitasking.
bool | _Thread_Initialize (Thread_Information *information, Thread_Control *the_thread, const Thread_Configuration *config)
| Initializes thread.
bool | _Thread_Start (Thread_Control *the_thread, const Thread_Entry_information *entry, ISR_lock_Context *lock_context)
| Initializes thread and executes it.
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.
bool | _Thread_Restart_other (Thread_Control *the_thread, const Thread_Entry_information *entry, ISR_lock_Context *lock_context)
| Restarts the thread.
void | _Thread_Yield (Thread_Control *executing)
| Yields the currently executing thread.
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.
Thread_Life_state | _Thread_Set_life_protection (Thread_Life_state state)
| Set the thread to life protected.
void | _Thread_Kill_zombies (void)
| Kills all zombie threads in the system.
void | _Thread_Exit (Thread_Control *executing, Thread_Life_state set, void *exit_value)
| Exits the currently executing thread.
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.
void | _Thread_Cancel (Thread_Control *the_thread, Thread_Control *executing, void *exit_value)
| Cancels the thread.
void | _Thread_Close (Thread_Control *the_thread, Thread_Control *executing, Thread_Close_context *context)
| Closes the thread.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_ready (const Thread_Control *the_thread)
| Checks if the thread is ready.
States_Control | _Thread_Clear_state_locked (Thread_Control *the_thread, States_Control state)
| Clears the specified thread state without locking the lock context.
States_Control | _Thread_Clear_state (Thread_Control *the_thread, States_Control state)
| Clears the specified thread state.
States_Control | _Thread_Set_state_locked (Thread_Control *the_thread, States_Control state)
| Sets the specified thread state without locking the lock context.
States_Control | _Thread_Set_state (Thread_Control *the_thread, States_Control state)
| Sets the specified thread state.
void | _Thread_Load_environment (Thread_Control *the_thread)
| Initializes enviroment for a thread.
void | _Thread_Entry_adaptor_idle (Thread_Control *executing)
| Calls the start kinds idle entry of the thread.
void | _Thread_Entry_adaptor_numeric (Thread_Control *executing)
| Calls the start kinds numeric entry of the thread.
void | _Thread_Entry_adaptor_pointer (Thread_Control *executing)
| Calls the start kinds pointer entry of the thread.
void | _Thread_Handler (void)
| Wrapper function for all threads.
RTEMS_INLINE_ROUTINE void | _Thread_State_acquire_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context)
| Acquires the lock context in a critical section.
RTEMS_INLINE_ROUTINE void | _Thread_State_acquire (Thread_Control *the_thread, ISR_lock_Context *lock_context)
| Disables interrupts and acquires the lock_context.
RTEMS_INLINE_ROUTINE Thread_Control * | _Thread_State_acquire_for_executing (ISR_lock_Context *lock_context)
| Disables interrupts and acquires the lock context for the currently executing thread.
RTEMS_INLINE_ROUTINE void | _Thread_State_release_critical (Thread_Control *the_thread, ISR_lock_Context *lock_context)
| Release the lock context in a critical section.
RTEMS_INLINE_ROUTINE void | _Thread_State_release (Thread_Control *the_thread, ISR_lock_Context *lock_context)
| Releases the lock context and enables interrupts.
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.
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.
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.
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.
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.
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.
void | _Thread_Priority_update (Thread_queue_Context *queue_context)
| Updates the priority of all threads in the set.
RTEMS_INLINE_ROUTINE bool | _Thread_Priority_less_than (Priority_Control left, Priority_Control right)
| Updates the priority of the thread and changes it sticky level.
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)
| Gets object information for the object id.
Thread_Control * | _Thread_Get (Objects_Id id, ISR_lock_Context *lock_context)
| Gets a thread by its identifier.
RTEMS_INLINE_ROUTINE Per_CPU_Control * | _Thread_Get_CPU (const Thread_Control *thread)
| Gets the cpu of the thread's scheduler.
RTEMS_INLINE_ROUTINE void | _Thread_Set_CPU (Thread_Control *thread, Per_CPU_Control *cpu)
| Sets the cpu of the thread's scheduler.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_executing (const Thread_Control *the_thread)
| Checks if the thread is the currently executing thread.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_heir (const Thread_Control *the_thread)
| Checks if the thread is the heir.
RTEMS_INLINE_ROUTINE void | _Thread_Unblock (Thread_Control *the_thread)
| Unblocks the thread.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_allocated_fp (const Thread_Control *the_thread)
| Checks if the floating point context of the thread is currently loaded in the floating point unit.
RTEMS_INLINE_ROUTINE void | _Thread_Save_fp (Thread_Control *executing)
| Saves the executing thread's floating point area.
RTEMS_INLINE_ROUTINE void | _Thread_Restore_fp (Thread_Control *executing)
| Restores the executing thread's floating point area.
RTEMS_INLINE_ROUTINE void | _Thread_Deallocate_fp (void)
| Deallocates the currently loaded floating point context.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_context_switch_necessary (void)
| Checks if dispatching is disabled.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_null (const Thread_Control *the_thread)
| Checks if the thread is NULL.
RTEMS_INLINE_ROUTINE uint32_t | _Thread_Get_maximum_internal_threads (void)
| Gets the maximum number of internal threads.
RTEMS_INLINE_ROUTINE Thread_Control * | _Thread_Internal_allocate (void)
| Allocates an internal thread and returns it.
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.
RTEMS_INLINE_ROUTINE void | _Thread_Update_CPU_time_used (Thread_Control *the_thread, Per_CPU_Control *cpu)
| Updates the cpu time used of the thread.
void | _Thread_Get_CPU_time_used (Thread_Control *the_thread, Timestamp_Control *cpu_time_used)
| Updates the used cpu time for the heir and dispatches a new heir.
RTEMS_INLINE_ROUTINE void | _Thread_Action_control_initialize (Thread_Action_control *action_control)
| Initializes the control chain of the action control.
RTEMS_INLINE_ROUTINE void | _Thread_Action_initialize (Thread_Action *action)
| Initializes the Thread action.
RTEMS_INLINE_ROUTINE 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.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_life_restarting (Thread_Life_state life_state)
| Checks if the thread life state is restarting.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_life_terminating (Thread_Life_state life_state)
| Checks if the thread life state is terminating.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_life_change_allowed (Thread_Life_state life_state)
| Checks if the thread life state allos life change.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_life_changing (Thread_Life_state life_state)
| Checks if the thread life state is life changing.
RTEMS_INLINE_ROUTINE bool | _Thread_Is_joinable (const Thread_Control *the_thread)
| Checks if the thread is joinable.
RTEMS_INLINE_ROUTINE void | _Thread_Resource_count_increment (Thread_Control *the_thread)
| Increments the thread's resource count.
RTEMS_INLINE_ROUTINE void | _Thread_Resource_count_decrement (Thread_Control *the_thread)
| Decrements the thread's resource count.
RTEMS_INLINE_ROUTINE const Scheduler_Control * | _Thread_Scheduler_get_home (const Thread_Control *the_thread)
| Gets the home scheduler of the thread.
RTEMS_INLINE_ROUTINE Scheduler_Node * | _Thread_Scheduler_get_home_node (const Thread_Control *the_thread)
| Gets the scheduler's home node.
RTEMS_INLINE_ROUTINE 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.
RTEMS_INLINE_ROUTINE Priority_Control | _Thread_Get_priority (const Thread_Control *the_thread)
| Returns the priority of the thread.
RTEMS_INLINE_ROUTINE Priority_Control | _Thread_Get_unmapped_priority (const Thread_Control *the_thread)
| Returns the unmapped priority of the thread.
RTEMS_INLINE_ROUTINE Priority_Control | _Thread_Get_unmapped_real_priority (const Thread_Control *the_thread)
| Returns the unmapped real priority of the thread.
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).
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.
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.
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).
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.
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).
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.
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).
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.
RTEMS_INLINE_ROUTINE void | _Thread_Wait_claim (Thread_Control *the_thread, Thread_queue_Queue *queue)
| Claims the thread wait queue.
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.
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.
RTEMS_INLINE_ROUTINE void | _Thread_Wait_restore_default (Thread_Control *the_thread)
| Restores the default thread wait queue and operations.
RTEMS_INLINE_ROUTINE void | _Thread_Wait_tranquilize (Thread_Control *the_thread)
| Tranquilizes the thread after a wait on a thread queue.
RTEMS_INLINE_ROUTINE void | _Thread_Wait_cancel (Thread_Control *the_thread, Thread_queue_Context *queue_context)
| Cancels a thread wait on a thread queue.
RTEMS_INLINE_ROUTINE void | _Thread_Wait_flags_set (Thread_Control *the_thread, Thread_Wait_flags flags)
| Sets the thread's wait flags.
RTEMS_INLINE_ROUTINE Thread_Wait_flags | _Thread_Wait_flags_get (const Thread_Control *the_thread)
| Gets the thread's wait flags according to the ATOMIC_ORDER_RELAXED.
RTEMS_INLINE_ROUTINE 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.
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.
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.
Objects_Id | _Thread_Wait_get_id (const Thread_Control *the_thread)
| Returns the object identifier of the object containing the current thread wait queue.
RTEMS_INLINE_ROUTINE Status_Control | _Thread_Wait_get_status (const Thread_Control *the_thread)
| Get the status of the wait return code of the thread.
void | _Thread_Continue (Thread_Control *the_thread, Status_Control status)
| Cancels a blocking operation so that the thread can continue its execution.
void | _Thread_Timeout (Watchdog_Control *the_watchdog)
| General purpose thread wait timeout.
RTEMS_INLINE_ROUTINE void | _Thread_Timer_initialize (Thread_Timer_information *timer, Per_CPU_Control *cpu)
| Initializes the thread timer.
RTEMS_INLINE_ROUTINE void | _Thread_Add_timeout_ticks (Thread_Control *the_thread, Per_CPU_Control *cpu, Watchdog_Interval ticks)
| Adds timeout ticks to the thread.
RTEMS_INLINE_ROUTINE 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.
RTEMS_INLINE_ROUTINE void | _Thread_Timer_remove (Thread_Control *the_thread)
| Remove the watchdog timer from the thread.
RTEMS_INLINE_ROUTINE 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.
Status_Control | _Thread_Set_name (Thread_Control *the_thread, const char *name)
| Sets the name of the thread.
size_t | _Thread_Get_name (const Thread_Control *the_thread, char *buffer, size_t buffer_size)
| Gets the name of the thread.
RTEMS_INLINE_ROUTINE void | _Thread_Pin (Thread_Control *executing)
| Pin the executing thread.
RTEMS_INLINE_ROUTINE void | _Thread_Unpin (Thread_Control *executing, Per_CPU_Control *cpu_self)
| Unpins the thread.

## Variables
void * | rtems_ada_self
Objects_Id | _Thread_Global_constructor
| Object identifier of the global constructor thread.
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.