summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/schedulerimpl.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-04-29 16:09:35 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-05-05 08:26:27 +0200
commite239760f6a6a5e31331487548d56c4a7581ed7cc (patch)
treef8f80f50df7562c7bb2209747c8544589212f45f /cpukit/score/include/rtems/score/schedulerimpl.h
parentdoc: Add SMP glossary (diff)
downloadrtems-e239760f6a6a5e31331487548d56c4a7581ed7cc.tar.bz2
score: SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS
Avoid the SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS fatal error and make it a run-time error in rtems_scheduler_ident() and _Scheduler_Get_by_id().
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(