[PATCH 2/4] score: Prevent assignment to _Thread_Executing
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Nov 4 15:40:48 UTC 2016
----- Gedare Bloom <gedare at rtems.org> schrieb:
> On Fri, Nov 4, 2016 at 9:08 AM, Sebastian Huber
> <sebastian.huber at embedded-brains.de> wrote:
> > ---
> > cpukit/score/include/rtems/score/percpu.h | 2 +-
> > testsuites/tmtests/tm26/task1.c | 12 +-----------
> > testsuites/tmtests/tm27/task1.c | 15 +++++++++++----
> > 3 files changed, 13 insertions(+), 16 deletions(-)
> >
> > diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h
> > index 066bf4c..1ccbc3b 100644
> > --- a/cpukit/score/include/rtems/score/percpu.h
> > +++ b/cpukit/score/include/rtems/score/percpu.h
> > @@ -688,7 +688,7 @@ bool _Per_CPU_State_wait_for_non_initial_state(
> > #define _Thread_Heir \
> > _Per_CPU_Get()->heir
> > #define _Thread_Executing \
> > - _Per_CPU_Get()->executing
> > + _Per_CPU_Get_executing( _Per_CPU_Get() )
> > #define _ISR_Nest_level \
> > _Per_CPU_Get()->isr_nest_level
> > #define _CPU_Interrupt_stack_low \
> > diff --git a/testsuites/tmtests/tm26/task1.c b/testsuites/tmtests/tm26/task1.c
> > index 173cf7f..9d157e9 100644
> > --- a/testsuites/tmtests/tm26/task1.c
> > +++ b/testsuites/tmtests/tm26/task1.c
> > @@ -123,17 +123,7 @@ static void set_thread_heir( Thread_Control *thread )
> >
> > static void set_thread_executing( Thread_Control *thread )
> > {
> > -#if defined( PREVENT_SMP_ASSERT_FAILURES )
> > - ISR_Level level;
> > -
> > - _ISR_Local_disable( level );
> > -#endif
> > -
> > - _Thread_Executing = thread;
> > -
> > -#if defined( PREVENT_SMP_ASSERT_FAILURES )
> > - _ISR_Local_enable( level );
> > -#endif
> > + _Per_CPU_Get_snapshot()->executing = thread;
> Normally one thinks of a snapshot as a read-only kind of thing, like a
> picture. So I was a little confused by this terminology--for some
> reason I hadn't noticed this _Per_CPU_Get_snapshot() before now.
Its good that you didn't notice this before, since it should be rarely used:
/*
* If we get the current processor index in a context which allows thread
* dispatching, then we may already run on another processor right after the
* read instruction. There are very few cases in which this makes sense (here
* we can use _Per_CPU_Get_snapshot()). All other places must use
* _Per_CPU_Get() so that we can add checks for RTEMS_DEBUG.
*/
#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
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list