What is the need/use for this optimization?
On Tue, Apr 22, 2014 at 4:46 AM, Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > Add optional method _CPU_Get_current_per_CPU_control() to obtain the > per-CPU control of the current processor. > > This is optional. Not every CPU port needs this. It is only an > optional optimization variant. In case this macro is undefined, the > default implementation using the current processor index will be used. > --- > cpukit/score/cpu/no_cpu/rtems/score/cpu.h | 18 ++++++++++++++++++ > cpukit/score/include/rtems/score/percpu.h | 10 +++++++--- > 2 files changed, 25 insertions(+), 3 deletions(-) > > diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h > b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h > index 5241b5b..959fb58 100644 > --- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h > +++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h > @@ -1462,6 +1462,24 @@ CPU_Counter_ticks _CPU_Counter_difference( > CPU_Counter_ticks first > ); > > +/** > + * @brief Special register pointing to the per-CPU control of the current > + * processor. > + * > + * This is optional. Not every CPU port needs this. It is only an optional > + * optimization variant. > + */ > +register struct Per_CPU_Control *_CPU_Per_CPU_current asm( "rX" ); > + > +/** > + * @brief Optional method to obtain the per-CPU control of the current > processor. > + * > + * This is optional. Not every CPU port needs this. It is only an optional > + * optimization variant. In case this macro is undefined, the default > + * implementation using the current processor index will be used. > + */ > +#define _CPU_Get_current_per_CPU_control() ( _CPU_Per_CPU_current ) > + > #ifdef RTEMS_SMP > /** > * @brief Performs CPU specific SMP initialization in the context of the > boot > diff --git a/cpukit/score/include/rtems/score/percpu.h > b/cpukit/score/include/rtems/score/percpu.h > index afc3803..a1b0a38 100644 > --- a/cpukit/score/include/rtems/score/percpu.h > +++ b/cpukit/score/include/rtems/score/percpu.h > @@ -235,7 +235,7 @@ typedef struct { > * > * This structure is used to hold per core state information. > */ > -typedef struct { > +typedef struct Per_CPU_Control { > /** > * @brief CPU port specific control. > */ > @@ -437,8 +437,12 @@ extern Per_CPU_Control_envelope _Per_CPU_Information[] > CPU_STRUCTURE_ALIGNMENT; > * we can use _Per_CPU_Get_snapshot()). All other places must use > * _Per_CPU_Get() so that we can add checks for RTEMS_DEBUG. > */ > -#define _Per_CPU_Get_snapshot() \ > - ( &_Per_CPU_Information[ _SMP_Get_current_processor() ].per_cpu ) > +#if defined( _CPU_Get_current_per_CPU_control ) > + #define _Per_CPU_Get_snapshot() _CPU_Get_current_per_CPU_control() > +#else > + #define _Per_CPU_Get_snapshot() \ > + ( &_Per_CPU_Information[ _SMP_Get_current_processor() ].per_cpu ) > +#endif > > #if defined( RTEMS_SMP ) > static inline Per_CPU_Control *_Per_CPU_Get( void ) > -- > 1.7.7 > > _______________________________________________ > rtems-devel mailing list > rtems-devel@rtems.org > http://www.rtems.org/mailman/listinfo/rtems-devel _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel