diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-04-29 16:09:35 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-05-05 08:26:27 +0200 |
commit | e239760f6a6a5e31331487548d56c4a7581ed7cc (patch) | |
tree | f8f80f50df7562c7bb2209747c8544589212f45f /cpukit/score/include/rtems/score/schedulerimpl.h | |
parent | doc: Add SMP glossary (diff) | |
download | rtems-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.h | 21 |
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( |