about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorRoland McGrath <roland@hack.frob.com>2014-11-20 10:56:20 -0800
committerRoland McGrath <roland@hack.frob.com>2014-11-20 10:56:20 -0800
commitf214ff74f46275f6f1187730ac88b8a2407393f3 (patch)
treedbbb3206b1a977022e7c53920ad0744f530f8234 /sysdeps
parente37c91d4196f116d826cab129ca2637bd367b35e (diff)
downloadglibc-f214ff74f46275f6f1187730ac88b8a2407393f3.tar.gz
glibc-f214ff74f46275f6f1187730ac88b8a2407393f3.tar.xz
glibc-f214ff74f46275f6f1187730ac88b8a2407393f3.zip
NPTL: Refactor scheduler setup in pthread_create.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/default-sched.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/default-sched.h b/sysdeps/unix/sysv/linux/default-sched.h
new file mode 100644
index 0000000000..c25778fde8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/default-sched.h
@@ -0,0 +1,42 @@
+/* Determine calling thread's scheduling parameters.  Linux version.
+   Copyright (C) 2014 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+/* This should fill in PD->schedpolicy if PD->flags does not contain
+   ATTR_FLAG_POLICY_SET, and set it; and PD->schedparam if PD->flags does
+   not contain ATTR_FLAG_SCHED_SET, and set it.  It won't be called at all
+   if both bits are already set.  */
+
+static void
+collect_default_sched (struct pthread *pd)
+{
+  INTERNAL_SYSCALL_DECL (scerr);
+
+  if ((pd->flags & ATTR_FLAG_POLICY_SET) == 0)
+    {
+      pd->schedpolicy = INTERNAL_SYSCALL (sched_getscheduler, scerr, 1, 0);
+      pd->flags |= ATTR_FLAG_POLICY_SET;
+    }
+
+  if ((pd->flags & ATTR_FLAG_SCHED_SET) == 0)
+    {
+      INTERNAL_SYSCALL (sched_getparam, scerr, 2, 0, &pd->schedparam);
+      pd->flags |= ATTR_FLAG_SCHED_SET;
+    }
+}