mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-22 06:14:27 +08:00
score: Use Scheduler_Context for SMP scheduler
Use the basic Scheduler_Context for the general SMP scheduler operations to avoid usage of structure offsets to get the specialized context variants.
This commit is contained in:
@@ -314,24 +314,31 @@ extern "C" {
|
||||
*/
|
||||
|
||||
typedef Thread_Control *( *Scheduler_SMP_Get_highest_ready )(
|
||||
Scheduler_SMP_Context *self
|
||||
Scheduler_Context *context
|
||||
);
|
||||
|
||||
typedef void ( *Scheduler_SMP_Extract )(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
);
|
||||
|
||||
typedef void ( *Scheduler_SMP_Insert )(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread_to_insert
|
||||
);
|
||||
|
||||
typedef void ( *Scheduler_SMP_Move )(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread_to_move
|
||||
);
|
||||
|
||||
static inline Scheduler_SMP_Context *_Scheduler_SMP_Get_self(
|
||||
Scheduler_Context *context
|
||||
)
|
||||
{
|
||||
return (Scheduler_SMP_Context *) context;
|
||||
}
|
||||
|
||||
static inline void _Scheduler_SMP_Initialize(
|
||||
Scheduler_SMP_Context *self
|
||||
)
|
||||
@@ -472,7 +479,7 @@ static inline Thread_Control *_Scheduler_SMP_Get_lowest_scheduled(
|
||||
* of scheduled nodes to the set of ready nodes.
|
||||
*/
|
||||
static inline void _Scheduler_SMP_Enqueue_ordered(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread,
|
||||
Chain_Node_order order,
|
||||
Scheduler_SMP_Get_highest_ready get_highest_ready,
|
||||
@@ -482,10 +489,11 @@ static inline void _Scheduler_SMP_Enqueue_ordered(
|
||||
Scheduler_SMP_Move move_from_scheduled_to_ready
|
||||
)
|
||||
{
|
||||
Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
|
||||
Scheduler_SMP_Node *node = _Scheduler_SMP_Node_get( thread );
|
||||
|
||||
if ( node->state == SCHEDULER_SMP_NODE_IN_THE_AIR ) {
|
||||
Thread_Control *highest_ready = ( *get_highest_ready )( self );
|
||||
Thread_Control *highest_ready = ( *get_highest_ready )( &self->Base );
|
||||
|
||||
/*
|
||||
* The thread has been extracted from the scheduled chain. We have to
|
||||
@@ -499,14 +507,15 @@ static inline void _Scheduler_SMP_Enqueue_ordered(
|
||||
) {
|
||||
_Scheduler_SMP_Node_change_state( node, SCHEDULER_SMP_NODE_READY );
|
||||
_Scheduler_SMP_Allocate_processor( self, highest_ready, thread );
|
||||
( *insert_ready )( self, thread );
|
||||
( *move_from_ready_to_scheduled )( self, highest_ready );
|
||||
( *insert_ready )( &self->Base, thread );
|
||||
( *move_from_ready_to_scheduled )( &self->Base, highest_ready );
|
||||
} else {
|
||||
_Scheduler_SMP_Node_change_state( node, SCHEDULER_SMP_NODE_SCHEDULED );
|
||||
( *insert_scheduled )( self, thread );
|
||||
( *insert_scheduled )( &self->Base, thread );
|
||||
}
|
||||
} else {
|
||||
Thread_Control *lowest_scheduled = _Scheduler_SMP_Get_lowest_scheduled( self );
|
||||
Thread_Control *lowest_scheduled =
|
||||
_Scheduler_SMP_Get_lowest_scheduled( self );
|
||||
|
||||
/*
|
||||
* The scheduled chain is empty if nested interrupts change the priority of
|
||||
@@ -524,27 +533,28 @@ static inline void _Scheduler_SMP_Enqueue_ordered(
|
||||
SCHEDULER_SMP_NODE_READY
|
||||
);
|
||||
_Scheduler_SMP_Allocate_processor( self, thread, lowest_scheduled );
|
||||
( *insert_scheduled )( self, thread );
|
||||
( *move_from_scheduled_to_ready )( self, lowest_scheduled );
|
||||
( *insert_scheduled )( &self->Base, thread );
|
||||
( *move_from_scheduled_to_ready )( &self->Base, lowest_scheduled );
|
||||
} else {
|
||||
_Scheduler_SMP_Node_change_state( node, SCHEDULER_SMP_NODE_READY );
|
||||
( *insert_ready )( self, thread );
|
||||
( *insert_ready )( &self->Base, thread );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void _Scheduler_SMP_Schedule_highest_ready(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *victim,
|
||||
Scheduler_SMP_Get_highest_ready get_highest_ready,
|
||||
Scheduler_SMP_Move move_from_ready_to_scheduled
|
||||
)
|
||||
{
|
||||
Thread_Control *highest_ready = ( *get_highest_ready )( self );
|
||||
Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
|
||||
Thread_Control *highest_ready = ( *get_highest_ready )( &self->Base );
|
||||
|
||||
_Scheduler_SMP_Allocate_processor( self, highest_ready, victim );
|
||||
|
||||
( *move_from_ready_to_scheduled )( self, highest_ready );
|
||||
( *move_from_ready_to_scheduled )( &self->Base, highest_ready );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -557,7 +567,7 @@ static inline void _Scheduler_SMP_Schedule_highest_ready(
|
||||
* of ready nodes to the set of scheduled nodes.
|
||||
*/
|
||||
static inline void _Scheduler_SMP_Schedule(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread,
|
||||
Scheduler_SMP_Get_highest_ready get_highest_ready,
|
||||
Scheduler_SMP_Move move_from_ready_to_scheduled
|
||||
@@ -569,7 +579,7 @@ static inline void _Scheduler_SMP_Schedule(
|
||||
_Scheduler_SMP_Node_change_state( node, SCHEDULER_SMP_NODE_BLOCKED );
|
||||
|
||||
_Scheduler_SMP_Schedule_highest_ready(
|
||||
self,
|
||||
context,
|
||||
thread,
|
||||
get_highest_ready,
|
||||
move_from_ready_to_scheduled
|
||||
@@ -578,17 +588,17 @@ static inline void _Scheduler_SMP_Schedule(
|
||||
}
|
||||
|
||||
static inline void _Scheduler_SMP_Block(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread,
|
||||
Scheduler_SMP_Extract extract,
|
||||
Scheduler_SMP_Get_highest_ready get_highest_ready,
|
||||
Scheduler_SMP_Move move_from_ready_to_scheduled
|
||||
)
|
||||
{
|
||||
( *extract )( self, thread );
|
||||
( *extract )( context, thread );
|
||||
|
||||
_Scheduler_SMP_Schedule(
|
||||
self,
|
||||
context,
|
||||
thread,
|
||||
get_highest_ready,
|
||||
move_from_ready_to_scheduled
|
||||
@@ -604,19 +614,21 @@ static inline void _Scheduler_SMP_Block(
|
||||
* ready nodes.
|
||||
*/
|
||||
static inline void _Scheduler_SMP_Extract(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread,
|
||||
Scheduler_SMP_Extract extract
|
||||
)
|
||||
{
|
||||
( *extract )( self, thread );
|
||||
( *extract )( context, thread );
|
||||
}
|
||||
|
||||
static inline void _Scheduler_SMP_Insert_scheduled_lifo(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
)
|
||||
{
|
||||
Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
|
||||
|
||||
_Chain_Insert_ordered_unprotected(
|
||||
&self->Scheduled,
|
||||
&thread->Object.Node,
|
||||
@@ -625,10 +637,12 @@ static inline void _Scheduler_SMP_Insert_scheduled_lifo(
|
||||
}
|
||||
|
||||
static inline void _Scheduler_SMP_Insert_scheduled_fifo(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
)
|
||||
{
|
||||
Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
|
||||
|
||||
_Chain_Insert_ordered_unprotected(
|
||||
&self->Scheduled,
|
||||
&thread->Object.Node,
|
||||
@@ -637,11 +651,12 @@ static inline void _Scheduler_SMP_Insert_scheduled_fifo(
|
||||
}
|
||||
|
||||
static inline void _Scheduler_SMP_Start_idle(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread,
|
||||
Per_CPU_Control *cpu
|
||||
)
|
||||
{
|
||||
Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
|
||||
Scheduler_SMP_Node *node = _Scheduler_SMP_Node_get( thread );
|
||||
|
||||
node->state = SCHEDULER_SMP_NODE_SCHEDULED;
|
||||
|
||||
@@ -36,11 +36,9 @@ _Scheduler_priority_SMP_Get_context( const Scheduler_Control *scheduler )
|
||||
}
|
||||
|
||||
static Scheduler_priority_SMP_Context *
|
||||
_Scheduler_priority_SMP_Self_from_SMP_base( Scheduler_SMP_Context *smp_base )
|
||||
_Scheduler_priority_SMP_Get_self( Scheduler_Context *context )
|
||||
{
|
||||
return (Scheduler_priority_SMP_Context *)
|
||||
( (char *) smp_base
|
||||
- offsetof( Scheduler_priority_SMP_Context, Base ) );
|
||||
return (Scheduler_priority_SMP_Context *) context;
|
||||
}
|
||||
|
||||
static Scheduler_priority_SMP_Node *_Scheduler_priority_SMP_Node_get(
|
||||
@@ -91,11 +89,11 @@ void _Scheduler_priority_SMP_Update(
|
||||
}
|
||||
|
||||
static Thread_Control *_Scheduler_priority_SMP_Get_highest_ready(
|
||||
Scheduler_SMP_Context *smp_base
|
||||
Scheduler_Context *context
|
||||
)
|
||||
{
|
||||
Scheduler_priority_SMP_Context *self =
|
||||
_Scheduler_priority_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_priority_SMP_Get_self( context );
|
||||
Thread_Control *highest_ready = NULL;
|
||||
|
||||
if ( !_Priority_bit_map_Is_empty( &self->Bit_map ) ) {
|
||||
@@ -109,12 +107,12 @@ static Thread_Control *_Scheduler_priority_SMP_Get_highest_ready(
|
||||
}
|
||||
|
||||
static void _Scheduler_priority_SMP_Move_from_scheduled_to_ready(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *scheduled_to_ready
|
||||
)
|
||||
{
|
||||
Scheduler_priority_SMP_Context *self =
|
||||
_Scheduler_priority_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_priority_SMP_Get_self( context );
|
||||
Scheduler_priority_SMP_Node *node =
|
||||
_Scheduler_priority_SMP_Node_get( scheduled_to_ready );
|
||||
|
||||
@@ -127,12 +125,12 @@ static void _Scheduler_priority_SMP_Move_from_scheduled_to_ready(
|
||||
}
|
||||
|
||||
static void _Scheduler_priority_SMP_Move_from_ready_to_scheduled(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *ready_to_scheduled
|
||||
)
|
||||
{
|
||||
Scheduler_priority_SMP_Context *self =
|
||||
_Scheduler_priority_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_priority_SMP_Get_self( context );
|
||||
Scheduler_priority_SMP_Node *node =
|
||||
_Scheduler_priority_SMP_Node_get( ready_to_scheduled );
|
||||
|
||||
@@ -148,12 +146,12 @@ static void _Scheduler_priority_SMP_Move_from_ready_to_scheduled(
|
||||
}
|
||||
|
||||
static void _Scheduler_priority_SMP_Insert_ready_lifo(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
)
|
||||
{
|
||||
Scheduler_priority_SMP_Context *self =
|
||||
_Scheduler_priority_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_priority_SMP_Get_self( context );
|
||||
Scheduler_priority_SMP_Node *node =
|
||||
_Scheduler_priority_SMP_Node_get( thread );
|
||||
|
||||
@@ -165,12 +163,12 @@ static void _Scheduler_priority_SMP_Insert_ready_lifo(
|
||||
}
|
||||
|
||||
static void _Scheduler_priority_SMP_Insert_ready_fifo(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
)
|
||||
{
|
||||
Scheduler_priority_SMP_Context *self =
|
||||
_Scheduler_priority_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_priority_SMP_Get_self( context );
|
||||
Scheduler_priority_SMP_Node *node =
|
||||
_Scheduler_priority_SMP_Node_get( thread );
|
||||
|
||||
@@ -182,12 +180,12 @@ static void _Scheduler_priority_SMP_Insert_ready_fifo(
|
||||
}
|
||||
|
||||
static void _Scheduler_priority_SMP_Do_extract(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
)
|
||||
{
|
||||
Scheduler_priority_SMP_Context *self =
|
||||
_Scheduler_priority_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_priority_SMP_Get_self( context );
|
||||
Scheduler_priority_SMP_Node *node =
|
||||
_Scheduler_priority_SMP_Node_get( thread );
|
||||
|
||||
@@ -219,7 +217,7 @@ void _Scheduler_priority_SMP_Block(
|
||||
_Scheduler_priority_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_SMP_Block(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_priority_SMP_Do_extract,
|
||||
_Scheduler_priority_SMP_Get_highest_ready,
|
||||
@@ -228,7 +226,7 @@ void _Scheduler_priority_SMP_Block(
|
||||
}
|
||||
|
||||
static void _Scheduler_priority_SMP_Enqueue_ordered(
|
||||
Scheduler_SMP_Context *self,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread,
|
||||
Chain_Node_order order,
|
||||
Scheduler_SMP_Insert insert_ready,
|
||||
@@ -236,7 +234,7 @@ static void _Scheduler_priority_SMP_Enqueue_ordered(
|
||||
)
|
||||
{
|
||||
_Scheduler_SMP_Enqueue_ordered(
|
||||
self,
|
||||
context,
|
||||
thread,
|
||||
order,
|
||||
_Scheduler_priority_SMP_Get_highest_ready,
|
||||
@@ -256,7 +254,7 @@ void _Scheduler_priority_SMP_Enqueue_lifo(
|
||||
_Scheduler_priority_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_priority_SMP_Enqueue_ordered(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_simple_Insert_priority_lifo_order,
|
||||
_Scheduler_priority_SMP_Insert_ready_lifo,
|
||||
@@ -273,7 +271,7 @@ void _Scheduler_priority_SMP_Enqueue_fifo(
|
||||
_Scheduler_priority_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_priority_SMP_Enqueue_ordered(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_simple_Insert_priority_fifo_order,
|
||||
_Scheduler_priority_SMP_Insert_ready_fifo,
|
||||
@@ -290,7 +288,7 @@ void _Scheduler_priority_SMP_Extract(
|
||||
_Scheduler_priority_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_SMP_Extract(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_priority_SMP_Do_extract
|
||||
);
|
||||
@@ -320,7 +318,7 @@ void _Scheduler_priority_SMP_Schedule(
|
||||
_Scheduler_priority_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_SMP_Schedule(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_priority_SMP_Get_highest_ready,
|
||||
_Scheduler_priority_SMP_Move_from_ready_to_scheduled
|
||||
@@ -336,5 +334,5 @@ void _Scheduler_priority_SMP_Start_idle(
|
||||
Scheduler_priority_SMP_Context *self =
|
||||
_Scheduler_priority_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_SMP_Start_idle( &self->Base, thread, cpu );
|
||||
_Scheduler_SMP_Start_idle( &self->Base.Base, thread, cpu );
|
||||
}
|
||||
|
||||
@@ -29,10 +29,9 @@ _Scheduler_simple_SMP_Get_context( const Scheduler_Control *scheduler )
|
||||
}
|
||||
|
||||
static Scheduler_simple_SMP_Context *
|
||||
_Scheduler_simple_SMP_Self_from_SMP_base( Scheduler_SMP_Context *smp_base )
|
||||
_Scheduler_simple_SMP_Get_self( Scheduler_Context *context )
|
||||
{
|
||||
return (Scheduler_simple_SMP_Context *)
|
||||
( (char *) smp_base - offsetof( Scheduler_simple_SMP_Context, Base ) );
|
||||
return (Scheduler_simple_SMP_Context *) context;
|
||||
}
|
||||
|
||||
void _Scheduler_simple_SMP_Initialize( const Scheduler_Control *scheduler )
|
||||
@@ -57,11 +56,11 @@ bool _Scheduler_simple_SMP_Allocate(
|
||||
}
|
||||
|
||||
static Thread_Control *_Scheduler_simple_SMP_Get_highest_ready(
|
||||
Scheduler_SMP_Context *smp_base
|
||||
Scheduler_Context *context
|
||||
)
|
||||
{
|
||||
Scheduler_simple_SMP_Context *self =
|
||||
_Scheduler_simple_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_simple_SMP_Get_self( context );
|
||||
Thread_Control *highest_ready = NULL;
|
||||
Chain_Control *ready = &self->Ready;
|
||||
|
||||
@@ -73,12 +72,12 @@ static Thread_Control *_Scheduler_simple_SMP_Get_highest_ready(
|
||||
}
|
||||
|
||||
static void _Scheduler_simple_SMP_Move_from_scheduled_to_ready(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *scheduled_to_ready
|
||||
)
|
||||
{
|
||||
Scheduler_simple_SMP_Context *self =
|
||||
_Scheduler_simple_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_simple_SMP_Get_self( context );
|
||||
|
||||
_Chain_Extract_unprotected( &scheduled_to_ready->Object.Node );
|
||||
_Scheduler_simple_Insert_priority_lifo(
|
||||
@@ -88,24 +87,27 @@ static void _Scheduler_simple_SMP_Move_from_scheduled_to_ready(
|
||||
}
|
||||
|
||||
static void _Scheduler_simple_SMP_Move_from_ready_to_scheduled(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *ready_to_scheduled
|
||||
)
|
||||
{
|
||||
Scheduler_simple_SMP_Context *self =
|
||||
_Scheduler_simple_SMP_Get_self( context );
|
||||
|
||||
_Chain_Extract_unprotected( &ready_to_scheduled->Object.Node );
|
||||
_Scheduler_simple_Insert_priority_fifo(
|
||||
&smp_base->Scheduled,
|
||||
&self->Base.Scheduled,
|
||||
ready_to_scheduled
|
||||
);
|
||||
}
|
||||
|
||||
static void _Scheduler_simple_SMP_Insert_ready_lifo(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
)
|
||||
{
|
||||
Scheduler_simple_SMP_Context *self =
|
||||
_Scheduler_simple_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_simple_SMP_Get_self( context );
|
||||
|
||||
_Chain_Insert_ordered_unprotected(
|
||||
&self->Ready,
|
||||
@@ -115,12 +117,12 @@ static void _Scheduler_simple_SMP_Insert_ready_lifo(
|
||||
}
|
||||
|
||||
static void _Scheduler_simple_SMP_Insert_ready_fifo(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
)
|
||||
{
|
||||
Scheduler_simple_SMP_Context *self =
|
||||
_Scheduler_simple_SMP_Self_from_SMP_base( smp_base );
|
||||
_Scheduler_simple_SMP_Get_self( context );
|
||||
|
||||
_Chain_Insert_ordered_unprotected(
|
||||
&self->Ready,
|
||||
@@ -130,13 +132,13 @@ static void _Scheduler_simple_SMP_Insert_ready_fifo(
|
||||
}
|
||||
|
||||
static void _Scheduler_simple_SMP_Do_extract(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread
|
||||
)
|
||||
{
|
||||
Scheduler_SMP_Node *node = _Scheduler_SMP_Node_get( thread );
|
||||
|
||||
(void) smp_base;
|
||||
(void) context;
|
||||
|
||||
if ( node->state == SCHEDULER_SMP_NODE_SCHEDULED ) {
|
||||
_Scheduler_SMP_Node_change_state( node, SCHEDULER_SMP_NODE_IN_THE_AIR );
|
||||
@@ -156,7 +158,7 @@ void _Scheduler_simple_SMP_Block(
|
||||
_Scheduler_simple_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_SMP_Block(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_simple_SMP_Do_extract,
|
||||
_Scheduler_simple_SMP_Get_highest_ready,
|
||||
@@ -165,7 +167,7 @@ void _Scheduler_simple_SMP_Block(
|
||||
}
|
||||
|
||||
static void _Scheduler_simple_SMP_Enqueue_ordered(
|
||||
Scheduler_SMP_Context *smp_base,
|
||||
Scheduler_Context *context,
|
||||
Thread_Control *thread,
|
||||
Chain_Node_order order,
|
||||
Scheduler_SMP_Insert insert_ready,
|
||||
@@ -173,7 +175,7 @@ static void _Scheduler_simple_SMP_Enqueue_ordered(
|
||||
)
|
||||
{
|
||||
_Scheduler_SMP_Enqueue_ordered(
|
||||
smp_base,
|
||||
context,
|
||||
thread,
|
||||
order,
|
||||
_Scheduler_simple_SMP_Get_highest_ready,
|
||||
@@ -193,7 +195,7 @@ void _Scheduler_simple_SMP_Enqueue_priority_lifo(
|
||||
_Scheduler_simple_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_simple_SMP_Enqueue_ordered(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_simple_Insert_priority_lifo_order,
|
||||
_Scheduler_simple_SMP_Insert_ready_lifo,
|
||||
@@ -210,7 +212,7 @@ void _Scheduler_simple_SMP_Enqueue_priority_fifo(
|
||||
_Scheduler_simple_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_simple_SMP_Enqueue_ordered(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_simple_Insert_priority_fifo_order,
|
||||
_Scheduler_simple_SMP_Insert_ready_fifo,
|
||||
@@ -227,7 +229,7 @@ void _Scheduler_simple_SMP_Extract(
|
||||
_Scheduler_simple_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_SMP_Extract(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_simple_SMP_Do_extract
|
||||
);
|
||||
@@ -257,7 +259,7 @@ void _Scheduler_simple_SMP_Schedule(
|
||||
_Scheduler_simple_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_SMP_Schedule(
|
||||
&self->Base,
|
||||
&self->Base.Base,
|
||||
thread,
|
||||
_Scheduler_simple_SMP_Get_highest_ready,
|
||||
_Scheduler_simple_SMP_Move_from_ready_to_scheduled
|
||||
@@ -273,5 +275,5 @@ void _Scheduler_simple_SMP_Start_idle(
|
||||
Scheduler_simple_SMP_Context *self =
|
||||
_Scheduler_simple_SMP_Get_context( scheduler );
|
||||
|
||||
_Scheduler_SMP_Start_idle( &self->Base, thread, cpu );
|
||||
_Scheduler_SMP_Start_idle( &self->Base.Base, thread, cpu );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user