forked from Imagelibrary/rtems
score: _Scheduler_priority_Ready_queue_initialize
Use priority maximum of scheduler instance. This avoids a potential memory corruption on SMP configurations.
This commit is contained in:
@@ -54,14 +54,15 @@ RTEMS_INLINE_ROUTINE Scheduler_priority_Node *_Scheduler_priority_Thread_get_nod
|
|||||||
* This routine initializes @a ready_queues for priority-based scheduling.
|
* This routine initializes @a ready_queues for priority-based scheduling.
|
||||||
*/
|
*/
|
||||||
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_initialize(
|
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_initialize(
|
||||||
Chain_Control *ready_queues
|
Chain_Control *ready_queues,
|
||||||
|
Priority_Control maximum_priority
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
size_t index;
|
size_t index;
|
||||||
|
|
||||||
/* initialize ready queue structures */
|
for ( index = 0 ; index <= (size_t) maximum_priority ; ++index ) {
|
||||||
for( index=0; index <= PRIORITY_MAXIMUM; index++)
|
_Chain_Initialize_empty( &ready_queues[ index ] );
|
||||||
_Chain_Initialize_empty( &ready_queues[index] );
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,5 +27,8 @@ void _Scheduler_priority_Initialize( const Scheduler_Control *scheduler )
|
|||||||
_Scheduler_priority_Get_context( scheduler );
|
_Scheduler_priority_Get_context( scheduler );
|
||||||
|
|
||||||
_Priority_bit_map_Initialize( &context->Bit_map );
|
_Priority_bit_map_Initialize( &context->Bit_map );
|
||||||
_Scheduler_priority_Ready_queue_initialize( &context->Ready[ 0 ] );
|
_Scheduler_priority_Ready_queue_initialize(
|
||||||
|
&context->Ready[ 0 ],
|
||||||
|
scheduler->maximum_priority
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,10 @@ void _Scheduler_priority_SMP_Initialize( const Scheduler_Control *scheduler )
|
|||||||
|
|
||||||
_Scheduler_SMP_Initialize( &self->Base );
|
_Scheduler_SMP_Initialize( &self->Base );
|
||||||
_Priority_bit_map_Initialize( &self->Bit_map );
|
_Priority_bit_map_Initialize( &self->Bit_map );
|
||||||
_Scheduler_priority_Ready_queue_initialize( &self->Ready[ 0 ] );
|
_Scheduler_priority_Ready_queue_initialize(
|
||||||
|
&self->Ready[ 0 ],
|
||||||
|
scheduler->maximum_priority
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _Scheduler_priority_SMP_Node_initialize(
|
void _Scheduler_priority_SMP_Node_initialize(
|
||||||
|
|||||||
@@ -165,7 +165,10 @@ void _Scheduler_strong_APA_Initialize( const Scheduler_Control *scheduler )
|
|||||||
|
|
||||||
_Scheduler_SMP_Initialize( &self->Base );
|
_Scheduler_SMP_Initialize( &self->Base );
|
||||||
_Priority_bit_map_Initialize( &self->Bit_map );
|
_Priority_bit_map_Initialize( &self->Bit_map );
|
||||||
_Scheduler_priority_Ready_queue_initialize( &self->Ready[ 0 ] );
|
_Scheduler_priority_Ready_queue_initialize(
|
||||||
|
&self->Ready[ 0 ],
|
||||||
|
scheduler->maximum_priority
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _Scheduler_strong_APA_Node_initialize(
|
void _Scheduler_strong_APA_Node_initialize(
|
||||||
|
|||||||
Reference in New Issue
Block a user