Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d50dde5a authored by Dario Faggioli's avatar Dario Faggioli Committed by Ingo Molnar
Browse files

sched: Add new scheduler syscalls to support an extended scheduling parameters ABI



Add the syscalls needed for supporting scheduling algorithms
with extended scheduling parameters (e.g., SCHED_DEADLINE).

In general, it makes possible to specify a periodic/sporadic task,
that executes for a given amount of runtime at each instance, and is
scheduled according to the urgency of their own timing constraints,
i.e.:

 - a (maximum/typical) instance execution time,
 - a minimum interval between consecutive instances,
 - a time constraint by which each instance must be completed.

Thus, both the data structure that holds the scheduling parameters of
the tasks and the system calls dealing with it must be extended.
Unfortunately, modifying the existing struct sched_param would break
the ABI and result in potentially serious compatibility issues with
legacy binaries.

For these reasons, this patch:

 - defines the new struct sched_attr, containing all the fields
   that are necessary for specifying a task in the computational
   model described above;

 - defines and implements the new scheduling related syscalls that
   manipulate it, i.e., sched_setattr() and sched_getattr().

Syscalls are introduced for x86 (32 and 64 bits) and ARM only, as a
proof of concept and for developing and testing purposes. Making them
available on other architectures is straightforward.

Since no "user" for these new parameters is introduced in this patch,
the implementation of the new system calls is just identical to their
already existing counterpart. Future patches that implement scheduling
policies able to exploit the new data structure must also take care of
modifying the sched_*attr() calls accordingly with their own purposes.

Signed-off-by: default avatarDario Faggioli <raistlin@linux.it>
[ Rewrote to use sched_attr. ]
Signed-off-by: default avatarJuri Lelli <juri.lelli@gmail.com>
[ Removed sched_setscheduler2() for now. ]
Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1383831828-15501-3-git-send-email-juri.lelli@gmail.com


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 56b48110
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@

#include <uapi/asm/unistd.h>

#define __NR_syscalls  (380)
#define __NR_syscalls  (384)
#define __ARM_NR_cmpxchg		(__ARM_NR_BASE+0x00fff0)

#define __ARCH_WANT_STAT64
+2 −0
Original line number Diff line number Diff line
@@ -406,6 +406,8 @@
#define __NR_process_vm_writev		(__NR_SYSCALL_BASE+377)
#define __NR_kcmp			(__NR_SYSCALL_BASE+378)
#define __NR_finit_module		(__NR_SYSCALL_BASE+379)
#define __NR_sched_setattr		(__NR_SYSCALL_BASE+380)
#define __NR_sched_getattr		(__NR_SYSCALL_BASE+381)

/*
 * This may need to be greater than __NR_last_syscall+1 in order to
+2 −0
Original line number Diff line number Diff line
@@ -389,6 +389,8 @@
		CALL(sys_process_vm_writev)
		CALL(sys_kcmp)
		CALL(sys_finit_module)
/* 380 */	CALL(sys_sched_setattr)
		CALL(sys_sched_getattr)
#ifndef syscalls_counted
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
#define syscalls_counted
+2 −0
Original line number Diff line number Diff line
@@ -357,3 +357,5 @@
348	i386	process_vm_writev	sys_process_vm_writev		compat_sys_process_vm_writev
349	i386	kcmp			sys_kcmp
350	i386	finit_module		sys_finit_module
351	i386	sched_setattr		sys_sched_setattr
352	i386	sched_getattr		sys_sched_getattr
+2 −0
Original line number Diff line number Diff line
@@ -320,6 +320,8 @@
311	64	process_vm_writev	sys_process_vm_writev
312	common	kcmp			sys_kcmp
313	common	finit_module		sys_finit_module
314	common	sched_setattr		sys_sched_setattr
315	common	sched_getattr		sys_sched_getattr

#
# x32-specific system call numbers start at 512 to avoid cache impact
Loading