diff options
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/include/rtems/score/percpu.h | 20 | ||||
-rw-r--r-- | cpukit/libtest/t-test-interrupt.c | 4 | ||||
-rw-r--r-- | cpukit/score/src/percpujobs.c | 9 | ||||
-rw-r--r-- | cpukit/score/src/smpmulticastaction.c | 3 | ||||
-rw-r--r-- | cpukit/score/src/smpunicastaction.c | 3 |
5 files changed, 27 insertions, 12 deletions
diff --git a/cpukit/include/rtems/score/percpu.h b/cpukit/include/rtems/score/percpu.h index f72339620d..6081653a86 100644 --- a/cpukit/include/rtems/score/percpu.h +++ b/cpukit/include/rtems/score/percpu.h @@ -841,11 +841,10 @@ bool _Per_CPU_State_wait_for_non_initial_state( void _Per_CPU_Perform_jobs( Per_CPU_Control *cpu ); /** - * @brief Adds the job to the tail of the processing list of the specified - * processor. + * @brief Adds the job to the tail of the processing list of the processor. * - * This function does not send the SMP_MESSAGE_PERFORM_JOBS message the - * specified processor. + * This function does not send the ::SMP_MESSAGE_PERFORM_JOBS message to the + * processor, see also _Per_CPU_Submit_job(). * * @param[in, out] cpu The processor to add the job. * @param[in, out] job The job. The Per_CPU_Job::context member must be @@ -854,6 +853,19 @@ void _Per_CPU_Perform_jobs( Per_CPU_Control *cpu ); void _Per_CPU_Add_job( Per_CPU_Control *cpu, Per_CPU_Job *job ); /** + * @brief Adds the job to the tail of the processing list of the processor and + * notifies the processor to process the job. + * + * This function sends the ::SMP_MESSAGE_PERFORM_JOBS message to the processor + * if it is in the ::PER_CPU_STATE_UP state, see also _Per_CPU_Add_job(). + * + * @param[in, out] cpu The processor to add the job. + * @param[in, out] job The job. The Per_CPU_Job::context member must be + * initialized by the caller. + */ +void _Per_CPU_Submit_job( Per_CPU_Control *cpu, Per_CPU_Job *job ); + +/** * @brief Waits for the job carried out by the specified processor. * * This function may result in an SMP_FATAL_WRONG_CPU_STATE_TO_PERFORM_JOBS diff --git a/cpukit/libtest/t-test-interrupt.c b/cpukit/libtest/t-test-interrupt.c index cbdc603802..5d83b7876a 100644 --- a/cpukit/libtest/t-test-interrupt.c +++ b/cpukit/libtest/t-test-interrupt.c @@ -305,9 +305,7 @@ T_interrupt_thread_switch(Thread_Control *executing, Thread_Control *heir) * context of the inter-processor interrupt. */ cpu_self = _Per_CPU_Get(); - _Per_CPU_Add_job(cpu_self, &ctx->job); - _SMP_Send_message(_Per_CPU_Get_index(cpu_self), - SMP_MESSAGE_PERFORM_JOBS); + _Per_CPU_Submit_job(cpu_self, &ctx->job); #else (*ctx->blocked)(ctx->arg); #endif diff --git a/cpukit/score/src/percpujobs.c b/cpukit/score/src/percpujobs.c index 4ce96dc738..5aa2f8eb8b 100644 --- a/cpukit/score/src/percpujobs.c +++ b/cpukit/score/src/percpujobs.c @@ -6,7 +6,8 @@ * @ingroup RTEMSScorePerCPU * * @brief This source file contains the implementation of _Per_CPU_Add_job(), - * _Per_CPU_Perform_jobs(), and _Per_CPU_Wait_for_job(). + * _Per_CPU_Perform_jobs(), _Per_CPU_Submit_job(), and + * _Per_CPU_Wait_for_job(). */ /* @@ -90,6 +91,12 @@ void _Per_CPU_Add_job( Per_CPU_Control *cpu, Per_CPU_Job *job ) _Per_CPU_Jobs_release_and_ISR_enable( cpu, &lock_context ); } +void _Per_CPU_Submit_job( Per_CPU_Control *cpu, Per_CPU_Job *job ) +{ + _Per_CPU_Add_job( cpu, job ); + _SMP_Send_message( _Per_CPU_Get_index( cpu ), SMP_MESSAGE_PERFORM_JOBS ); +} + void _Per_CPU_Wait_for_job( const Per_CPU_Control *cpu, const Per_CPU_Job *job diff --git a/cpukit/score/src/smpmulticastaction.c b/cpukit/score/src/smpmulticastaction.c index 6b9e9a30db..b4068c23c9 100644 --- a/cpukit/score/src/smpmulticastaction.c +++ b/cpukit/score/src/smpmulticastaction.c @@ -63,8 +63,7 @@ static void _SMP_Issue_action_jobs( job->context = &jobs->Context; cpu = _Per_CPU_Get_by_index( cpu_index ); - _Per_CPU_Add_job( cpu, job ); - _SMP_Send_message( cpu_index, SMP_MESSAGE_PERFORM_JOBS ); + _Per_CPU_Submit_job( cpu, job ); } } } diff --git a/cpukit/score/src/smpunicastaction.c b/cpukit/score/src/smpunicastaction.c index bc481eb4a4..fa5b5bb7c6 100644 --- a/cpukit/score/src/smpunicastaction.c +++ b/cpukit/score/src/smpunicastaction.c @@ -54,7 +54,6 @@ void _SMP_Unicast_action( context.arg = arg; job.context = &context; cpu = _Per_CPU_Get_by_index( cpu_index ); - _Per_CPU_Add_job( cpu, &job ); - _SMP_Send_message( cpu_index, SMP_MESSAGE_PERFORM_JOBS ); + _Per_CPU_Submit_job( cpu, &job ); _Per_CPU_Wait_for_job( cpu, &job ); } |