diff options
Diffstat (limited to 'cpukit/score/src/schedulersetaffinity.c')
-rw-r--r-- | cpukit/score/src/schedulersetaffinity.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/cpukit/score/src/schedulersetaffinity.c b/cpukit/score/src/schedulersetaffinity.c index 2416a195c5..a20888b617 100644 --- a/cpukit/score/src/schedulersetaffinity.c +++ b/cpukit/score/src/schedulersetaffinity.c @@ -21,7 +21,6 @@ #if defined(__RTEMS_HAVE_SYS_CPUSET_H__) bool _Scheduler_Set_affinity( - const Scheduler_Control *scheduler, Thread_Control *the_thread, size_t cpusetsize, const cpu_set_t *cpuset @@ -31,15 +30,31 @@ bool _Scheduler_Set_affinity( if ( _CPU_set_Is_large_enough( cpusetsize ) ) { #if defined(RTEMS_SMP) - ok = ( *scheduler->Operations.set_affinity )( - scheduler, - the_thread, - cpusetsize, - cpuset - ); + uint32_t cpu_count = _SMP_Get_processor_count(); + uint32_t cpu_index; + + ok = false; + + for ( cpu_index = 0 ; cpu_index < cpu_count ; ++cpu_index ) { + if ( CPU_ISSET_S( (int) cpu_index, cpusetsize, cpuset ) ) { + const Scheduler_Control *scheduler_of_cpu = + _Scheduler_Get_by_CPU_index( cpu_index ); + + if ( scheduler_of_cpu != NULL ) { + ok = ( *scheduler_of_cpu->Operations.set_affinity )( + scheduler_of_cpu, + the_thread, + cpusetsize, + cpuset + ); + } + + break; + } + } #else ok = _Scheduler_default_Set_affinity_body( - scheduler, + _Scheduler_Get( the_thread ), the_thread, cpusetsize, cpuset |