add sched_getcpu
authorNathan Zadoks <nathan@nathan7.eu>
Wed, 2 Mar 2016 16:26:26 +0000 (17:26 +0100)
committerRich Felker <dalias@aerifal.cx>
Thu, 3 Mar 2016 02:32:36 +0000 (21:32 -0500)
This is a GNU extension, but a fairly minor one, for a system call that
otherwise has no libc wrapper.

include/sched.h
src/sched/sched_getcpu.c [new file with mode: 0644]

index 3e34a72..7e88f09 100644 (file)
@@ -76,6 +76,7 @@ void free(void *);
 
 typedef struct cpu_set_t { unsigned long __bits[128/sizeof(long)]; } cpu_set_t;
 int __sched_cpucount(size_t, const cpu_set_t *);
+int sched_getcpu(void);
 int sched_getaffinity(pid_t, size_t, cpu_set_t *);
 int sched_setaffinity(pid_t, size_t, const cpu_set_t *);
 
diff --git a/src/sched/sched_getcpu.c b/src/sched/sched_getcpu.c
new file mode 100644 (file)
index 0000000..760e4d5
--- /dev/null
@@ -0,0 +1,13 @@
+#define _GNU_SOURCE
+#include <sched.h>
+#include "syscall.h"
+
+int sched_getcpu(void)
+{
+       int r;
+       unsigned cpu;
+
+       r = __syscall(SYS_getcpu, &cpu, 0, 0);
+       if (!r) return cpu;
+       return __syscall_ret(r);
+}