summaryrefslogtreecommitdiffstats
path: root/cpukit/score
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-27 11:08:54 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-28 19:07:37 +0200
commit4adaed7328e39eac4fe1879cba61919e74965cc8 (patch)
tree6289a5896a12a38381921063622daaa1196d40de /cpukit/score
parentlibcsupport: Consistent rtems_putc() output (diff)
downloadrtems-4adaed7328e39eac4fe1879cba61919e74965cc8.tar.bz2
score: Remove processor event broadcast/receive
Remove _CPU_SMP_Processor_event_broadcast() and _CPU_SMP_Processor_event_receive(). These functions are hard to use since they are subject to the lost wake up problem.
Diffstat (limited to 'cpukit/score')
-rw-r--r--cpukit/score/cpu/aarch64/include/rtems/score/cpu.h12
-rw-r--r--cpukit/score/cpu/arm/include/rtems/score/cpu.h12
-rw-r--r--cpukit/score/cpu/i386/include/rtems/score/cpu.h10
-rw-r--r--cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h29
-rw-r--r--cpukit/score/cpu/powerpc/include/rtems/score/cpu.h10
-rw-r--r--cpukit/score/cpu/riscv/include/rtems/score/cpu.h10
-rw-r--r--cpukit/score/cpu/sparc/include/rtems/score/cpu.h10
-rw-r--r--cpukit/score/cpu/x86_64/include/rtems/score/cpu.h10
-rw-r--r--cpukit/score/src/percpu.c20
-rw-r--r--cpukit/score/src/percpustatewait.c14
-rw-r--r--cpukit/score/src/smpmulticastaction.c4
11 files changed, 17 insertions, 124 deletions
diff --git a/cpukit/score/cpu/aarch64/include/rtems/score/cpu.h b/cpukit/score/cpu/aarch64/include/rtems/score/cpu.h
index 316079a6cd..595f6c7351 100644
--- a/cpukit/score/cpu/aarch64/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/aarch64/include/rtems/score/cpu.h
@@ -360,18 +360,6 @@ RTEMS_NO_RETURN void _CPU_Context_restore( Context_Control *new_context );
{
__asm__ volatile ( "wfe" : : : "memory" );
}
-
- static inline void _CPU_SMP_Processor_event_broadcast( void )
- {
- _AARCH64_Data_synchronization_barrier();
- _AARCH64_Send_event();
- }
-
- static inline void _CPU_SMP_Processor_event_receive( void )
- {
- _AARCH64_Wait_for_event();
- _AARCH64_Data_memory_barrier();
- }
#endif
diff --git a/cpukit/score/cpu/arm/include/rtems/score/cpu.h b/cpukit/score/cpu/arm/include/rtems/score/cpu.h
index dcda4d525c..b554aa263e 100644
--- a/cpukit/score/cpu/arm/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/arm/include/rtems/score/cpu.h
@@ -510,18 +510,6 @@ RTEMS_NO_RETURN void _CPU_Context_restore( Context_Control *new_context );
{
__asm__ volatile ( "wfe" : : : "memory" );
}
-
- static inline void _CPU_SMP_Processor_event_broadcast( void )
- {
- _ARM_Data_synchronization_barrier();
- _ARM_Send_event();
- }
-
- static inline void _CPU_SMP_Processor_event_receive( void )
- {
- _ARM_Wait_for_event();
- _ARM_Data_memory_barrier();
- }
#endif
diff --git a/cpukit/score/cpu/i386/include/rtems/score/cpu.h b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
index 0cb4590087..813ed526d8 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
@@ -470,16 +470,6 @@ void _CPU_Context_Initialize(
uint32_t _CPU_SMP_Get_current_processor( void );
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );
-
- static inline void _CPU_SMP_Processor_event_broadcast( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
-
- static inline void _CPU_SMP_Processor_event_receive( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
#endif
#define _CPU_Context_Initialize_fp( _fp_area ) \
diff --git a/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
index 120b51b633..c4cb512e20 100644
--- a/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
@@ -1348,35 +1348,6 @@ static inline CPU_Counter_ticks _CPU_Counter_difference(
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );
/**
- * @brief Broadcasts a processor event.
- *
- * Some architectures provide a low-level synchronization primitive for
- * processors in a multi-processor environment. Processors waiting for this
- * event may go into a low-power state and stop generating system bus
- * transactions. This function must ensure that preceding store operations
- * can be observed by other processors.
- *
- * @see _CPU_SMP_Processor_event_receive().
- */
- static inline void _CPU_SMP_Processor_event_broadcast( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
-
- /**
- * @brief Receives a processor event.
- *
- * This function will wait for the processor event and may wait forever if no
- * such event arrives.
- *
- * @see _CPU_SMP_Processor_event_broadcast().
- */
- static inline void _CPU_SMP_Processor_event_receive( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
-
- /**
* @brief Gets the is executing indicator of the thread context.
*
* @param[in] context The context.
diff --git a/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h b/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h
index f22e1cd7ec..ee02bd4ee4 100644
--- a/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h
@@ -973,16 +973,6 @@ void _CPU_Context_restore_fp(
}
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );
-
- static inline void _CPU_SMP_Processor_event_broadcast( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
-
- static inline void _CPU_SMP_Processor_event_receive( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
#endif
typedef struct {
diff --git a/cpukit/score/cpu/riscv/include/rtems/score/cpu.h b/cpukit/score/cpu/riscv/include/rtems/score/cpu.h
index d9056d0ad1..16dde8204c 100644
--- a/cpukit/score/cpu/riscv/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/riscv/include/rtems/score/cpu.h
@@ -474,16 +474,6 @@ static inline uint32_t _CPU_SMP_Get_current_processor( void )
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );
-static inline void _CPU_SMP_Processor_event_broadcast( void )
-{
- __asm__ volatile ( "" : : : "memory" );
-}
-
-static inline void _CPU_SMP_Processor_event_receive( void )
-{
- __asm__ volatile ( "" : : : "memory" );
-}
-
static inline bool _CPU_Context_Get_is_executing(
const Context_Control *context
)
diff --git a/cpukit/score/cpu/sparc/include/rtems/score/cpu.h b/cpukit/score/cpu/sparc/include/rtems/score/cpu.h
index 0abc929c54..910ec83a87 100644
--- a/cpukit/score/cpu/sparc/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc/include/rtems/score/cpu.h
@@ -1004,16 +1004,6 @@ RTEMS_NO_RETURN void _CPU_Context_restore( Context_Control *new_context );
#endif
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );
-
- static inline void _CPU_SMP_Processor_event_broadcast( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
-
- static inline void _CPU_SMP_Processor_event_receive( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
#endif
#if defined(SPARC_USE_LAZY_FP_SWITCH)
diff --git a/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h b/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h
index 1e97250188..056c0224a9 100644
--- a/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h
@@ -338,16 +338,6 @@ static inline CPU_Counter_ticks _CPU_Counter_difference(
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );
- static inline void _CPU_SMP_Processor_event_broadcast( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
-
- static inline void _CPU_SMP_Processor_event_receive( void )
- {
- __asm__ volatile ( "" : : : "memory" );
- }
-
static inline bool _CPU_Context_Get_is_executing(
const Context_Control *context
)
diff --git a/cpukit/score/src/percpu.c b/cpukit/score/src/percpu.c
index e254f306eb..7fbc1c8637 100644
--- a/cpukit/score/src/percpu.c
+++ b/cpukit/score/src/percpu.c
@@ -55,7 +55,9 @@ static void _Per_CPU_State_busy_wait(
Per_CPU_State new_state
)
{
- Per_CPU_State state = cpu->state;
+ Per_CPU_State state;
+
+ state = _Per_CPU_Get_state( cpu );
switch ( new_state ) {
case PER_CPU_STATE_REQUEST_START_MULTITASKING:
@@ -64,8 +66,7 @@ static void _Per_CPU_State_busy_wait(
&& state != PER_CPU_STATE_SHUTDOWN
) {
_Per_CPU_Perform_jobs( cpu );
- _CPU_SMP_Processor_event_receive();
- state = cpu->state;
+ state = _Per_CPU_Get_state( cpu );
}
break;
case PER_CPU_STATE_UP:
@@ -74,8 +75,7 @@ static void _Per_CPU_State_busy_wait(
&& state != PER_CPU_STATE_SHUTDOWN
) {
_Per_CPU_Perform_jobs( cpu );
- _CPU_SMP_Processor_event_receive();
- state = cpu->state;
+ state = _Per_CPU_Get_state( cpu );
}
break;
default:
@@ -143,8 +143,8 @@ void _Per_CPU_State_change(
_Per_CPU_State_acquire( &lock_context );
- next_state = _Per_CPU_State_get_next( cpu->state, new_state );
- cpu->state = next_state;
+ next_state = _Per_CPU_State_get_next( _Per_CPU_Get_state( cpu ), new_state );
+ _Per_CPU_Set_state( cpu, next_state );
if ( next_state == PER_CPU_STATE_SHUTDOWN ) {
uint32_t cpu_max = rtems_configuration_get_maximum_processors();
@@ -154,7 +154,7 @@ void _Per_CPU_State_change(
Per_CPU_Control *cpu_other = _Per_CPU_Get_by_index( cpu_index );
if ( cpu_other != cpu ) {
- switch ( cpu_other->state ) {
+ switch ( _Per_CPU_Get_state( cpu_other ) ) {
case PER_CPU_STATE_UP:
_SMP_Send_message( cpu_index, SMP_MESSAGE_SHUTDOWN );
break;
@@ -163,13 +163,11 @@ void _Per_CPU_State_change(
break;
}
- cpu_other->state = PER_CPU_STATE_SHUTDOWN;
+ _Per_CPU_Set_state( cpu_other, PER_CPU_STATE_SHUTDOWN );
}
}
}
- _CPU_SMP_Processor_event_broadcast();
-
_Per_CPU_State_release( &lock_context );
if (
diff --git a/cpukit/score/src/percpustatewait.c b/cpukit/score/src/percpustatewait.c
index 9d9f590df5..7186626897 100644
--- a/cpukit/score/src/percpustatewait.c
+++ b/cpukit/score/src/percpustatewait.c
@@ -33,8 +33,11 @@ bool _Per_CPU_State_wait_for_non_initial_state(
uint32_t timeout_in_ns
)
{
- const Per_CPU_Control *cpu = _Per_CPU_Get_by_index( cpu_index );
- Per_CPU_State state = cpu->state;
+ const Per_CPU_Control *cpu;
+ Per_CPU_State state;
+
+ cpu = _Per_CPU_Get_by_index( cpu_index );
+ state = _Per_CPU_Get_state( cpu );
if ( timeout_in_ns > 0 ) {
rtems_counter_ticks ticks =
@@ -45,19 +48,16 @@ bool _Per_CPU_State_wait_for_non_initial_state(
while ( ticks > delta && state == PER_CPU_STATE_INITIAL ) {
rtems_counter_ticks b;
- _CPU_SMP_Processor_event_receive();
- state = cpu->state;
+ state = _Per_CPU_Get_state( cpu );
ticks -= delta;
-
b = rtems_counter_read();
delta = rtems_counter_difference( b, a );
a = b;
}
} else {
while ( state == PER_CPU_STATE_INITIAL ) {
- _CPU_SMP_Processor_event_receive();
- state = cpu->state;
+ state = _Per_CPU_Get_state( cpu );
}
}
diff --git a/cpukit/score/src/smpmulticastaction.c b/cpukit/score/src/smpmulticastaction.c
index 55c495a2cf..5d65ef14ca 100644
--- a/cpukit/score/src/smpmulticastaction.c
+++ b/cpukit/score/src/smpmulticastaction.c
@@ -122,12 +122,10 @@ void _Per_CPU_Wait_for_job(
_Atomic_Load_ulong( &job->done, ATOMIC_ORDER_ACQUIRE )
!= PER_CPU_JOB_DONE
) {
- switch ( cpu->state ) {
+ switch ( _Per_CPU_Get_state( cpu ) ) {
case PER_CPU_STATE_INITIAL:
case PER_CPU_STATE_READY_TO_START_MULTITASKING:
case PER_CPU_STATE_REQUEST_START_MULTITASKING:
- _CPU_SMP_Processor_event_broadcast();
- /* Fall through */
case PER_CPU_STATE_UP:
/*
* Calling this function with the current processor is intentional.