diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-04-09 15:07:54 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-04-15 10:41:44 +0200 |
commit | c5831a3f9af11228dbdaabaf01f69d37e55684ef (patch) | |
tree | e9ddedd942f3f31d239820dfc4dbcef4cde0b09a /cpukit/score/include/rtems/score/percpu.h | |
parent | rtems: Add task get/set scheduler (diff) | |
download | rtems-c5831a3f9af11228dbdaabaf01f69d37e55684ef.tar.bz2 |
score: Add clustered/partitioned scheduling
Clustered/partitioned scheduling helps to control the worst-case
latencies in the system. The goal is to reduce the amount of shared
state in the system and thus prevention of lock contention. Modern
multi-processor systems tend to have several layers of data and
instruction caches. With clustered/partitioned scheduling it is
possible to honour the cache topology of a system and thus avoid
expensive cache synchronization traffic.
We have clustered scheduling in case the set of processors of a system
is partitioned into non-empty pairwise-disjoint subsets. These subsets
are called clusters. Clusters with a cardinality of one are partitions.
Each cluster is owned by exactly one scheduler instance.
Diffstat (limited to 'cpukit/score/include/rtems/score/percpu.h')
-rw-r--r-- | cpukit/score/include/rtems/score/percpu.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h index 9a6b1698fb..e491ffa002 100644 --- a/cpukit/score/include/rtems/score/percpu.h +++ b/cpukit/score/include/rtems/score/percpu.h @@ -316,6 +316,12 @@ typedef struct { * @see _Per_CPU_State_change(). */ Per_CPU_State state; + + /** + * @brief Indicates if the processor has been successfully started via + * _CPU_SMP_Start_processor(). + */ + bool started; #endif Per_CPU_Stats Stats; @@ -462,6 +468,19 @@ static inline uint32_t _Per_CPU_Get_index( const Per_CPU_Control *per_cpu ) return ( uint32_t ) ( per_cpu_envelope - &_Per_CPU_Information[ 0 ] ); } +static inline bool _Per_CPU_Is_processor_started( + const Per_CPU_Control *per_cpu +) +{ +#if defined( RTEMS_SMP ) + return per_cpu->started; +#else + (void) per_cpu; + + return true; +#endif +} + #if defined( RTEMS_SMP ) static inline void _Per_CPU_Send_interrupt( const Per_CPU_Control *per_cpu ) |