summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/schedulerimpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/include/rtems/score/schedulerimpl.h')
-rw-r--r--cpukit/score/include/rtems/score/schedulerimpl.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/cpukit/score/include/rtems/score/schedulerimpl.h b/cpukit/score/include/rtems/score/schedulerimpl.h
index 35054dfd3b..6fad4e2190 100644
--- a/cpukit/score/include/rtems/score/schedulerimpl.h
+++ b/cpukit/score/include/rtems/score/schedulerimpl.h
@@ -571,6 +571,19 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Change_priority_if_higher(
}
}
+RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_processor_count(
+ const Scheduler_Control *scheduler
+)
+{
+#if defined(RTEMS_SMP)
+ return scheduler->context->processor_count;
+#else
+ (void) scheduler;
+
+ return 1;
+#endif
+}
+
RTEMS_INLINE_ROUTINE Objects_Id _Scheduler_Build_id( uint32_t scheduler_index )
{
return _Objects_Build_id(
@@ -583,15 +596,17 @@ RTEMS_INLINE_ROUTINE Objects_Id _Scheduler_Build_id( uint32_t scheduler_index )
RTEMS_INLINE_ROUTINE bool _Scheduler_Get_by_id(
Objects_Id id,
- const Scheduler_Control **scheduler
+ const Scheduler_Control **scheduler_p
)
{
uint32_t minimum_id = _Scheduler_Build_id( 0 );
uint32_t index = id - minimum_id;
+ const Scheduler_Control *scheduler = &_Scheduler_Table[ index ];
- *scheduler = &_Scheduler_Table[ index ];
+ *scheduler_p = scheduler;
- return index < _Scheduler_Count;
+ return index < _Scheduler_Count
+ && _Scheduler_Get_processor_count( scheduler ) > 0;
}
RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_index(