summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-07 16:54:40 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-09 15:27:30 +0100
commit1f5bee3d85405d42a7f35caf3ff0c190789afd60 (patch)
treed02b999781b8a135d079d23307b4396eeafc51fd
parentscore: Rename _Scheduler_Assignments (diff)
downloadrtems-1f5bee3d85405d42a7f35caf3ff0c190789afd60.tar.bz2
score: Add and use Thread_Control::is_idle
Update #2797.
-rw-r--r--c/src/lib/libbsp/shared/clockdrv_shell.h4
-rw-r--r--c/src/lib/libbsp/sparc/shared/timer/tlib_ckinit.c3
-rw-r--r--c/src/lib/libcpu/bfin/clock/clock.c6
-rw-r--r--c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c6
-rw-r--r--cpukit/score/include/rtems/score/thread.h2
-rw-r--r--cpukit/score/src/threadcreateidle.c1
-rw-r--r--testsuites/sptests/spintrcritical_support/intrcritical.c8
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();
}
}