summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-29 08:34:45 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-29 09:03:50 +0200
commit98a57511b687ce1365140481d0c8cf597b6a5d43 (patch)
tree6eda41949a0687730354da414aa01d3c070c1eaf /cpukit
parentscore: Split SMP multicast action module (diff)
downloadrtems-98a57511b687ce1365140481d0c8cf597b6a5d43.tar.bz2
score: Add _Per_CPU_Submit_job()
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/include/rtems/score/percpu.h20
-rw-r--r--cpukit/libtest/t-test-interrupt.c4
-rw-r--r--cpukit/score/src/percpujobs.c9
-rw-r--r--cpukit/score/src/smpmulticastaction.c3
-rw-r--r--cpukit/score/src/smpunicastaction.c3
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 );
}