@@ -15,24 +15,12 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <errno.h>
-#include <sched.h>
-#include <sysdep.h>
-
-#ifdef HAVE_GETCPU_VSYSCALL
-# define HAVE_VSYSCALL
-#endif
-#include <sysdep-vdso.h>
+#include <getcpu_priv.h>
int
__getcpu (unsigned int *cpu, unsigned int *node)
{
-#ifdef __NR_getcpu
- return INLINE_VSYSCALL (getcpu, 3, cpu, node, NULL);
-#else
- __set_errno (ENOSYS);
- return -1;
-#endif
+ return getcpu_priv (cpu, node);
}
weak_alias (__getcpu, getcpu)
libc_hidden_def (__getcpu)
new file mode 100644
@@ -0,0 +1,38 @@
+/* Determine CPU and NUMA node on which the calling thread is running.
+ Linux private implementation.
+ Copyright (C) 2019 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _GETCPU_PRIV_H
+#define _GETCPY_PRIV_H
+
+#include <sched.h>
+#include <errno.h>
+#include <sysdep.h>
+
+#ifdef HAVE_GETCPU_VSYSCALL
+# define HAVE_VSYSCALL
+#endif
+#include <sysdep-vdso.h>
+
+static inline int
+getcpu_priv (unsigned int *cpu, unsigned int *node)
+{
+ return INLINE_VSYSCALL (getcpu, 3, cpu, node, NULL);
+}
+
+#endif
@@ -15,25 +15,12 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <errno.h>
-#include <sched.h>
-#include <sysdep.h>
-
-#ifdef HAVE_GETCPU_VSYSCALL
-# define HAVE_VSYSCALL
-#endif
-#include <sysdep-vdso.h>
+#include <getcpu_priv.h>
int
sched_getcpu (void)
{
-#ifdef __NR_getcpu
unsigned int cpu;
- int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL);
-
+ int r = getcpu_priv (&cpu, NULL);
return r == -1 ? r : cpu;
-#else
- __set_errno (ENOSYS);
- return -1;
-#endif
}