about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--include/sched.h1
-rw-r--r--src/sched/sched_getcpu.c13
2 files changed, 14 insertions, 0 deletions
diff --git a/include/sched.h b/include/sched.h
index 3e34a72c..7e88f097 100644
--- a/include/sched.h
+++ b/include/sched.h
@@ -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
index 00000000..760e4d5b
--- /dev/null
+++ b/src/sched/sched_getcpu.c
@@ -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);
+}