score: _CPU_Context_switch_to_first_task_smp()

Delete _CPU_Context_switch_to_first_task_smp() and use
_CPU_Context_restore() instead.
This commit is contained in:
Sebastian Huber
2014-02-05 15:41:00 +01:00
parent 1c1c2a04c3
commit 558cc8ddb7
7 changed files with 1 additions and 69 deletions

View File

@@ -239,34 +239,6 @@ SYM(_CPU_Context_restore):
GET_SELF_CPU_CONTROL %o3, %o4
ba SYM(_CPU_Context_restore_heir)
mov %i0, %o1 ! in the delay slot
.align 4
#if defined(RTEMS_SMP)
/*
* void _CPU_Context_switch_to_first_task_smp(
* Context_Control *new_context
* )
*
* This routine is only used to switch to the first task on a
* secondary core in an SMP configuration. We do not need to
* flush any windows and, in fact, this can be dangerous
* as they may or may not be initialized properly. So we just
* reinitialize the PSR and WIM.
*/
PUBLIC(_CPU_Context_switch_to_first_task_smp)
SYM(_CPU_Context_switch_to_first_task_smp):
mov %psr, %g1 ! Turn of traps when modifying WIM
andn %g1, SPARC_PSR_ET_MASK, %g1
mov %g1, %psr
/* WIM and PSR will be set in done_flushing, it need args:
* g1=PSR, g3=CWP, o1=Context
*/
and %g1, SPARC_NUMBER_OF_REGISTER_WINDOWS - 1, %g3
nop
mov %o0, %o1 ! in the delay slot
GET_SELF_CPU_CONTROL %o3, %o4
ba,a done_flushing
#endif
/*
* void _ISR_Handler()

View File

@@ -470,9 +470,6 @@ void _CPU_Context_volatile_clobber( uintptr_t pattern );
void _CPU_Context_validate( uintptr_t pattern );
#ifdef RTEMS_SMP
#define _CPU_Context_switch_to_first_task_smp( _context ) \
_CPU_Context_restore( _context )
RTEMS_COMPILER_PURE_ATTRIBUTE static inline uint32_t
_CPU_SMP_Get_current_processor( void )
{

View File

@@ -462,9 +462,6 @@ uint32_t _CPU_ISR_Get_level( void );
_CPU_Context_restore( (_the_context) );
#if defined(RTEMS_SMP)
#define _CPU_Context_switch_to_first_task_smp( _the_context ) \
_CPU_Context_restore( (_the_context) );
RTEMS_COMPILER_PURE_ATTRIBUTE uint32_t _CPU_SMP_Get_current_processor( void );
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );

View File

@@ -1010,9 +1010,6 @@ void _CPU_Context_volatile_clobber( uintptr_t pattern );
void _CPU_Context_validate( uintptr_t pattern );
#ifdef RTEMS_SMP
#define _CPU_Context_switch_to_first_task_smp( _context ) \
_CPU_Context_restore( _context )
RTEMS_COMPILER_PURE_ATTRIBUTE static inline uint32_t
_CPU_SMP_Get_current_processor( void )
{

View File

@@ -1189,20 +1189,6 @@ void _CPU_Context_restore(
) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
#if defined(RTEMS_SMP)
/**
* @brief SPARC specific method to switch to first task.
*
* This routine is only used to switch to the first task on a
* secondary core in an SMP configuration. We do not need to
* flush all the windows and, in fact, this can be dangerous
* as they may or may not be initialized properly.
*
* @param[in] new_context is the context to restore
*/
void _CPU_Context_switch_to_first_task_smp(
Context_Control *new_context
);
RTEMS_COMPILER_PURE_ATTRIBUTE uint32_t _CPU_SMP_Get_current_processor( void );
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );

View File

@@ -106,23 +106,6 @@ extern "C" {
#define _Context_Restart_self( _the_context ) \
_CPU_Context_Restart_self( _the_context )
#if defined(RTEMS_SMP)
/*
* @brief Switch to first task on secondary core.
*
* This routine is only used to switch to the first task on a
* secondary core in an SMP configuration. Since the switch
* to the first task is done from an interrupt handler, this
* may be different from simply restarting the currently running
* task.
*
* @param[in] _the_context is the context of the first thread to
* run on this core
*/
#define _Context_Switch_to_first_task_smp( _the_context ) \
_CPU_Context_switch_to_first_task_smp( _the_context )
#endif
/**
* @brief Return starting address of floating point context.
*

View File

@@ -78,7 +78,7 @@ void _Thread_Start_multitasking( Context_Control *context )
*/
self_cpu->thread_dispatch_disable_level = 1;
_CPU_Context_switch_to_first_task_smp( &heir->Registers );
_CPU_Context_restore( &heir->Registers );
}
#endif
}