From 1f5bee3d85405d42a7f35caf3ff0c190789afd60 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 7 Nov 2016 16:54:40 +0100 Subject: score: Add and use Thread_Control::is_idle Update #2797. --- c/src/lib/libbsp/shared/clockdrv_shell.h | 4 +--- c/src/lib/libbsp/sparc/shared/timer/tlib_ckinit.c | 3 +-- c/src/lib/libcpu/bfin/clock/clock.c | 6 +----- c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c | 6 +----- cpukit/score/include/rtems/score/thread.h | 2 ++ cpukit/score/src/threadcreateidle.c | 1 + testsuites/sptests/spintrcritical_support/intrcritical.c | 8 +------- 7 files changed, 8 insertions(+), 22 deletions(-) diff --git a/c/src/lib/libbsp/shared/clockdrv_shell.h b/c/src/lib/libbsp/shared/clockdrv_shell.h index 47658732b4..2b90fe6f82 100644 --- a/c/src/lib/libbsp/shared/clockdrv_shell.h +++ b/c/src/lib/libbsp/shared/clockdrv_shell.h @@ -139,9 +139,7 @@ rtems_isr Clock_isr( if (!rtems_configuration_is_smp_enabled()) { while ( - _Thread_Heir == _Thread_Executing - && _Thread_Executing->Start.Entry.Kinds.Idle.entry - == rtems_configuration_get_idle_task() + _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle ) { ISR_lock_Context lock_context; diff --git a/c/src/lib/libbsp/sparc/shared/timer/tlib_ckinit.c b/c/src/lib/libbsp/sparc/shared/timer/tlib_ckinit.c index 58e95d1e64..2848f4cb3c 100644 --- a/c/src/lib/libbsp/sparc/shared/timer/tlib_ckinit.c +++ b/c/src/lib/libbsp/sparc/shared/timer/tlib_ckinit.c @@ -132,8 +132,7 @@ void Clock_isr(void *arg_unused) #ifdef CLOCK_DRIVER_USE_FAST_IDLE do { tlib_tc_tick(); - } while ( _Thread_Executing == _Thread_Idle && - _Thread_Heir == _Thread_Executing); + } while ( _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle ); return; diff --git a/c/src/lib/libcpu/bfin/clock/clock.c b/c/src/lib/libcpu/bfin/clock/clock.c index e8c078ff8e..d46ab3581e 100644 --- a/c/src/lib/libcpu/bfin/clock/clock.c +++ b/c/src/lib/libcpu/bfin/clock/clock.c @@ -37,11 +37,7 @@ static rtems_isr clockISR(rtems_vector_number vector) { #if CLOCK_DRIVER_USE_FAST_IDLE do { rtems_clock_tick(); - } while ( - _Thread_Heir == _Thread_Executing - && _Thread_Executing->Start.Entry.Kinds.Idle.entry - == rtems_configuration_get_idle_task() - ); + } while ( _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle ); #else rtems_clock_tick(); #endif diff --git a/c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c b/c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c index 17a66531e9..c9bb16c451 100644 --- a/c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c +++ b/c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c @@ -105,11 +105,7 @@ static void clockHandler(void) tb = ppc_time_base(); rtems_timecounter_tick(); - while ( - _Thread_Heir == _Thread_Executing - && _Thread_Executing->Start.Entry.Kinds.Idle.entry - == rtems_configuration_get_idle_task() - ) { + while ( _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle ) { tb += Clock_Decrementer_value; ppc_set_time_base( tb ); rtems_timecounter_tick(); diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h index 7711f706f3..95b977e7ba 100644 --- a/cpukit/score/include/rtems/score/thread.h +++ b/cpukit/score/include/rtems/score/thread.h @@ -754,6 +754,8 @@ struct _Thread_Control { SMP_lock_Stats Potpourri_stats; #endif + /** This field is true if the thread is an idle thread. */ + bool is_idle; #if defined(RTEMS_MULTIPROCESSING) /** This field is true if the thread is offered globally */ bool is_global; diff --git a/cpukit/score/src/threadcreateidle.c b/cpukit/score/src/threadcreateidle.c index 89e5d60a18..d8dd2b4197 100644 --- a/cpukit/score/src/threadcreateidle.c +++ b/cpukit/score/src/threadcreateidle.c @@ -72,6 +72,7 @@ static void _Thread_Create_idle_for_CPU( Per_CPU_Control *cpu ) cpu->heir = cpu->executing = idle; + idle->is_idle = true; idle->Start.Entry.adaptor = _Thread_Entry_adaptor_idle; idle->Start.Entry.Kinds.Idle.entry = rtems_configuration_get_idle_task(); diff --git a/testsuites/sptests/spintrcritical_support/intrcritical.c b/testsuites/sptests/spintrcritical_support/intrcritical.c index b831cf148f..a9fcdd2a37 100644 --- a/testsuites/sptests/spintrcritical_support/intrcritical.c +++ b/testsuites/sptests/spintrcritical_support/intrcritical.c @@ -173,18 +173,12 @@ bool interrupt_critical_section_test_support_delay(void) return interrupt_critical_busy_wait(); } -static bool is_idle( const Thread_Control *thread ) -{ - return thread->Start.Entry.Kinds.Idle.entry - == rtems_configuration_get_idle_task(); -} - static void thread_switch( Thread_Control *executing, Thread_Control *heir ) { (void) executing; (void) heir; - if ( interrupt_critical.t1 == 0 && is_idle( heir ) ) { + if ( interrupt_critical.t1 == 0 && heir->is_idle ) { interrupt_critical.t1 = rtems_clock_get_uptime_nanoseconds(); } } -- cgit v1.2.3