affinity.c raw

   1  #define _GNU_SOURCE
   2  #include <sched.h>
   3  #include <string.h>
   4  #include "pthread_impl.h"
   5  #include "syscall.h"
   6  
   7  int 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  
  12  int 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  
  17  static 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  
  25  int sched_getaffinity(pid_t tid, size_t size, cpu_set_t *set)
  26  {
  27  	return __syscall_ret(do_getaffinity(tid, size, set));
  28  }
  29  
  30  int pthread_getaffinity_np(pthread_t td, size_t size, cpu_set_t *set)
  31  {
  32  	return -do_getaffinity(td->tid, size, set);
  33  }
  34