affinity.c 846 B

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