diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index f5b9f933f4..b1595c094e 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,10 @@ +2011-09-24 Sebastian Huber + + PR 1921/cpukit + * score/inline/rtems/score/thread.inl, + score/src/threadstartmultitasking.c: Allow CPU port to provide + optional multitasking start and stop. + 2011-09-20 Petr Benes PR 1916/testing diff --git a/cpukit/score/inline/rtems/score/thread.inl b/cpukit/score/inline/rtems/score/thread.inl index ba13bda908..af824177bb 100644 --- a/cpukit/score/inline/rtems/score/thread.inl +++ b/cpukit/score/inline/rtems/score/thread.inl @@ -111,6 +111,9 @@ RTEMS_INLINE_ROUTINE void _Thread_Stop_multitasking( void ) { +#if defined(_CPU_Stop_multitasking) + _CPU_Stop_multitasking( &_Thread_BSP_context ); +#else /* * This may look a bit of an odd but _Context_Restart_self is just * a very careful restore of a specific context which ensures that @@ -120,6 +123,7 @@ RTEMS_INLINE_ROUTINE void _Thread_Stop_multitasking( void ) * saving the context. */ _Context_Restart_self( &_Thread_BSP_context ); +#endif /*************************************************************** *************************************************************** diff --git a/cpukit/score/src/threadstartmultitasking.c b/cpukit/score/src/threadstartmultitasking.c index dd7275aab7..54b7d83e3b 100644 --- a/cpukit/score/src/threadstartmultitasking.c +++ b/cpukit/score/src/threadstartmultitasking.c @@ -86,5 +86,9 @@ void _Thread_Start_multitasking( void ) _Context_Restore_fp( &_Thread_Heir->fp_context ); #endif +#if defined(_CPU_Start_multitasking) + _CPU_Start_multitasking( &_Thread_BSP_context, &_Thread_Heir->Registers ); +#else _Context_Switch( &_Thread_BSP_context, &_Thread_Heir->Registers ); +#endif }