From 39e51758c86754cef5ba4521c0c36578521f73d0 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 14 Jun 2013 14:00:38 +0200 Subject: smp: Add and use _CPU_SMP_Get_current_processor() Add and use _SMP_Get_current_processor() and rtems_smp_get_current_processor(). Delete bsp_smp_interrupt_cpu(). Change type of current processor index from int to uint32_t to match _SMP_Processor_count type. --- c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c | 5 ---- c/src/lib/libbsp/i386/shared/irq/irq_asm.S | 2 +- c/src/lib/libbsp/i386/shared/smp/getcpuid.c | 4 ++- c/src/lib/libbsp/powerpc/qoriq/startup/smp.c | 5 ---- c/src/lib/libbsp/shared/smp/getcpuid.c | 5 ++-- c/src/lib/libbsp/sparc/leon3/smp/getcpuid.c | 6 +++-- c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c | 10 ++++---- cpukit/rtems/include/rtems.h | 1 - cpukit/rtems/include/rtems/rtems/smp.h | 19 +++++++++++--- cpukit/score/cpu/arm/rtems/score/cpu.h | 14 +++++++++++ cpukit/score/cpu/i386/rtems/score/cpu.h | 2 ++ cpukit/score/cpu/no_cpu/rtems/score/cpu.h | 13 ++++++++++ cpukit/score/cpu/powerpc/rtems/score/cpu.h | 15 ++++++++++++ cpukit/score/cpu/sparc/rtems/score/cpu.h | 2 ++ cpukit/score/include/rtems/bspsmp.h | 25 ------------------- cpukit/score/include/rtems/score/percpu.h | 23 +++++++---------- cpukit/score/include/rtems/score/smp.h | 12 ++++++++- cpukit/score/include/rtems/score/threaddispatch.h | 4 +-- cpukit/score/src/smp.c | 30 +++++++++++------------ cpukit/score/src/threaddispatchdisablelevel.c | 6 ++--- testsuites/smptests/smp01/init.c | 10 +++++--- testsuites/smptests/smp01/tasks.c | 8 +++--- testsuites/smptests/smp02/init.c | 7 +++--- testsuites/smptests/smp02/system.h | 2 +- testsuites/smptests/smp02/tasks.c | 6 ++--- testsuites/smptests/smp03/init.c | 9 ++++--- testsuites/smptests/smp04/init.c | 13 +++++----- testsuites/smptests/smp05/init.c | 10 ++++---- testsuites/smptests/smp06/init.c | 16 ++++++------ testsuites/smptests/smp07/init.c | 10 ++++---- testsuites/smptests/smp08/init.c | 6 ++--- testsuites/smptests/smp08/tasks.c | 4 +-- testsuites/smptests/smp09/init.c | 8 +++--- testsuites/smptests/smpatomic01/tasks.c | 4 +-- testsuites/smptests/smpatomic02/tasks.c | 4 +-- testsuites/smptests/smpatomic03/tasks.c | 4 +-- testsuites/smptests/smpatomic04/tasks.c | 4 +-- testsuites/smptests/smpatomic05/tasks.c | 4 +-- testsuites/smptests/smpatomic06/tasks.c | 4 +-- testsuites/smptests/smpatomic07/tasks.c | 4 +-- testsuites/smptests/smplock01/init.c | 12 ++++----- 41 files changed, 195 insertions(+), 157 deletions(-) diff --git a/c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c b/c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c index b94bcec81c..e647b4fa92 100644 --- a/c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c +++ b/c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c @@ -20,11 +20,6 @@ #include -int bsp_smp_processor_id(void) -{ - return (int) arm_cortex_a9_get_multiprocessor_cpu_id(); -} - static void ipi_handler(void *arg) { rtems_smp_process_interrupt(); diff --git a/c/src/lib/libbsp/i386/shared/irq/irq_asm.S b/c/src/lib/libbsp/i386/shared/irq/irq_asm.S index d07ae2cb6b..2b16234622 100644 --- a/c/src/lib/libbsp/i386/shared/irq/irq_asm.S +++ b/c/src/lib/libbsp/i386/shared/irq/irq_asm.S @@ -100,7 +100,7 @@ SYM (_ISR_Handler): movl esp, ebp /* ebp = previous stack pointer */ #if defined(RTEMS_SMP) && defined(BSP_HAS_SMP) movl $SYM(_Per_CPU_Information_p), ebx - call SYM(bsp_smp_processor_id) + call SYM(_CPU_SMP_Get_current_processor) mov (ebx,eax,4), ebx pushl ecx call SYM(_ISR_SMP_Enter) diff --git a/c/src/lib/libbsp/i386/shared/smp/getcpuid.c b/c/src/lib/libbsp/i386/shared/smp/getcpuid.c index dc82d3f883..dec816698d 100644 --- a/c/src/lib/libbsp/i386/shared/smp/getcpuid.c +++ b/c/src/lib/libbsp/i386/shared/smp/getcpuid.c @@ -7,13 +7,15 @@ * http://www.rtems.com/license/LICENSE. */ +#include + #include #include static int lapic_dummy = 0; unsigned imps_lapic_addr = ((unsigned)(&lapic_dummy)) - LAPIC_ID; -int bsp_smp_processor_id(void) +uint32_t _CPU_SMP_Get_current_processor( void ) { return APIC_ID(IMPS_LAPIC_READ(LAPIC_ID)); } diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c b/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c index 352d7d44cc..4634eef76d 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c +++ b/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c @@ -43,11 +43,6 @@ void _start_core_1(void); #define TLB_COUNT (TLB_END - TLB_BEGIN) -int bsp_smp_processor_id(void) -{ - return (int) ppc_processor_id(); -} - /* * These values can be obtained with the debugger or a look into the * U-Boot sources (arch/powerpc/cpu/mpc85xx/release.S). diff --git a/c/src/lib/libbsp/shared/smp/getcpuid.c b/c/src/lib/libbsp/shared/smp/getcpuid.c index c1806c8916..8d57b780d3 100644 --- a/c/src/lib/libbsp/shared/smp/getcpuid.c +++ b/c/src/lib/libbsp/shared/smp/getcpuid.c @@ -7,8 +7,9 @@ * http://www.rtems.com/license/LICENSE. */ -int bsp_smp_processor_id(void) +#include + +uint32_t _CPU_SMP_Get_current_processor( void ) { return 0; } - diff --git a/c/src/lib/libbsp/sparc/leon3/smp/getcpuid.c b/c/src/lib/libbsp/sparc/leon3/smp/getcpuid.c index 5678fd4962..824278db61 100644 --- a/c/src/lib/libbsp/sparc/leon3/smp/getcpuid.c +++ b/c/src/lib/libbsp/sparc/leon3/smp/getcpuid.c @@ -13,9 +13,11 @@ * http://www.rtems.com/license/LICENSE. */ -int bsp_smp_processor_id(void) +#include + +uint32_t _CPU_SMP_Get_current_processor( void ) { - unsigned int id; + uint32_t id; __asm__ __volatile__( "rd %%asr17,%0\n\t" : "=r" (id) : ); return ((id >> 28) & 0xff); diff --git a/c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c b/c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c index 7dbd5bb12a..39fc9f9dfa 100644 --- a/c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c +++ b/c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c @@ -43,7 +43,7 @@ static rtems_isr bsp_ap_ipi_isr( static void leon3_secondary_cpu_initialize(void) { - int cpu = bsp_smp_processor_id(); + uint32_t cpu = rtems_smp_get_current_processor(); sparc_leon3_set_cctrl( 0x80000F ); LEON_Unmask_interrupt(LEON3_MP_IRQ); @@ -125,11 +125,11 @@ void bsp_smp_interrupt_cpu( void bsp_smp_broadcast_interrupt(void) { - int dest_cpu; - int cpu; - int max_cpus; + uint32_t dest_cpu; + uint32_t cpu; + uint32_t max_cpus; - cpu = bsp_smp_processor_id(); + cpu = rtems_smp_get_current_processor(); max_cpus = rtems_smp_get_processor_count(); for ( dest_cpu=0 ; dest_cpu < max_cpus ; dest_cpu++ ) { diff --git a/cpukit/rtems/include/rtems.h b/cpukit/rtems/include/rtems.h index ab727b250f..9b9480472f 100644 --- a/cpukit/rtems/include/rtems.h +++ b/cpukit/rtems/include/rtems.h @@ -75,7 +75,6 @@ extern "C" { #endif #include - #include #include diff --git a/cpukit/rtems/include/rtems/rtems/smp.h b/cpukit/rtems/include/rtems/rtems/smp.h index d8431b07f1..6e45671b32 100644 --- a/cpukit/rtems/include/rtems/rtems/smp.h +++ b/cpukit/rtems/include/rtems/rtems/smp.h @@ -55,14 +55,25 @@ extern "C" { _SMP_Get_processor_count() /** - * @brief Obtain Current Core Number + * @brief Returns the index of the current processor. * - * This method returns the id of the current CPU core. + * On uni-processor configurations this is a compile time constant and defined + * to be zero. + * + * On SMP configurations an architecture specific method is used to obtain the + * index of the current processor in the system. The set of processor indices + * is the range of integers starting with zero up to the processor count minus + * one. + * + * Outside of sections with disabled thread dispatching the current processor + * index may change after every instruction since the thread may migrate from + * one processor to another. Sections with disabled interrupts are sections + * with thread dispatching disabled. * - * @retval This method returns the id of the current CPU core. + * @return The index of the current processor. */ #define rtems_smp_get_current_processor() \ - bsp_smp_processor_id() + _SMP_Get_current_processor() /** @} */ diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h index 7020261619..ed1b605d09 100644 --- a/cpukit/score/cpu/arm/rtems/score/cpu.h +++ b/cpukit/score/cpu/arm/rtems/score/cpu.h @@ -443,6 +443,20 @@ void _CPU_Context_validate( uintptr_t pattern ); #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 ) + { + uint32_t mpidr; + + /* Use ARMv7 Multiprocessor Affinity Register (MPIDR) */ + __asm__ volatile ( + "mrc p15, 0, %[mpidr], c0, c0, 5\n" + : [mpidr] "=&r" (mpidr) + ); + + return mpidr & 0xffU; + } + static inline void _ARM_Data_memory_barrier( void ) { __asm__ volatile ( "dmb" : : : "memory" ); diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h b/cpukit/score/cpu/i386/rtems/score/cpu.h index 3f7a331c3f..b00ae3bfd8 100644 --- a/cpukit/score/cpu/i386/rtems/score/cpu.h +++ b/cpukit/score/cpu/i386/rtems/score/cpu.h @@ -455,6 +455,8 @@ uint32_t _CPU_ISR_Get_level( void ); #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 ); + static inline void _CPU_Processor_event_broadcast( void ) { __asm__ volatile ( "" : : : "memory" ); diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h index e2c6d94c10..d368e51c5f 100644 --- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h +++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h @@ -1403,6 +1403,19 @@ static inline uint32_t CPU_swap_u32( (((value&0xff) << 8) | ((value >> 8)&0xff)) #ifdef RTEMS_SMP + /** + * @brief Returns the index of the current processor. + * + * An architecture specific method must be used to obtain the index of the + * current processor in the system. The set of processor indices is the + * range of integers starting with zero up to the processor count minus one. + */ + RTEMS_COMPILER_PURE_ATTRIBUTE static inline uint32_t + _CPU_SMP_Get_current_processor( void ) + { + return 123; + } + /** * @brief Broadcasts a processor event. * diff --git a/cpukit/score/cpu/powerpc/rtems/score/cpu.h b/cpukit/score/cpu/powerpc/rtems/score/cpu.h index e3c40981b5..8362c64b3f 100644 --- a/cpukit/score/cpu/powerpc/rtems/score/cpu.h +++ b/cpukit/score/cpu/powerpc/rtems/score/cpu.h @@ -1000,6 +1000,21 @@ void _CPU_Context_validate( uintptr_t pattern ); #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 ) + { + uint32_t pir; + + /* Use Book E Processor ID Register (PIR) */ + __asm__ volatile ( + "mfspr %[pir], 286" + : [pir] "=&r" (pir) + ); + + return pir; + } + + static inline void _CPU_Processor_event_broadcast( void ) { __asm__ volatile ( "" : : : "memory" ); diff --git a/cpukit/score/cpu/sparc/rtems/score/cpu.h b/cpukit/score/cpu/sparc/rtems/score/cpu.h index defc01a779..e4eb65e88a 100644 --- a/cpukit/score/cpu/sparc/rtems/score/cpu.h +++ b/cpukit/score/cpu/sparc/rtems/score/cpu.h @@ -1186,6 +1186,8 @@ void _CPU_Context_restore( Context_Control *new_context ); + RTEMS_COMPILER_PURE_ATTRIBUTE uint32_t _CPU_SMP_Get_current_processor( void ); + static inline void _CPU_Processor_event_broadcast( void ) { __asm__ volatile ( "" : : : "memory" ); diff --git a/cpukit/score/include/rtems/bspsmp.h b/cpukit/score/include/rtems/bspsmp.h index b712c4fe95..57f5a7a458 100644 --- a/cpukit/score/include/rtems/bspsmp.h +++ b/cpukit/score/include/rtems/bspsmp.h @@ -69,16 +69,6 @@ extern "C" { */ uint32_t bsp_smp_initialize( uint32_t configured_cpu_count ); -/** - * @brief Obtain current CPU index. - * - * This method is invoked by RTEMS when it needs to know the index - * of the CPU it is executing on. - * - * @retval This method returns the current CPU index. - */ -int bsp_smp_processor_id(void) RTEMS_COMPILER_PURE_ATTRIBUTE; - /** * @brief Generate an interprocessor broadcast interrupt. * @@ -105,19 +95,6 @@ void bsp_smp_interrupt_cpu( int cpu ); -/** - * @brief Obtain CPU core number. - * - * This method is invoked by RTEMS when it needs to know which core - * number it is executing on. This is used when it needs to perform - * some action or bookkeeping and needs to distinguish itself from - * the other cores. For example, it may need to realize it needs to - * preempt a thread on another node. - * - * @retval This method returns the Id of the current CPU core. - */ -int bsp_smp_processor_id( void ); - /** * @brief Performs high-level initialization of a secondary processor and runs * the application threads. @@ -156,8 +133,6 @@ void rtems_smp_process_interrupt(void); } #endif -#else - #define bsp_smp_processor_id() 0 #endif /**@}*/ diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h index bb565d92c0..383202c328 100644 --- a/cpukit/score/include/rtems/score/percpu.h +++ b/cpukit/score/include/rtems/score/percpu.h @@ -25,12 +25,7 @@ #include #include #include - - /* - * NOTE: This file MUST be included on non-smp systems as well - * in order to define bsp_smp_processor_id. - */ - #include + #include #endif /** @@ -277,23 +272,23 @@ void _Per_CPU_Wait_for_state( #endif /* - * On a non SMP system, the bsp_smp_processor_id is defined to 0. + * On a non SMP system, the _SMP_Get_current_processor() is defined to 0. * Thus when built for non-SMP, there should be no performance penalty. */ #define _Thread_Heir \ - _Per_CPU_Information[bsp_smp_processor_id()].heir + _Per_CPU_Information[_SMP_Get_current_processor()].heir #define _Thread_Executing \ - _Per_CPU_Information[bsp_smp_processor_id()].executing + _Per_CPU_Information[_SMP_Get_current_processor()].executing #define _ISR_Nest_level \ - _Per_CPU_Information[bsp_smp_processor_id()].isr_nest_level + _Per_CPU_Information[_SMP_Get_current_processor()].isr_nest_level #define _CPU_Interrupt_stack_low \ - _Per_CPU_Information[bsp_smp_processor_id()].interrupt_stack_low + _Per_CPU_Information[_SMP_Get_current_processor()].interrupt_stack_low #define _CPU_Interrupt_stack_high \ - _Per_CPU_Information[bsp_smp_processor_id()].interrupt_stack_high + _Per_CPU_Information[_SMP_Get_current_processor()].interrupt_stack_high #define _Thread_Dispatch_necessary \ - _Per_CPU_Information[bsp_smp_processor_id()].dispatch_necessary + _Per_CPU_Information[_SMP_Get_current_processor()].dispatch_necessary #define _Thread_Time_of_last_context_switch \ - _Per_CPU_Information[bsp_smp_processor_id()].time_of_last_context_switch + _Per_CPU_Information[_SMP_Get_current_processor()].time_of_last_context_switch #endif /* ASM */ diff --git a/cpukit/score/include/rtems/score/smp.h b/cpukit/score/include/rtems/score/smp.h index a01515673f..fedf9ab6d7 100644 --- a/cpukit/score/include/rtems/score/smp.h +++ b/cpukit/score/include/rtems/score/smp.h @@ -71,7 +71,7 @@ extern "C" { * @param[in] cpu The target processor of the message. * @param[in] message The message. */ -void _SMP_Send_message( int cpu, uint32_t message ); +void _SMP_Send_message( uint32_t cpu, uint32_t message ); /** * @brief Request of others CPUs. @@ -116,6 +116,16 @@ void _SMP_Request_other_cores_to_shutdown(void); /** @} */ +#if defined( RTEMS_SMP ) + RTEMS_COMPILER_PURE_ATTRIBUTE static inline uint32_t + _SMP_Get_current_processor( void ) + { + return _CPU_SMP_Get_current_processor(); + } +#else + #define _SMP_Get_current_processor() ( ( uint32_t ) 0 ) +#endif + #ifdef __cplusplus } #endif diff --git a/cpukit/score/include/rtems/score/threaddispatch.h b/cpukit/score/include/rtems/score/threaddispatch.h index e3065da590..7e7afb9161 100644 --- a/cpukit/score/include/rtems/score/threaddispatch.h +++ b/cpukit/score/include/rtems/score/threaddispatch.h @@ -62,8 +62,8 @@ RTEMS_INLINE_ROUTINE bool _Thread_Dispatch_is_enabled(void) #if defined(RTEMS_SMP) typedef struct { SMP_lock_Control lock; - int owner_cpu; - int nest_level; + uint32_t owner_cpu; + uint32_t nest_level; } Thread_Dispatch_disable_level_lock_control; /** diff --git a/cpukit/score/src/smp.c b/cpukit/score/src/smp.c index fce927541b..8e06d04068 100644 --- a/cpukit/score/src/smp.c +++ b/cpukit/score/src/smp.c @@ -30,7 +30,7 @@ void rtems_smp_secondary_cpu_initialize( void ) { - int self = bsp_smp_processor_id(); + uint32_t self = _SMP_Get_current_processor(); Per_CPU_Control *per_cpu = &_Per_CPU_Information[ self ]; Thread_Control *heir; @@ -67,7 +67,7 @@ void rtems_smp_secondary_cpu_initialize( void ) void rtems_smp_process_interrupt( void ) { - int self = bsp_smp_processor_id(); + uint32_t self = _SMP_Get_current_processor(); Per_CPU_Control *per_cpu = &_Per_CPU_Information[ self ]; @@ -107,7 +107,7 @@ void rtems_smp_process_interrupt( void ) } } -void _SMP_Send_message( int cpu, uint32_t message ) +void _SMP_Send_message( uint32_t cpu, uint32_t message ) { Per_CPU_Control *per_cpu = &_Per_CPU_Information[ cpu ]; ISR_Level level; @@ -126,9 +126,9 @@ void _SMP_Send_message( int cpu, uint32_t message ) void _SMP_Broadcast_message( uint32_t message ) { - int self = bsp_smp_processor_id(); - int ncpus = _SMP_Get_processor_count(); - int cpu; + uint32_t self = _SMP_Get_current_processor(); + uint32_t ncpus = _SMP_Get_processor_count(); + uint32_t cpu; for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { if ( cpu != self ) { @@ -146,9 +146,9 @@ void _SMP_Broadcast_message( uint32_t message ) void _SMP_Request_other_cores_to_perform_first_context_switch( void ) { - int self = bsp_smp_processor_id(); - int ncpus = _SMP_Get_processor_count(); - int cpu; + uint32_t self = _SMP_Get_current_processor(); + uint32_t ncpus = _SMP_Get_processor_count(); + uint32_t cpu; for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { Per_CPU_Control *per_cpu = &_Per_CPU_Information[ cpu ]; @@ -165,9 +165,9 @@ void _SMP_Request_other_cores_to_perform_first_context_switch( void ) void _SMP_Request_other_cores_to_dispatch( void ) { if ( _System_state_Is_up( _System_state_Get() ) ) { - int self = bsp_smp_processor_id(); - int ncpus = _SMP_Get_processor_count(); - int cpu; + uint32_t self = _SMP_Get_current_processor(); + uint32_t ncpus = _SMP_Get_processor_count(); + uint32_t cpu; for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { const Per_CPU_Control *per_cpu = &_Per_CPU_Information[ cpu ]; @@ -185,9 +185,9 @@ void _SMP_Request_other_cores_to_dispatch( void ) void _SMP_Request_other_cores_to_shutdown( void ) { - int self = bsp_smp_processor_id(); - int ncpus = _SMP_Get_processor_count(); - int cpu; + uint32_t self = _SMP_Get_current_processor(); + uint32_t ncpus = _SMP_Get_processor_count(); + uint32_t cpu; _SMP_Broadcast_message( RTEMS_BSP_SMP_SHUTDOWN ); diff --git a/cpukit/score/src/threaddispatchdisablelevel.c b/cpukit/score/src/threaddispatchdisablelevel.c index 1f84bfe65c..d5f3ff601b 100644 --- a/cpukit/score/src/threaddispatchdisablelevel.c +++ b/cpukit/score/src/threaddispatchdisablelevel.c @@ -26,7 +26,7 @@ #include #include -#define NO_OWNER_CPU (-1) +#define NO_OWNER_CPU 0xffffffffU void _Thread_Dispatch_initialization( void ) { @@ -48,8 +48,8 @@ uint32_t _Thread_Dispatch_increment_disable_level( void ) { Thread_Dispatch_disable_level_lock_control *level_lock = &_Thread_Dispatch_disable_level_lock; - int self_cpu; ISR_Level isr_level; + uint32_t self_cpu; uint32_t disable_level; _ISR_Disable_on_this_core( isr_level ); @@ -58,7 +58,7 @@ uint32_t _Thread_Dispatch_increment_disable_level( void ) * We must obtain the processor ID after interrupts are disabled since a * non-optimizing compiler may store the value on the stack and read it back. */ - self_cpu = bsp_smp_processor_id(); + self_cpu = _SMP_Get_current_processor(); if ( level_lock->owner_cpu != self_cpu ) { _SMP_lock_Acquire( &level_lock->lock ); diff --git a/testsuites/smptests/smp01/init.c b/testsuites/smptests/smp01/init.c index b47f1b4f50..3e12726efc 100644 --- a/testsuites/smptests/smp01/init.c +++ b/testsuites/smptests/smp01/init.c @@ -14,6 +14,8 @@ #define CONFIGURE_INIT #include "system.h" +#include + void Loop() { volatile int i; @@ -24,14 +26,14 @@ rtems_task Init( rtems_task_argument argument ) { - int i; + uint32_t i; char ch; - int cpu_self; + uint32_t cpu_self; rtems_id id; rtems_status_code status; bool allDone; - cpu_self = bsp_smp_processor_id(); + cpu_self = rtems_smp_get_current_processor(); /* XXX - Delay a bit to allow debug messages from * startup to print. This may need to go away when @@ -63,7 +65,7 @@ rtems_task Init( ); directive_failed( status, "task create" ); - locked_printf(" CPU %d start task TA%c\n", cpu_self, ch); + locked_printf(" CPU %" PRIu32 " start task TA%c\n", cpu_self, ch); status = rtems_task_start( id, Test_task, i+1 ); directive_failed( status, "task start" ); diff --git a/testsuites/smptests/smp01/tasks.c b/testsuites/smptests/smp01/tasks.c index 1b3b5fb5ef..4eb81f1c98 100644 --- a/testsuites/smptests/smp01/tasks.c +++ b/testsuites/smptests/smp01/tasks.c @@ -13,11 +13,13 @@ #include "system.h" +#include + rtems_task Test_task( rtems_task_argument task_index ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -26,11 +28,11 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ Loop(); - locked_printf(" CPU %d running Task %s\n", cpu_num, name); + locked_printf(" CPU %" PRIu32 " running Task %s\n", cpu_num, name); /* Set the flag that the task is up and running */ TaskRan[cpu_num] = true; diff --git a/testsuites/smptests/smp02/init.c b/testsuites/smptests/smp02/init.c index a5ad24bdf5..d053b31377 100644 --- a/testsuites/smptests/smp02/init.c +++ b/testsuites/smptests/smp02/init.c @@ -15,6 +15,7 @@ #include "system.h" #include +#include rtems_task Init( rtems_task_argument argument @@ -22,7 +23,7 @@ rtems_task Init( { int i; char ch; - int cpu_num; + uint32_t cpu_num; rtems_id id; rtems_status_code status; char str[80]; @@ -59,8 +60,8 @@ rtems_task Init( &id ); - cpu_num = bsp_smp_processor_id(); - locked_printf(" CPU %d start task TA%c\n", cpu_num, ch); + cpu_num = rtems_smp_get_current_processor(); + locked_printf(" CPU %" PRIu32 " start task TA%c\n", cpu_num, ch); status = rtems_task_start( id, Test_task, i+1 ); directive_failed( status, str ); } diff --git a/testsuites/smptests/smp02/system.h b/testsuites/smptests/smp02/system.h index 269c7c0b11..ebe243fd9d 100644 --- a/testsuites/smptests/smp02/system.h +++ b/testsuites/smptests/smp02/system.h @@ -50,7 +50,7 @@ rtems_task Test_task( typedef struct { bool IsLocked; - int cpu_num; + uint32_t cpu_num; uint32_t task_index; } Log_t; diff --git a/testsuites/smptests/smp02/tasks.c b/testsuites/smptests/smp02/tasks.c index e3ac062e45..4e7a6255c0 100644 --- a/testsuites/smptests/smp02/tasks.c +++ b/testsuites/smptests/smp02/tasks.c @@ -21,7 +21,7 @@ void Loop(void) { void LogSemaphore( bool obtained, - int cpu_num, + uint32_t cpu_num, uint32_t task_index ){ if (Log_index < LOG_SIZE) { @@ -37,10 +37,10 @@ rtems_task Test_task( rtems_task_argument task_index ) { - int cpu_num; + uint32_t cpu_num; rtems_status_code sc; - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); do { diff --git a/testsuites/smptests/smp03/init.c b/testsuites/smptests/smp03/init.c index 47441b3eec..40b7593aef 100644 --- a/testsuites/smptests/smp03/init.c +++ b/testsuites/smptests/smp03/init.c @@ -15,6 +15,7 @@ #include "system.h" #include +#include void Loop() { volatile int i; @@ -26,18 +27,18 @@ void PrintTaskInfo( const char *task_name ) { - int cpu_num; + uint32_t cpu_num; - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); - locked_printf(" CPU %d running task %s\n", cpu_num, task_name ); + locked_printf(" CPU %" PRIu32 " running task %s\n", cpu_num, task_name ); } rtems_task Init( rtems_task_argument argument ) { - int i; + uint32_t i; char ch = '0'; rtems_id id; rtems_status_code status; diff --git a/testsuites/smptests/smp04/init.c b/testsuites/smptests/smp04/init.c index a532d4604c..8cbfbb88d9 100644 --- a/testsuites/smptests/smp04/init.c +++ b/testsuites/smptests/smp04/init.c @@ -15,6 +15,7 @@ #include "system.h" #include +#include void Loop() { @@ -27,9 +28,9 @@ rtems_task Test_task( rtems_task_argument task_index ) { - int cpu_num; + uint32_t cpu_num; - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); locked_printf(" CPU %d running task TA%" PRIu32 "\n", cpu_num, task_index ); Loop(); TaskRan[task_index] = true; @@ -41,20 +42,20 @@ rtems_task Init( rtems_task_argument argument ) { - int i; + uint32_t i; char ch; rtems_id id; rtems_status_code status; bool allDone; - int cpu_num; + uint32_t cpu_num; Loop(); locked_print_initialize(); locked_printf( "\n\n*** SMP04 TEST ***\n" ); /* Display which cpu is running this init thread. */ - cpu_num = bsp_smp_processor_id(); - locked_printf(" CPU %d running task Init\n", cpu_num ); + cpu_num = rtems_smp_get_current_processor(); + locked_printf(" CPU %" PRIu32 " running task Init\n", cpu_num ); /* Set all Tasks to not ran except for the init task */ TaskRan[0] = true; diff --git a/testsuites/smptests/smp05/init.c b/testsuites/smptests/smp05/init.c index eaa08f5c02..db36e03b4c 100644 --- a/testsuites/smptests/smp05/init.c +++ b/testsuites/smptests/smp05/init.c @@ -18,7 +18,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - locked_printf( "Shut down from CPU %d\n", bsp_smp_processor_id() ); + locked_printf( "Shut down from CPU %" PRIu32 "\n", rtems_smp_get_current_processor() ); locked_printf( "*** END OF TEST SMP05 ***\n" ); rtems_test_exit(0); } @@ -27,9 +27,9 @@ rtems_task Init( rtems_task_argument argument ) { - int i; + uint32_t i; char ch; - int cpu_num; + uint32_t cpu_num; rtems_id id; rtems_status_code status; @@ -49,8 +49,8 @@ rtems_task Init( ); directive_failed( status, "task create" ); - cpu_num = bsp_smp_processor_id(); - locked_printf(" CPU %d start task TA%c\n", cpu_num, ch); + cpu_num = rtems_smp_get_current_processor(); + locked_printf(" CPU %" PRIu32 " start task TA%c\n", cpu_num, ch); status = rtems_task_start( id, Test_task, i+1 ); directive_failed( status, "task start" ); diff --git a/testsuites/smptests/smp06/init.c b/testsuites/smptests/smp06/init.c index 170479b15d..ae3ca769dd 100644 --- a/testsuites/smptests/smp06/init.c +++ b/testsuites/smptests/smp06/init.c @@ -20,15 +20,15 @@ rtems_task Test_task( rtems_task_argument do_exit ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; p = rtems_object_get_name( RTEMS_SELF, 5, name ); rtems_test_assert( p != NULL ); - cpu_num = bsp_smp_processor_id(); - locked_printf(" CPU %d running Task %s\n", cpu_num, name); + cpu_num = rtems_smp_get_current_processor(); + locked_printf(" CPU %" PRIu32 " running Task %s\n", cpu_num, name); Ran = true; @@ -44,7 +44,7 @@ rtems_task Init( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; rtems_id id; rtems_status_code status; @@ -56,7 +56,7 @@ rtems_task Init( rtems_test_assert( rtems_smp_get_processor_count() > 1 ); - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* * Create a task at equal priority. @@ -72,7 +72,7 @@ rtems_task Init( ); directive_failed( status, "task create" ); - locked_printf(" CPU %d start task TA1\n", cpu_num ); + locked_printf(" CPU %" PRIu32 " start task TA1\n", cpu_num ); status = rtems_task_start( id, Test_task, 0 ); directive_failed( status, "task start" ); @@ -94,8 +94,8 @@ rtems_task Init( ); directive_failed( status, "task create" ); - cpu_num = bsp_smp_processor_id(); - locked_printf(" CPU %d start task TA2\n", cpu_num ); + cpu_num = rtems_smp_get_current_processor(); + locked_printf(" CPU %" PRIu32 " start task TA2\n", cpu_num ); status = rtems_task_start( id, Test_task, 1 ); directive_failed( status, "task start" ); diff --git a/testsuites/smptests/smp07/init.c b/testsuites/smptests/smp07/init.c index 04bf4f2d59..f6315544b8 100644 --- a/testsuites/smptests/smp07/init.c +++ b/testsuites/smptests/smp07/init.c @@ -22,7 +22,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; rtems_status_code sc; char name[5]; char *p; @@ -32,10 +32,10 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ - locked_printf(" CPU %d runnng Task %s and blocking\n", cpu_num, name); + locked_printf(" CPU %" PRIu32 " runnng Task %s and blocking\n", cpu_num, name); sc = rtems_semaphore_obtain( Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); directive_failed( sc,"obtain in test task"); @@ -47,7 +47,7 @@ rtems_task Test_task( /* Print that the task is up and running. */ locked_printf( - " CPU %d running Task %s after semaphore release\n", + " CPU %" PRIu32 " running Task %s after semaphore release\n", cpu_num, name ); @@ -110,7 +110,7 @@ rtems_task Init( ); directive_failed( status, "task create" ); - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); locked_printf(" CPU %d start task TA1\n", cpu_num ); status = rtems_task_start( id, Test_task, 1 ); directive_failed( status, "task start" ); diff --git a/testsuites/smptests/smp08/init.c b/testsuites/smptests/smp08/init.c index 0c7740b32e..897fe98a36 100644 --- a/testsuites/smptests/smp08/init.c +++ b/testsuites/smptests/smp08/init.c @@ -19,13 +19,13 @@ void PrintTaskInfo( rtems_time_of_day *_tb ) { - int cpu_num; + uint32_t cpu_num; - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print the cpu number and task name */ locked_printf( - " CPU %d running task %s - rtems_clock_get_tod " + " CPU %" PRIu32 " running task %s - rtems_clock_get_tod " "%02" PRId32 ":%02" PRId32 ":%02" PRId32 " %02" PRId32 "/%02" PRId32 "/%04" PRId32 "\n", cpu_num, diff --git a/testsuites/smptests/smp08/tasks.c b/testsuites/smptests/smp08/tasks.c index 762120c78f..96d25de86e 100644 --- a/testsuites/smptests/smp08/tasks.c +++ b/testsuites/smptests/smp08/tasks.c @@ -21,7 +21,7 @@ rtems_task Test_task( rtems_time_of_day time; uint32_t task_index; rtems_status_code status; - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -34,7 +34,7 @@ rtems_task Test_task( for ( ; ; ) { /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); status = rtems_clock_get_tod( &time ); if ( time.second >= 35 ) { diff --git a/testsuites/smptests/smp09/init.c b/testsuites/smptests/smp09/init.c index 976cb35195..e21ef687ba 100644 --- a/testsuites/smptests/smp09/init.c +++ b/testsuites/smptests/smp09/init.c @@ -30,9 +30,9 @@ rtems_task Init( rtems_task_argument argument ) { - int i; + uint32_t i; char ch; - int cpu_num; + uint32_t cpu_num; rtems_id id; rtems_status_code status; @@ -55,8 +55,8 @@ rtems_task Init( ); directive_failed( status, "task create" ); - cpu_num = bsp_smp_processor_id(); - locked_printf(" CPU %d start task TA%c\n", cpu_num, ch); + cpu_num = rtems_smp_get_current_processor(); + locked_printf(" CPU %" PRIu32 " start task TA%c\n", cpu_num, ch); status = rtems_task_start( id, Test_task, i+1 ); directive_failed( status, "task start" ); diff --git a/testsuites/smptests/smpatomic01/tasks.c b/testsuites/smptests/smpatomic01/tasks.c index 28afad9d9f..65ad81b0b9 100644 --- a/testsuites/smptests/smpatomic01/tasks.c +++ b/testsuites/smptests/smpatomic01/tasks.c @@ -39,7 +39,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -48,7 +48,7 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ /* test relaxed barrier */ diff --git a/testsuites/smptests/smpatomic02/tasks.c b/testsuites/smptests/smpatomic02/tasks.c index 8ece4610ce..1017befbea 100644 --- a/testsuites/smptests/smpatomic02/tasks.c +++ b/testsuites/smptests/smpatomic02/tasks.c @@ -39,7 +39,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -48,7 +48,7 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ /* test relaxed barrier */ diff --git a/testsuites/smptests/smpatomic03/tasks.c b/testsuites/smptests/smpatomic03/tasks.c index edc9a637ea..b74bd9d247 100644 --- a/testsuites/smptests/smpatomic03/tasks.c +++ b/testsuites/smptests/smpatomic03/tasks.c @@ -42,7 +42,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -51,7 +51,7 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ /* test relaxed barrier */ diff --git a/testsuites/smptests/smpatomic04/tasks.c b/testsuites/smptests/smpatomic04/tasks.c index 9bef84e304..54f0661431 100644 --- a/testsuites/smptests/smpatomic04/tasks.c +++ b/testsuites/smptests/smpatomic04/tasks.c @@ -42,7 +42,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -51,7 +51,7 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ /* test relaxed barrier */ diff --git a/testsuites/smptests/smpatomic05/tasks.c b/testsuites/smptests/smpatomic05/tasks.c index d0447f3465..57a4f8c55e 100644 --- a/testsuites/smptests/smpatomic05/tasks.c +++ b/testsuites/smptests/smpatomic05/tasks.c @@ -42,7 +42,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -51,7 +51,7 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ /* test relaxed barrier */ diff --git a/testsuites/smptests/smpatomic06/tasks.c b/testsuites/smptests/smpatomic06/tasks.c index c368bb9803..a28cffbe3b 100644 --- a/testsuites/smptests/smpatomic06/tasks.c +++ b/testsuites/smptests/smpatomic06/tasks.c @@ -42,7 +42,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -51,7 +51,7 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ /* test relaxed barrier */ diff --git a/testsuites/smptests/smpatomic07/tasks.c b/testsuites/smptests/smpatomic07/tasks.c index 21802d650f..308498a1a4 100644 --- a/testsuites/smptests/smpatomic07/tasks.c +++ b/testsuites/smptests/smpatomic07/tasks.c @@ -58,7 +58,7 @@ rtems_task Test_task( rtems_task_argument argument ) { - int cpu_num; + uint32_t cpu_num; char name[5]; char *p; @@ -67,7 +67,7 @@ rtems_task Test_task( rtems_test_assert( p != NULL ); /* Get the CPU Number */ - cpu_num = bsp_smp_processor_id(); + cpu_num = rtems_smp_get_current_processor(); /* Print that the task is up and running. */ /* test relaxed barrier */ diff --git a/testsuites/smptests/smplock01/init.c b/testsuites/smptests/smplock01/init.c index 2fcc507698..ed578cbe21 100644 --- a/testsuites/smptests/smplock01/init.c +++ b/testsuites/smptests/smplock01/init.c @@ -298,8 +298,8 @@ static void run_tests( static void task(rtems_task_argument arg) { global_context *ctx = (global_context *) arg; - int cpu_count = (int) rtems_smp_get_processor_count(); - int cpu_self = rtems_smp_get_current_processor(); + uint32_t cpu_count = rtems_smp_get_processor_count(); + uint32_t cpu_self = rtems_smp_get_current_processor(); rtems_status_code sc; barrier_state bs = BARRIER_STATE_INITIALIZER; @@ -312,9 +312,9 @@ static void task(rtems_task_argument arg) static void test(void) { global_context *ctx = &context; - int cpu_count = (int) rtems_smp_get_processor_count(); - int cpu_self = rtems_smp_get_current_processor(); - int cpu; + uint32_t cpu_count = rtems_smp_get_processor_count(); + uint32_t cpu_self = rtems_smp_get_current_processor(); + uint32_t cpu; int test; rtems_status_code sc; barrier_state bs = BARRIER_STATE_INITIALIZER; @@ -356,7 +356,7 @@ static void test(void) sum += local_counter; printf( - "\tprocessor %i, local counter %lu\n", + "\tprocessor %" PRIu32 ", local counter %lu\n", cpu, local_counter ); -- cgit v1.2.3