1#define _GNU_SOURCE 2#include <sched.h> 3#include <string.h> 4#include "pthread_impl.h" 5#include "syscall.h" 6 7int sched_setaffinity(pid_t tid, size_t size, const cpu_set_t *set) 8{ 9 return syscall(SYS_sched_setaffinity, tid, size, set); 10} 11 12int pthread_setaffinity_np(pthread_t td, size_t size, const cpu_set_t *set) 13{ 14 return -__syscall(SYS_sched_setaffinity, td->tid, size, set); 15} 16 17static int do_getaffinity(pid_t tid, size_t size, cpu_set_t *set) 18{ 19 long ret = __syscall(SYS_sched_getaffinity, tid, size, set); 20 if (ret < 0) return ret; 21 if (ret < size) memset((char *)set+ret, 0, size-ret); 22 return 0; 23} 24 25int sched_getaffinity(pid_t tid, size_t size, cpu_set_t *set) 26{ 27 return __syscall_ret(do_getaffinity(tid, size, set)); 28} 29 30int pthread_getaffinity_np(pthread_t td, size_t size, cpu_set_t *set) 31{ 32 return -do_getaffinity(td->tid, size, set); 33} 34