[rtems commit] score: Change _SMP_Send_message() parameter type

Sebastian Huber sebh at rtems.org
Thu Jul 29 07:18:38 UTC 2021


Module:    rtems
Branch:    master
Commit:    6c39df7e73356ac18201acf6fe36592a97d2677c
Changeset: http://git.rtems.org/rtems/commit/?id=6c39df7e73356ac18201acf6fe36592a97d2677c

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Jul 29 08:48:26 2021 +0200

score: Change _SMP_Send_message() parameter type

Use the processor control to specify the target processor since this is what
the callers have available.

---

 cpukit/include/rtems/score/smpimpl.h      |  9 +++++----
 cpukit/score/src/percpujobs.c             |  2 +-
 cpukit/score/src/smp.c                    |  6 ++----
 testsuites/smptests/smpipi01/init.c       | 10 ++++++++--
 testsuites/smptests/smpmulticast01/init.c |  6 +++---
 5 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/cpukit/include/rtems/score/smpimpl.h b/cpukit/include/rtems/score/smpimpl.h
index 6ead6aa..7c3e777 100644
--- a/cpukit/include/rtems/score/smpimpl.h
+++ b/cpukit/include/rtems/score/smpimpl.h
@@ -218,14 +218,15 @@ static inline long unsigned _SMP_Inter_processor_interrupt_handler(
 bool _SMP_Should_start_processor( uint32_t cpu_index );
 
 /**
- * @brief Sends an SMP message to a processor.
+ * @brief Sends the SMP message to the processor.
  *
  * The target processor may be the sending processor.
  *
- * @param cpu_index The target processor of the message.
- * @param message The message to send.
+ * @param[in, out] cpu is the processor control of the target processor.
+ *
+ * @param message is the message to send.
  */
-void _SMP_Send_message( uint32_t cpu_index, unsigned long message );
+void _SMP_Send_message( Per_CPU_Control *cpu, unsigned long message );
 
 typedef void ( *SMP_Action_handler )( void *arg );
 
diff --git a/cpukit/score/src/percpujobs.c b/cpukit/score/src/percpujobs.c
index 2e13fdf..f273f7d 100644
--- a/cpukit/score/src/percpujobs.c
+++ b/cpukit/score/src/percpujobs.c
@@ -96,7 +96,7 @@ void _Per_CPU_Add_job( Per_CPU_Control *cpu, Per_CPU_Job *job )
 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 );
+  _SMP_Send_message( cpu, SMP_MESSAGE_PERFORM_JOBS );
 }
 
 void _Per_CPU_Wait_for_job(
diff --git a/cpukit/score/src/smp.c b/cpukit/score/src/smp.c
index e04ec13..e98249b 100644
--- a/cpukit/score/src/smp.c
+++ b/cpukit/score/src/smp.c
@@ -322,16 +322,14 @@ void _SMP_Try_to_process_message(
   }
 }
 
-void _SMP_Send_message( uint32_t cpu_index, unsigned long message )
+void _SMP_Send_message( Per_CPU_Control *cpu, unsigned long message )
 {
-  Per_CPU_Control *cpu = _Per_CPU_Get_by_index( cpu_index );
-
   (void) _Atomic_Fetch_or_ulong(
     &cpu->message, message,
     ATOMIC_ORDER_RELEASE
   );
 
   if ( _Per_CPU_Get_state( cpu ) == PER_CPU_STATE_UP ) {
-    _CPU_SMP_Send_interrupt( cpu_index );
+    _CPU_SMP_Send_interrupt( _Per_CPU_Get_index( cpu ) );
   }
 }
diff --git a/testsuites/smptests/smpipi01/init.c b/testsuites/smptests/smpipi01/init.c
index e815911..5f992f8 100644
--- a/testsuites/smptests/smpipi01/init.c
+++ b/testsuites/smptests/smpipi01/init.c
@@ -127,7 +127,10 @@ static void test_send_message_while_processing_a_message(
       barrier(ctx, bs);
 
       rtems_test_assert(ctx->counters[cpu_index].value == 1);
-      _SMP_Send_message(cpu_index, SMP_MESSAGE_PERFORM_JOBS);
+      _SMP_Send_message(
+        _Per_CPU_Get_by_index(cpu_index),
+        SMP_MESSAGE_PERFORM_JOBS
+      );
 
       /* (B) */
       barrier(ctx, bs);
@@ -199,9 +202,12 @@ static void test_send_message_flood(
   }
 
   for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) {
+    Per_CPU_Control *cpu;
     Per_CPU_Control *cpu_self;
     uint32_t i;
 
+    cpu = _Per_CPU_Get_by_index(cpu_index);
+
     cpu_self = _Thread_Dispatch_disable();
     _SMP_Synchronize();
     _Thread_Dispatch_enable(cpu_self);
@@ -213,7 +219,7 @@ static void test_send_message_flood(
     }
 
     for (i = 0; i < 100000; ++i) {
-      _SMP_Send_message(cpu_index, SMP_MESSAGE_PERFORM_JOBS);
+      _SMP_Send_message(cpu, SMP_MESSAGE_PERFORM_JOBS);
     }
 
     for (i = 0; i < cpu_count; ++i) {
diff --git a/testsuites/smptests/smpmulticast01/init.c b/testsuites/smptests/smpmulticast01/init.c
index fbe6fb6..4163dd8 100644
--- a/testsuites/smptests/smpmulticast01/init.c
+++ b/testsuites/smptests/smpmulticast01/init.c
@@ -466,7 +466,7 @@ T_TEST_CASE(JobOrder)
   }
 
   T_step(0);
-  _SMP_Send_message(_Per_CPU_Get_index(cpu_self), SMP_MESSAGE_PERFORM_JOBS);
+  _SMP_Send_message(cpu_self, SMP_MESSAGE_PERFORM_JOBS);
   _Thread_Dispatch_enable(cpu_self);
 }
 
@@ -505,9 +505,9 @@ T_TEST_CASE(AddJobInJob)
 
   _Per_CPU_Add_job(cpu_self, &add_job_in_job_jobs[0]);
   T_step(0);
-  _SMP_Send_message(_Per_CPU_Get_index(cpu_self), SMP_MESSAGE_PERFORM_JOBS);
+  _SMP_Send_message(cpu_self, SMP_MESSAGE_PERFORM_JOBS);
   T_step(2);
-  _SMP_Send_message(_Per_CPU_Get_index(cpu_self), SMP_MESSAGE_PERFORM_JOBS);
+  _SMP_Send_message(cpu_self, SMP_MESSAGE_PERFORM_JOBS);
   _Thread_Dispatch_enable(cpu_self);
 }
 



More information about the vc mailing list