From 4a1bdd3045fa00c95924deb27bc0ffab7e8aaf14 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 7 Jul 2017 08:30:20 +0200 Subject: score: Fix set scheduler Ensure that the thread processor affinity fits the new scheduler instance. Update #3059. --- cpukit/score/include/rtems/score/schedulerimpl.h | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'cpukit/score/include/rtems') 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 -- cgit v1.2.3