diff options
-rw-r--r-- | cpukit/score/include/rtems/score/percpu.h | 19 | ||||
-rw-r--r-- | cpukit/score/src/smp.c | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h index 2b05b7815e..19f46d2725 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 68a55ffe4d..8049643a95 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 ); } |