[rtems commit] score: Add _Per_CPU_Is_boot_processor()

Sebastian Huber sebh at rtems.org
Fri Mar 4 13:52:25 UTC 2016


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Feb 18 08:47:26 2016 +0100

score: Add _Per_CPU_Is_boot_processor()

---

 cpukit/score/include/rtems/score/percpu.h | 19 +++++++++++++++++++
 cpukit/score/src/smp.c                    |  2 ++
 2 files changed, 21 insertions(+)

diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h
index 2b05b78..19f46d2 100644
--- a/cpukit/score/include/rtems/score/percpu.h
+++ b/cpukit/score/include/rtems/score/percpu.h
@@ -365,6 +365,12 @@ typedef struct Per_CPU_Control {
      * _CPU_SMP_Start_processor().
      */
     bool online;
+
+    /**
+     * @brief Indicates if the processor is the one that performed the initial
+     * system initialization.
+     */
+    bool boot;
   #endif
 
   Per_CPU_Stats Stats;
@@ -536,6 +542,19 @@ static inline bool _Per_CPU_Is_processor_online(
 #endif
 }
 
+static inline bool _Per_CPU_Is_boot_processor(
+  const Per_CPU_Control *cpu
+)
+{
+#if defined( RTEMS_SMP )
+  return cpu->boot;
+#else
+  (void) cpu;
+
+  return true;
+#endif
+}
+
 #if defined( RTEMS_SMP )
 
 static inline void _Per_CPU_Send_interrupt( const Per_CPU_Control *cpu )
diff --git a/cpukit/score/src/smp.c b/cpukit/score/src/smp.c
index 68a55ff..8049643 100644
--- a/cpukit/score/src/smp.c
+++ b/cpukit/score/src/smp.c
@@ -57,6 +57,8 @@ static void _SMP_Start_processors( uint32_t cpu_count )
     } else {
       started = true;
 
+      cpu->boot = true;
+
       if ( !_Scheduler_Should_start_processor( assignment ) ) {
         _SMP_Fatal( SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER );
       }



More information about the vc mailing list