From 8744498752ad4f0eaf9fb5640c6a0e0f2dc92fda Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 27 Oct 2017 09:04:53 +0200 Subject: score: Fix _Scheduler_Set_affinity() --- cpukit/score/src/scheduleredfsmp.c | 9 ++++----- cpukit/score/src/schedulersetaffinity.c | 7 +++++++ 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'cpukit/score/src') diff --git a/cpukit/score/src/scheduleredfsmp.c b/cpukit/score/src/scheduleredfsmp.c index 3a1b1a934e..82255b0f95 100644 --- a/cpukit/score/src/scheduleredfsmp.c +++ b/cpukit/score/src/scheduleredfsmp.c @@ -753,19 +753,18 @@ bool _Scheduler_EDF_SMP_Set_affinity( { Scheduler_Context *context; Processor_mask a; - Processor_mask b; + uint32_t count; uint32_t rqi; context = _Scheduler_Get_context( scheduler ); _Processor_mask_And( &a, &context->Processors, affinity ); + count = _Processor_mask_Count( &a ); - if ( _Processor_mask_Count( &a ) == 0 ) { + if ( count == 0 ) { return false; } - _Processor_mask_And( &b, &_SMP_Online_processors, affinity ); - - if ( _Processor_mask_Count( &b ) == _SMP_Processor_count ) { + if ( count == _SMP_Processor_count ) { rqi = 0; } else { rqi = _Processor_mask_Find_last_set( &a ); diff --git a/cpukit/score/src/schedulersetaffinity.c b/cpukit/score/src/schedulersetaffinity.c index 3d354800b2..00d1a8b207 100644 --- a/cpukit/score/src/schedulersetaffinity.c +++ b/cpukit/score/src/schedulersetaffinity.c @@ -36,6 +36,13 @@ bool _Scheduler_Set_affinity( return false; } + /* + * Reduce affinity set to the online processors to be in line with + * _Thread_Initialize() which sets the default affinity to the set of online + * processors. + */ + _Processor_mask_And( &affinity, &_SMP_Online_processors, &affinity ); + scheduler = _Thread_Scheduler_get_home( the_thread ); _Scheduler_Acquire_critical( scheduler, &lock_context ); -- cgit v1.2.3