Ok
On Tue, Mar 25, 2014 at 8:49 AM, Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > --- > cpukit/libmisc/cpuuse/cpuusagereport.c | 4 ++- > .../score/include/rtems/score/schedulersmpimpl.h | 6 ++-- > cpukit/score/include/rtems/score/threadimpl.h | 28 > +++++++++++++++++++- > cpukit/score/src/schedulersmpstartidle.c | 2 +- > cpukit/score/src/threadinitialize.c | 6 ++-- > 5 files changed, 37 insertions(+), 9 deletions(-) > > diff --git a/cpukit/libmisc/cpuuse/cpuusagereport.c > b/cpukit/libmisc/cpuuse/cpuusagereport.c > index fe7e2a4..86b6377 100644 > --- a/cpukit/libmisc/cpuuse/cpuusagereport.c > +++ b/cpukit/libmisc/cpuuse/cpuusagereport.c > @@ -26,6 +26,7 @@ > > #include <rtems/cpuuse.h> > #include <rtems/score/objectimpl.h> > +#include <rtems/score/threadimpl.h> > #include <rtems/score/todimpl.h> > #include <rtems/score/watchdogimpl.h> > > @@ -43,7 +44,8 @@ > #else > /* FIXME: Locking */ > if ( the_thread->is_executing ) { > - *time_of_context_switch = > the_thread->cpu->time_of_last_context_switch; > + *time_of_context_switch = > + _Thread_Get_CPU( the_thread )->time_of_last_context_switch; > return true; > } > #endif > diff --git a/cpukit/score/include/rtems/score/schedulersmpimpl.h > b/cpukit/score/include/rtems/score/schedulersmpimpl.h > index f36fcea..d977b3f 100644 > --- a/cpukit/score/include/rtems/score/schedulersmpimpl.h > +++ b/cpukit/score/include/rtems/score/schedulersmpimpl.h > @@ -67,8 +67,8 @@ static inline void _Scheduler_SMP_Allocate_processor( > Thread_Control *victim > ) > { > - Per_CPU_Control *cpu_of_scheduled = scheduled->cpu; > - Per_CPU_Control *cpu_of_victim = victim->cpu; > + Per_CPU_Control *cpu_of_scheduled = _Thread_Get_CPU( scheduled ); > + Per_CPU_Control *cpu_of_victim = _Thread_Get_CPU( victim ); > Thread_Control *heir; > > scheduled->is_scheduled = true; > @@ -88,7 +88,7 @@ static inline void _Scheduler_SMP_Allocate_processor( > if ( heir != victim ) { > const Per_CPU_Control *cpu_of_executing = _Per_CPU_Get(); > > - heir->cpu = cpu_of_victim; > + _Thread_Set_CPU( heir, cpu_of_victim ); > > /* > * FIXME: Here we need atomic store operations with a relaxed memory > order. > diff --git a/cpukit/score/include/rtems/score/threadimpl.h > b/cpukit/score/include/rtems/score/threadimpl.h > index 1be39b4..cc0d818 100644 > --- a/cpukit/score/include/rtems/score/threadimpl.h > +++ b/cpukit/score/include/rtems/score/threadimpl.h > @@ -432,6 +432,32 @@ void _Thread_blocking_operation_Cancel( > ISR_Level level > ); > > +RTEMS_INLINE_ROUTINE Per_CPU_Control *_Thread_Get_CPU( > + const Thread_Control *thread > +) > +{ > +#if defined(RTEMS_SMP) > + return thread->cpu; > +#else > + (void) thread; > + > + return _Per_CPU_Get(); > +#endif > +} > + > +RTEMS_INLINE_ROUTINE void _Thread_Set_CPU( > + Thread_Control *thread, > + Per_CPU_Control *cpu > +) > +{ > +#if defined(RTEMS_SMP) > + thread->cpu = cpu; > +#else > + (void) thread; > + (void) cpu; > +#endif > +} > + > /** > * This function returns true if the_thread is the currently executing > * thread, and false otherwise. > @@ -584,7 +610,7 @@ RTEMS_INLINE_ROUTINE void _Thread_Signal_notification( > Thread_Control *thread ) > #if defined(RTEMS_SMP) > if ( thread->is_executing ) { > const Per_CPU_Control *cpu_of_executing = _Per_CPU_Get(); > - Per_CPU_Control *cpu_of_thread = thread->cpu; > + Per_CPU_Control *cpu_of_thread = _Thread_Get_CPU( thread ); > > if ( cpu_of_executing != cpu_of_thread ) { > cpu_of_thread->dispatch_necessary = true; > diff --git a/cpukit/score/src/schedulersmpstartidle.c > b/cpukit/score/src/schedulersmpstartidle.c > index db98c99..75d1c8f 100644 > --- a/cpukit/score/src/schedulersmpstartidle.c > +++ b/cpukit/score/src/schedulersmpstartidle.c > @@ -35,6 +35,6 @@ void _Scheduler_SMP_Start_idle( > Scheduler_SMP_Control *self = _Scheduler_SMP_Instance(); > > thread->is_scheduled = true; > - thread->cpu = cpu; > + _Thread_Set_CPU( thread, cpu ); > _Chain_Append_unprotected( &self->scheduled, &thread->Object.Node ); > } > diff --git a/cpukit/score/src/threadinitialize.c > b/cpukit/score/src/threadinitialize.c > index e481f63..df49184 100644 > --- a/cpukit/score/src/threadinitialize.c > +++ b/cpukit/score/src/threadinitialize.c > @@ -205,15 +205,15 @@ bool _Thread_Initialize( > the_thread->is_scheduled = false; > the_thread->is_in_the_air = false; > the_thread->is_executing = false; > - > - /* Initialize the cpu field for the non-SMP schedulers */ > - the_thread->cpu = _Per_CPU_Get_by_index( 0 ); > #if __RTEMS_HAVE_SYS_CPUSET_H__ > the_thread->affinity = *(_CPU_set_Default()); > the_thread->affinity.set = &the_thread->affinity.preallocated; > #endif > #endif > > + /* Initialize the CPU for the non-SMP schedulers */ > + _Thread_Set_CPU( the_thread, _Per_CPU_Get_by_index( 0 ) ); > + > the_thread->current_state = STATES_DORMANT; > the_thread->Wait.queue = NULL; > the_thread->resource_count = 0; > -- > 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