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:
Sebastian Huber
2016-06-14 10:12:34 +02:00
parent 3eda7e5493
commit 042072bfdf
4 changed files with 17 additions and 7 deletions

View File

@@ -54,15 +54,16 @@ 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 ] );
} }
}
/** /**
* @brief Enqueues a node on the specified ready queue. * @brief Enqueues a node on the specified ready queue.

View File

@@ -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
);
} }

View File

@@ -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(

View File

@@ -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(