[PATCH 12/18] smpipi01: Ensure IPI works on all processors

Sebastian Huber sebastian.huber at embedded-brains.de
Mon May 20 07:33:38 UTC 2019


---
 testsuites/smptests/smpipi01/init.c | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/testsuites/smptests/smpipi01/init.c b/testsuites/smptests/smpipi01/init.c
index c923d049b0..aa0f43b55a 100644
--- a/testsuites/smptests/smpipi01/init.c
+++ b/testsuites/smptests/smpipi01/init.c
@@ -101,13 +101,21 @@ static const Per_CPU_Job_context barrier_0_job_context = {
 };
 
 static void test_send_message_while_processing_a_message(
-  test_context *ctx
+  test_context *ctx,
+  uint32_t cpu_index_self,
+  uint32_t cpu_count
 )
 {
-  uint32_t cpu_count = rtems_scheduler_get_processor_maximum();
-  uint32_t cpu_index_self = rtems_scheduler_get_processor();
-  uint32_t cpu_index;
   SMP_barrier_State *bs = &ctx->main_barrier_state;
+  uint32_t cpu_index;
+  rtems_status_code sc;
+  cpu_set_t cpuset;
+
+  rtems_test_assert(cpu_index_self < CPU_SETSIZE);
+  CPU_ZERO(&cpuset);
+  CPU_SET((int) cpu_index_self, &cpuset);
+  sc = rtems_task_set_affinity(RTEMS_SELF, sizeof(cpuset), &cpuset);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
 
   for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) {
     if (cpu_index != cpu_index_self) {
@@ -148,10 +156,10 @@ static void counter_handler(Per_CPU_Control *cpu_self)
 }
 
 static void test_send_message_flood(
-  test_context *ctx
+  test_context *ctx,
+  uint32_t cpu_count
 )
 {
-  uint32_t cpu_count = rtems_scheduler_get_processor_maximum();
   uint32_t cpu_index_self = rtems_scheduler_get_processor();
   uint32_t cpu_index;
 
@@ -204,9 +212,14 @@ static void test_send_message_flood(
 static void test(void)
 {
   test_context *ctx = &test_instance;
+  uint32_t cpu_count = rtems_scheduler_get_processor_maximum();
+  uint32_t cpu_index_self;
+
+  for (cpu_index_self = 0; cpu_index_self < cpu_count; ++cpu_index_self) {
+    test_send_message_while_processing_a_message(ctx, cpu_index_self, cpu_count);
+  }
 
-  test_send_message_while_processing_a_message(ctx);
-  test_send_message_flood(ctx);
+  test_send_message_flood(ctx, cpu_count);
 }
 
 static void Init(rtems_task_argument arg)
-- 
2.16.4



More information about the devel mailing list