github.com/afumu/libc@v0.0.6/musl/src/sched/affinity.c (about)

     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  }