static void delay_clock_tick(test_context *ctx) { rtems_interrupt_level level; const Per_CPU_Control *cpu_self = _Per_CPU_Get_by_index(0); const Per_CPU_Control *cpu_other = _Per_CPU_Get_by_index(1); uint64_t ticks; rtems_test_assert(rtems_get_current_processor() == 0); rtems_test_spin_until_next_tick(); ticks = cpu_self->Watchdog.ticks; rtems_interrupt_local_disable(level); /* (A) */ wait(ctx, &ctx->delay_barrier_state); /* (B) */ wait(ctx, &ctx->delay_barrier_state); rtems_test_assert(cpu_self->Watchdog.ticks == ticks); rtems_test_assert(cpu_other->Watchdog.ticks == ticks + 1); rtems_interrupt_local_enable(level); rtems_test_assert(cpu_self->Watchdog.ticks == ticks + 1); rtems_test_assert(cpu_other->Watchdog.ticks == ticks + 1); /* (C) */ wait(ctx, &ctx->delay_barrier_state); }
rtems_task High_task( rtems_task_argument argument ) { rtems_interrupt_level level; _Thread_Dispatch_disable(); benchmark_timer_initialize(); rtems_interrupt_local_disable( level ); isr_disable_time = benchmark_timer_read(); benchmark_timer_initialize(); #if defined(RTEMS_SMP) rtems_interrupt_local_enable( level ); rtems_interrupt_local_disable( level ); #else rtems_interrupt_flash( level ); #endif isr_flash_time = benchmark_timer_read(); benchmark_timer_initialize(); rtems_interrupt_local_enable( level ); isr_enable_time = benchmark_timer_read(); _Thread_Dispatch_enable( _Per_CPU_Get() ); benchmark_timer_initialize(); _Thread_Dispatch_disable(); thread_disable_dispatch_time = benchmark_timer_read(); benchmark_timer_initialize(); _Thread_Dispatch_enable( _Per_CPU_Get() ); thread_enable_dispatch_time = benchmark_timer_read(); benchmark_timer_initialize(); _Thread_Set_state( _Thread_Get_executing(), STATES_SUSPENDED ); thread_set_state_time = benchmark_timer_read(); set_thread_dispatch_necessary( true ); benchmark_timer_initialize(); _Thread_Dispatch(); /* dispatches Middle_task */ }
static void enable_fiq(void) { #ifdef BSP_ARM_GIC_ENABLE_FIQ_FOR_GROUP_0 rtems_interrupt_level level; rtems_interrupt_local_disable(level); level &= ~ARM_PSR_F; rtems_interrupt_local_enable(level); #endif }