diff options
author | Rich Felker <dalias@aerifal.cx> | 2013-08-10 21:41:05 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2013-08-10 21:41:05 -0400 |
commit | 7406fdf5a18b37330de108abb0106f44ebdae2c6 (patch) | |
tree | 1c5ec741f159b23119f0a6c7dac9d1a022551ef8 | |
parent | eeb0328f203cfb8990b3eee5ee31d931fc539ceb (diff) | |
download | musl-7406fdf5a18b37330de108abb0106f44ebdae2c6.tar.gz musl-7406fdf5a18b37330de108abb0106f44ebdae2c6.tar.xz musl-7406fdf5a18b37330de108abb0106f44ebdae2c6.zip |
add pthread_setaffinity_np and pthread_getaffinity_np functions
-rw-r--r-- | include/pthread.h | 3 | ||||
-rw-r--r-- | src/sched/affinity.c | 26 | ||||
-rw-r--r-- | src/sched/sched_getaffinity.c | 10 | ||||
-rw-r--r-- | src/sched/sched_setaffinity.c | 8 |
4 files changed, 29 insertions, 18 deletions
diff --git a/include/pthread.h b/include/pthread.h index 731bce38..f7c9568c 100644 --- a/include/pthread.h +++ b/include/pthread.h @@ -210,6 +210,9 @@ void _pthread_cleanup_pop(struct __ptcb *, int); #define pthread_cleanup_pop(r) _pthread_cleanup_pop(&__cb, (r)); } while(0) #ifdef _GNU_SOURCE +struct cpu_set_t; +int pthread_getaffinity_np(pthread_t, size_t, struct cpu_set_t *); +int pthread_setaffinity_np(pthread_t, size_t, const struct cpu_set_t *); int pthread_getattr_np(pthread_t, pthread_attr_t *); #endif diff --git a/src/sched/affinity.c b/src/sched/affinity.c new file mode 100644 index 00000000..3b402111 --- /dev/null +++ b/src/sched/affinity.c @@ -0,0 +1,26 @@ +#define _GNU_SOURCE +#include <sched.h> +#include "pthread_impl.h" +#include "syscall.h" + +int sched_setaffinity(pid_t tid, size_t size, const cpu_set_t *set) +{ + return syscall(SYS_sched_setaffinity, tid, size, set); +} + +int pthread_setaffinity_np(pthread_t td, size_t size, const cpu_set_t *set) +{ + return syscall(SYS_sched_setaffinity, td->tid, size, set); +} + +int sched_getaffinity(pid_t tid, size_t size, cpu_set_t *set) +{ + long ret = __syscall(SYS_sched_getaffinity, tid, size, set); + if (ret > 0) ret = 0; + return __syscall_ret(ret); +} + +int pthread_getaffinity_np(pthread_t td, size_t size, cpu_set_t *set) +{ + return sched_getaffinity(td->tid, size, set); +} diff --git a/src/sched/sched_getaffinity.c b/src/sched/sched_getaffinity.c deleted file mode 100644 index 0aa4c65a..00000000 --- a/src/sched/sched_getaffinity.c +++ /dev/null @@ -1,10 +0,0 @@ -#define _GNU_SOURCE -#include <sched.h> -#include "syscall.h" - -int sched_getaffinity(pid_t tid, size_t size, cpu_set_t *set) -{ - long ret = __syscall(SYS_sched_getaffinity, tid, size, set); - if (ret > 0) ret = 0; - return __syscall_ret(ret); -} diff --git a/src/sched/sched_setaffinity.c b/src/sched/sched_setaffinity.c deleted file mode 100644 index 4344df17..00000000 --- a/src/sched/sched_setaffinity.c +++ /dev/null @@ -1,8 +0,0 @@ -#define _GNU_SOURCE -#include <sched.h> -#include "syscall.h" - -int sched_setaffinity(pid_t tid, size_t size, const cpu_set_t *set) -{ - return syscall(SYS_sched_setaffinity, tid, size, set); -} |