bool _Per_CPU_State_wait_for_non_initial_state( uint32_t cpu_index, uint32_t timeout_in_ns ) { const Per_CPU_Control *cpu = _Per_CPU_Get_by_index( cpu_index ); Per_CPU_State state = cpu->state; if ( timeout_in_ns > 0 ) { rtems_counter_ticks ticks = rtems_counter_nanoseconds_to_ticks( timeout_in_ns ); rtems_counter_ticks a = rtems_counter_read(); rtems_counter_ticks delta = 0; while ( ticks > delta && state == PER_CPU_STATE_INITIAL ) { rtems_counter_ticks b; _CPU_SMP_Processor_event_receive(); state = cpu->state; 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; } } return state != PER_CPU_STATE_INITIAL; }
void _Per_CPU_Wait_for_state( const Per_CPU_Control *per_cpu, Per_CPU_State desired_state ) { while ( per_cpu->state != desired_state ) { _CPU_SMP_Processor_event_receive(); } }
static void wait_for_state(const test_context *ctx, test_state desired_state) { while ( ctx->state != desired_state ) { _CPU_SMP_Processor_event_receive(); } }