diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-11 11:06:51 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-12 13:24:41 +0200 |
commit | d99529999451043166c6dbf3ef22be42463e16f3 (patch) | |
tree | 4e773a423ceca724db1c58a64345583745169027 /cpukit/score/src/schedulergetaffinity.c | |
parent | score: Avoid Giant lock _Scheduler_Set_affinity() (diff) | |
download | rtems-d99529999451043166c6dbf3ef22be42463e16f3.tar.bz2 |
score: Avoid Giant lock _Scheduler_Get_affinity()
Update #2555.
Diffstat (limited to 'cpukit/score/src/schedulergetaffinity.c')
-rw-r--r-- | cpukit/score/src/schedulergetaffinity.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/cpukit/score/src/schedulergetaffinity.c b/cpukit/score/src/schedulergetaffinity.c index 06ebfbe6a6..c910a75d46 100644 --- a/cpukit/score/src/schedulergetaffinity.c +++ b/cpukit/score/src/schedulergetaffinity.c @@ -26,28 +26,35 @@ bool _Scheduler_Get_affinity( cpu_set_t *cpuset ) { - const Scheduler_Control *scheduler = _Scheduler_Get( the_thread ); + const Scheduler_Control *scheduler; + ISR_lock_Context lock_context; + bool ok; if ( !_CPU_set_Is_large_enough( cpusetsize ) ) { return false; } + scheduler = _Scheduler_Get( the_thread ); + _Scheduler_Acquire_critical( scheduler, &lock_context ); #if defined(RTEMS_SMP) - return ( *scheduler->Operations.get_affinity )( + ok = ( *scheduler->Operations.get_affinity )( scheduler, the_thread, cpusetsize, cpuset ); #else - return _Scheduler_default_Get_affinity_body( + ok = _Scheduler_default_Get_affinity_body( scheduler, the_thread, cpusetsize, cpuset ); #endif + + _Scheduler_Release_critical( scheduler, &lock_context ); + return ok; } #endif /* defined(__RTEMS_HAVE_SYS_CPUSET_H__) */ |