score: Add _Per_CPU_Submit_job()

This commit is contained in:
Sebastian Huber
2021-07-29 09:03:50 +02:00
parent 59168e2ae3
commit 98a57511b6
7 changed files with 30 additions and 22 deletions
+16 -4
View File
@@ -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
@@ -853,6 +852,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.
*
+1 -3
View File
@@ -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
+8 -1
View File
@@ -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
+1 -2
View File
@@ -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 );
}
}
}
+1 -2
View File
@@ -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 );
}
+1 -6
View File
@@ -136,12 +136,7 @@ static rtems_status_code test_driver_init(
if (cpu_count > 1) {
Per_CPU_Control *per_cpu = _Per_CPU_Get_by_index( other_cpu );
_Per_CPU_Add_job(per_cpu, &shutdown_job);
_Atomic_Fetch_or_ulong(
&per_cpu->message,
SMP_MESSAGE_PERFORM_JOBS,
ATOMIC_ORDER_RELEASE
);
_Per_CPU_Submit_job(per_cpu, &shutdown_job);
} else {
TEST_END();
exit(0);
+2 -4
View File
@@ -121,8 +121,7 @@ static void test_send_message_while_processing_a_message(
Per_CPU_Control *cpu_self;
ctx->jobs[0][0].context = &barrier_0_job_context;
_Per_CPU_Add_job(_Per_CPU_Get_by_index(cpu_index), &ctx->jobs[0][0]);
_SMP_Send_message(cpu_index, SMP_MESSAGE_PERFORM_JOBS);
_Per_CPU_Submit_job(_Per_CPU_Get_by_index(cpu_index), &ctx->jobs[0][0]);
/* (A) */
barrier(ctx, bs);
@@ -196,8 +195,7 @@ static void test_send_message_flood(
ctx->jobs[cpu_index][0].context = &counter_0_job_context;
ctx->jobs[cpu_index][1].context = &counter_1_job_context;
_Per_CPU_Add_job(cpu, &ctx->jobs[cpu_index][0]);
_SMP_Send_message(cpu_index, SMP_MESSAGE_PERFORM_JOBS);
_Per_CPU_Submit_job(cpu, &ctx->jobs[cpu_index][0]);
}
for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) {