File indexing completed on 2025-05-11 08:24:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 #ifdef HAVE_CONFIG_H
0040 #include "config.h"
0041 #endif
0042
0043 #include <rtems/score/scheduleredfimpl.h>
0044
0045 Priority_Control _Scheduler_EDF_Map_priority(
0046 const Scheduler_Control *scheduler,
0047 Priority_Control priority
0048 )
0049 {
0050 return SCHEDULER_EDF_PRIO_MSB | SCHEDULER_PRIORITY_MAP( priority );
0051 }
0052
0053 Priority_Control _Scheduler_EDF_Unmap_priority(
0054 const Scheduler_Control *scheduler,
0055 Priority_Control priority
0056 )
0057 {
0058 return SCHEDULER_PRIORITY_UNMAP( priority & ~SCHEDULER_EDF_PRIO_MSB );
0059 }
0060
0061 void _Scheduler_EDF_Release_job(
0062 const Scheduler_Control *scheduler,
0063 Thread_Control *the_thread,
0064 Priority_Node *priority_node,
0065 uint64_t deadline,
0066 Thread_queue_Context *queue_context
0067 )
0068 {
0069 (void) scheduler;
0070
0071 _Thread_Wait_acquire_critical( the_thread, queue_context );
0072
0073
0074
0075
0076
0077
0078
0079 _Priority_Node_set_priority(
0080 priority_node,
0081 SCHEDULER_PRIORITY_MAP( deadline )
0082 );
0083
0084 if ( _Priority_Node_is_active( priority_node ) ) {
0085 _Thread_Priority_changed(
0086 the_thread,
0087 priority_node,
0088 PRIORITY_GROUP_LAST,
0089 queue_context
0090 );
0091 } else {
0092 _Thread_Priority_add( the_thread, priority_node, queue_context );
0093 }
0094
0095 _Thread_Wait_release_critical( the_thread, queue_context );
0096 }
0097
0098 void _Scheduler_EDF_Cancel_job(
0099 const Scheduler_Control *scheduler,
0100 Thread_Control *the_thread,
0101 Priority_Node *priority_node,
0102 Thread_queue_Context *queue_context
0103 )
0104 {
0105 (void) scheduler;
0106
0107 _Thread_Wait_acquire_critical( the_thread, queue_context );
0108
0109 if ( _Priority_Node_is_active( priority_node ) ) {
0110 _Thread_Priority_remove( the_thread, priority_node, queue_context );
0111 _Priority_Node_set_inactive( priority_node );
0112 }
0113
0114 _Thread_Wait_release_critical( the_thread, queue_context );
0115 }