diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-07 08:30:20 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-10 07:49:40 +0200 |
commit | 4a1bdd3045fa00c95924deb27bc0ffab7e8aaf14 (patch) | |
tree | 78f8c214621f231217d44ec7732be144627d2d6a /cpukit/score/include | |
parent | score: Add simple affinity support to EDF SMP (diff) | |
download | rtems-4a1bdd3045fa00c95924deb27bc0ffab7e8aaf14.tar.bz2 |
score: Fix set scheduler
Ensure that the thread processor affinity fits the new scheduler
instance.
Update #3059.
Diffstat (limited to '')
-rw-r--r-- | cpukit/score/include/rtems/score/schedulerimpl.h | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/cpukit/score/include/rtems/score/schedulerimpl.h b/cpukit/score/include/rtems/score/schedulerimpl.h index cb9fd7e841..85fcace760 100644 --- a/cpukit/score/include/rtems/score/schedulerimpl.h +++ b/cpukit/score/include/rtems/score/schedulerimpl.h @@ -1092,10 +1092,22 @@ RTEMS_INLINE_ROUTINE Status_Control _Scheduler_Set( } old_scheduler = _Thread_Scheduler_get_home( the_thread ); + new_scheduler_node = _Thread_Scheduler_get_node_by_index( + the_thread, + _Scheduler_Get_index( new_scheduler ) + ); _Scheduler_Acquire_critical( new_scheduler, &lock_context ); - if ( _Scheduler_Get_processor_count( new_scheduler ) == 0 ) { + if ( + _Scheduler_Get_processor_count( new_scheduler ) == 0 + || !( *new_scheduler->Operations.set_affinity )( + new_scheduler, + the_thread, + new_scheduler_node, + &the_thread->Scheduler.Affinity + ) + ) { _Scheduler_Release_critical( new_scheduler, &lock_context ); _Priority_Plain_insert( &old_scheduler_node->Wait.Priority, @@ -1110,10 +1122,6 @@ RTEMS_INLINE_ROUTINE Status_Control _Scheduler_Set( _Scheduler_Release_critical( new_scheduler, &lock_context ); _Thread_Scheduler_process_requests( the_thread ); - new_scheduler_node = _Thread_Scheduler_get_node_by_index( - the_thread, - _Scheduler_Get_index( new_scheduler ) - ); #else new_scheduler_node = old_scheduler_node; #endif |