21 #ifndef _RTEMS_SCORE_THREAD_H 22 #define _RTEMS_SCORE_THREAD_H 26 #if defined(RTEMS_MULTIPROCESSING) 33 #include <rtems/score/schedulernode.h> 40 #if defined(RTEMS_SMP) 44 struct _pthread_cleanup_context;
73 #define RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE 79 #define RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT 81 #define RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API 83 #if defined(RTEMS_DEBUG) 84 #define RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT 91 typedef void *Thread RTEMS_DEPRECATED;
108 void *( *entry )( uintptr_t argument );
115 void ( *
entry )( Thread_Entry_numeric_type argument );
116 Thread_Entry_numeric_type argument;
124 void *( *entry )(
void *argument );
146 Thread_Entry_idle Idle;
160 THREAD_CPU_BUDGET_ALGORITHM_NONE,
161 THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE,
162 #if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE) 163 THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE,
165 #if defined(RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT) 166 THREAD_CPU_BUDGET_ALGORITHM_CALLOUT
197 #if defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API) 203 #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) 213 #if defined(RTEMS_SMP) 223 THREAD_SCHEDULER_BLOCKED,
232 THREAD_SCHEDULER_SCHEDULED,
239 THREAD_SCHEDULER_READY
240 } Thread_Scheduler_state;
247 #if defined(RTEMS_SMP) 256 Thread_Scheduler_state state;
312 size_t helping_nodes;
346 Processor_mask Affinity;
368 void *mutable_object;
369 const void *immutable_object;
395 #if defined(RTEMS_MULTIPROCESSING) 422 #if defined(RTEMS_SMP) 428 #if defined(RTEMS_SMP) 467 Thread_queue_Gate Tranquilizer;
474 Thread_queue_Link Link;
532 #if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) 534 uint32_t resource_count;
546 #if defined(RTEMS_MULTIPROCESSING) 554 Thread_queue_MP_callout thread_queue_callout;
593 #define THREAD_API_FIRST THREAD_API_RTEMS 596 #define THREAD_API_LAST THREAD_API_POSIX 676 THREAD_LIFE_PROTECTED = 0x1,
677 THREAD_LIFE_RESTARTING = 0x2,
678 THREAD_LIFE_TERMINATING = 0x4,
679 THREAD_LIFE_CHANGE_DEFERRED = 0x8,
680 THREAD_LIFE_DETACHED = 0x10
759 #if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) 761 uint32_t resource_count;
773 #if defined(RTEMS_MULTIPROCESSING) 779 #if defined(RTEMS_SMP) && defined(RTEMS_PROFILING) 788 SMP_lock_Stats Potpourri_stats;
793 #if defined(RTEMS_MULTIPROCESSING) 834 #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) 874 void *extensions[ RTEMS_ZERO_LENGTH_ARRAY ];
880 void rtems_iterate_over_all_threads(
881 rtems_per_thread_routine routine
955 #if defined(RTEMS_SMP) 966 #if defined(RTEMS_SMP) 969 #define _Thread_queue_Heads_size sizeof(Thread_queue_Heads) 998 } Thread_queue_heads;
1006 #define THREAD_INFORMATION_DEFINE_ZERO( name, api, cls ) \ 1007 Thread_Information name##_Information = { \ 1009 _Objects_Build_id( api, cls, 1, 0 ), \ 1015 CHAIN_INITIALIZER_EMPTY( name##_Information.Objects.Inactive ), \ 1019 OBJECTS_INFORMATION_MP( name##_Information.Objects, NULL ), \ 1025 #define THREAD_INFORMATION_DEFINE( name, api, cls, max ) \ 1026 static Objects_Control * \ 1027 name##_Local_table[ _Objects_Maximum_per_allocation( max ) ]; \ 1028 static Thread_Configured_control \ 1029 name##_Objects[ _Objects_Maximum_per_allocation( max ) ]; \ 1030 static Thread_queue_Configured_heads \ 1031 name##_Heads[ _Objects_Maximum_per_allocation( max ) ]; \ 1032 Thread_Information name##_Information = { \ 1034 _Objects_Build_id( api, cls, 1, _Objects_Maximum_per_allocation( max ) ), \ 1035 name##_Local_table, \ 1037 _Objects_Is_unlimited( max ) ? _Objects_Maximum_per_allocation( max ) : 0, \ 1038 sizeof( Thread_Configured_control ), \ 1039 OBJECTS_NO_STRING_NAME, \ 1040 CHAIN_INITIALIZER_EMPTY( name##_Information.Objects.Inactive ), \ 1043 &name##_Objects[ 0 ].Control.Object \ 1044 OBJECTS_INFORMATION_MP( name##_Information.Objects, NULL ) \ 1046 &name##_Heads[ 0 ] \ const size_t _Thread_Control_add_on_count
Thread control add-on count.
Timestamp_Control cpu_time_used
Definition: thread.h:823
Thread_Life_state state
The current thread life state.
Definition: thread.h:696
int64_t Timestamp_Control
Definition: timestamp.h:52
Thread_CPU_budget_algorithm_callout budget_callout
Definition: thread.h:819
Thread_Wait_information Wait
Definition: thread.h:543
Information About the Thread Stack Handler.
Definition: objectdata.h:39
Information About Each Thread's Context.
Data for thread entry with one pointer argument and a pointer return value.
Definition: thread.h:123
bool is_preemptible
Definition: thread.h:798
Thread_Wait_information Wait
Definition: thread.h:770
void(* Thread_Action_handler)(Thread_Control *the_thread, Thread_Action *action, ISR_lock_Context *lock_context)
Thread action handler.
Definition: thread.h:616
The priority node to build up a priority aggregation.
Definition: priority.h:94
Data for idle thread entry.
Definition: thread.h:107
Thread entry information.
Definition: thread.h:131
Thread register context.
Definition: cpu.h:196
uint32_t pending_life_change_requests
The count of pending life change requests.
Definition: thread.h:701
#define ISR_LOCK_MEMBER(_designator)
Defines an ISR lock member.
Definition: isrlock.h:89
Thread_Start_information Start
Definition: thread.h:828
Thread_queue_Control Join_queue
Definition: thread.h:522
The control block used to manage each watchdog timer.
Definition: watchdog.h:87
size_t destination_offset
Offset of the pointer field in Thread_Control referencing an application configuration dependent memo...
Definition: thread.h:893
Helpers for Manipulating Timestamps.
Thread Execution State Information.
Thread_Keys_information Keys
The POSIX Keys information.
Definition: thread.h:848
Chain iterator for dynamic user extensions.
Definition: userextimpl.h:45
Definition: threadq.h:547
Thread_Scheduler_control Scheduler
Scheduler related control.
Definition: thread.h:767
struct _pthread_cleanup_context * last_cleanup_context
LIFO list of POSIX cleanup contexts.
Definition: thread.h:862
Thread_Timer_information Timer
Definition: thread.h:545
Red-black tree node.
Definition: rbtree.h:50
Constants and Structures Needed to Declare a Thread Queue.
Context_Control_fp * fp_context
Definition: thread.h:838
Definition: threadq.h:397
ISR lock control.
Definition: isrlock.h:56
const size_t _Thread_Initial_thread_count
Count of configured threads.
Thread_queue_Heads Thread_queue_Configured_heads
The configured thread queue heads.
Definition: thread.h:958
bool is_fp
Definition: thread.h:800
struct User_extensions_Iterator * last_user_extensions_iterator
LIFO list of user extensions iterators.
Definition: thread.h:867
Thread queue operations.
Definition: threadq.h:512
Object Handler Data Structures.
struct _reent * libc_reent
Definition: thread.h:841
uint64_t Priority_Control
The thread priority control.
Definition: priority.h:66
bool was_created_with_inherited_scheduler
True, if the thread was created with an inherited scheduler (PTHREAD_INHERIT_SCHED), and false otherwise.
Definition: thread.h:806
Thread_Information _Thread_Information
The internal thread objects information.
Thread queue heads.
Definition: threadq.h:355
size_t source_offset
Offset relative to the thread control block begin to an application configuration dependent memory ar...
Definition: thread.h:899
Thread_CPU_budget_algorithms budget_algorithm
Definition: thread.h:817
void(* Thread_CPU_budget_algorithm_callout)(Thread_Control *)
Definition: thread.h:173
const size_t _Thread_Maximum_name_size
Maximum size of a thread name in characters (including the terminating '\0' character).
Control block to manage thread actions.
Definition: thread.h:661
Per CPU Core Structure.
Definition: percpu.h:290
Thread control add-on.
Definition: thread.h:887
Thread action.
Definition: thread.h:636
Objects_Control Object
Definition: thread.h:730
Thread_Life_state
Thread life states.
Definition: thread.h:675
Specification for the Packet Handler.
States_Control current_state
Definition: thread.h:752
Constants and Structures Associated with Watchdog Timers.
SPARC basic context.
Definition: cpu.h:242
Definition: intercom.c:74
void * exit_value
The thread exit value.
Definition: thread.h:711
#define _Thread_queue_Heads_size
Size of the thread queue heads of a particular application.
Definition: thread.h:969
uint32_t States_Control
Definition: states.h:41
States_Control current_state
Definition: thread.h:525
Data for thread entry with one numeric argument and no return value.
Definition: thread.h:114
Thread scheduler control.
Definition: thread.h:246
CPU_Uint32ptr Thread_Entry_numeric_type
Type of the numeric argument of a thread entry function with at least one numeric argument...
Definition: thread.h:102
struct Thread_Configured_control Thread_Configured_control
The configured thread control block.
Definition: thread.h:947
Priority_Node Real_priority
The base priority of this thread in its home scheduler instance.
Definition: thread.h:530
Thread_queue_Control Join_queue
Thread queue for thread join operations and multi-purpose lock.
Definition: thread.h:749
Scheduler control.
Definition: scheduler.h:266
Scheduler node for per-thread data.
Definition: schedulernode.h:65
Objects_Control Object
Definition: thread.h:517
uintptr_t CPU_Uint32ptr
Definition: cpu.h:668
Thread_APIs
Definition: thread.h:585
Scheduler_Node * nodes
The scheduler nodes of this thread.
Definition: thread.h:354
Thread life control.
Definition: thread.h:686
Local ISR lock context for acquire and release pairs.
Definition: isrlock.h:65
Definition: mmu-config.c:39
Thread_Action Action
Thread life action used to react upon thread restart and delete requests.
Definition: thread.h:691
uint32_t Objects_Id
Definition: object.h:75
Context_Control Registers
Definition: thread.h:833
Thread_Life_control Life
Thread life-cycle control.
Definition: thread.h:855
Priority_Node Real_priority
The base priority of this thread in its home scheduler instance.
Definition: thread.h:757
const Thread_Control_add_on _Thread_Control_add_ons[]
Thread control add-ons.
Thread_Scheduler_control Scheduler
Scheduler related control.
Definition: thread.h:540
uint32_t cpu_time_budget
Definition: thread.h:812
Thread_CPU_budget_algorithms
Definition: thread.h:159
#define THREAD_API_LAST
Definition: thread.h:596
Thread_Timer_information Timer
Definition: thread.h:772
The freechain control.
Definition: freechain.h:46
unsigned int Thread_Wait_flags
This type is able to contain several flags used to control the wait class and state of a thread...
Definition: thread.h:386
bool is_idle
Definition: thread.h:792