summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-10-27 09:04:53 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-10-28 13:10:47 +0200
commit8744498752ad4f0eaf9fb5640c6a0e0f2dc92fda (patch)
tree3359a898e4776aa776cc3a9021f0d7762f8d58db /cpukit/score/src
parentposix: Fix pthread_create() with user stack (diff)
downloadrtems-8744498752ad4f0eaf9fb5640c6a0e0f2dc92fda.tar.bz2
score: Fix _Scheduler_Set_affinity()
Diffstat (limited to 'cpukit/score/src')
-rw-r--r--cpukit/score/src/scheduleredfsmp.c9
-rw-r--r--cpukit/score/src/schedulersetaffinity.c7
2 files changed, 11 insertions, 5 deletions
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 );