[PATCH 4/8] score: Add _SMP_Online_processors
Sebastian Huber
sebastian.huber at embedded-brains.de
Thu Mar 3 14:47:51 UTC 2016
---
cpukit/score/include/rtems/score/smpimpl.h | 11 +++++++++++
cpukit/score/src/smp.c | 5 ++++-
testsuites/smptests/smpipi01/init.c | 10 ++++++++++
3 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/cpukit/score/include/rtems/score/smpimpl.h b/cpukit/score/include/rtems/score/smpimpl.h
index 09c47ec..386216f 100644
--- a/cpukit/score/include/rtems/score/smpimpl.h
+++ b/cpukit/score/include/rtems/score/smpimpl.h
@@ -20,6 +20,7 @@
#include <rtems/score/smp.h>
#include <rtems/score/percpu.h>
+#include <rtems/score/processormask.h>
#include <rtems/fatal.h>
#include <rtems/rtems/cache.h>
@@ -91,6 +92,16 @@ static inline void _SMP_Fatal( SMP_Fatal_code code )
#if defined( RTEMS_SMP )
/**
+ * @brief Set of online processors.
+ *
+ * A processor is online if was started during system initialization. In this
+ * case its corresponding bit in the mask is set.
+ *
+ * @see _SMP_Handler_initialize().
+ */
+extern Processor_mask _SMP_Online_processors;
+
+/**
* @brief Performs high-level initialization of a secondary processor and runs
* the application threads.
*
diff --git a/cpukit/score/src/smp.c b/cpukit/score/src/smp.c
index b2713f1..68a55ff 100644
--- a/cpukit/score/src/smp.c
+++ b/cpukit/score/src/smp.c
@@ -29,6 +29,8 @@
#error "deferred FP switch not implemented for SMP"
#endif
+Processor_mask _SMP_Online_processors;
+
uint32_t _SMP_Processor_count;
static void _SMP_Start_processors( uint32_t cpu_count )
@@ -36,7 +38,6 @@ static void _SMP_Start_processors( uint32_t cpu_count )
uint32_t cpu_index_self = _SMP_Get_current_processor();
uint32_t cpu_index;
-
for ( cpu_index = 0 ; cpu_index < cpu_count; ++cpu_index ) {
const Scheduler_Assignment *assignment =
_Scheduler_Get_assignment( cpu_index );
@@ -69,6 +70,8 @@ static void _SMP_Start_processors( uint32_t cpu_count )
++context->processor_count;
cpu->scheduler_context = context;
+
+ _Processor_mask_Set( _SMP_Online_processors, cpu_index );
}
}
}
diff --git a/testsuites/smptests/smpipi01/init.c b/testsuites/smptests/smpipi01/init.c
index db0688c..8c39d18 100644
--- a/testsuites/smptests/smpipi01/init.c
+++ b/testsuites/smptests/smpipi01/init.c
@@ -161,6 +161,10 @@ static void test_send_message_flood(
}
for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) {
+ rtems_test_assert(
+ _Processor_mask_Is_set(_SMP_Online_processors, cpu_index)
+ );
+
printf(
"inter-processor interrupts for processor %"
PRIu32 "%s: %" PRIu32 "\n",
@@ -169,6 +173,12 @@ static void test_send_message_flood(
ctx->counters[cpu_index].value
);
}
+
+ for (; cpu_index < CPU_COUNT; ++cpu_index) {
+ rtems_test_assert(
+ !_Processor_mask_Is_set(_SMP_Online_processors, cpu_index)
+ );
+ }
}
static void test(void)
--
1.8.4.5
More information about the devel
mailing list