sched: Add 'flags' argument to sched_{set,get}attr() syscalls
Because of a recent syscall design debate; its deemed appropriate for each syscall to have a flags argument for future extension; without immediately requiring new syscalls. Cc: juri.lelli@gmail.com Cc: Ingo Molnar <mingo@redhat.com> Suggested-by: Michael Kerrisk <mtk.manpages@gmail.com> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20140214161929.GL27965@twins.programming.kicks-ass.net Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
Родитель
4efbc454ba
Коммит
6d35ab4809
|
@ -281,13 +281,15 @@ asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
|
|||
asmlinkage long sys_sched_setparam(pid_t pid,
|
||||
struct sched_param __user *param);
|
||||
asmlinkage long sys_sched_setattr(pid_t pid,
|
||||
struct sched_attr __user *attr);
|
||||
struct sched_attr __user *attr,
|
||||
unsigned int flags);
|
||||
asmlinkage long sys_sched_getscheduler(pid_t pid);
|
||||
asmlinkage long sys_sched_getparam(pid_t pid,
|
||||
struct sched_param __user *param);
|
||||
asmlinkage long sys_sched_getattr(pid_t pid,
|
||||
struct sched_attr __user *attr,
|
||||
unsigned int size);
|
||||
unsigned int size,
|
||||
unsigned int flags);
|
||||
asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len,
|
||||
unsigned long __user *user_mask_ptr);
|
||||
asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len,
|
||||
|
|
|
@ -3661,13 +3661,14 @@ SYSCALL_DEFINE2(sched_setparam, pid_t, pid, struct sched_param __user *, param)
|
|||
* @pid: the pid in question.
|
||||
* @uattr: structure containing the extended parameters.
|
||||
*/
|
||||
SYSCALL_DEFINE2(sched_setattr, pid_t, pid, struct sched_attr __user *, uattr)
|
||||
SYSCALL_DEFINE3(sched_setattr, pid_t, pid, struct sched_attr __user *, uattr,
|
||||
unsigned int, flags)
|
||||
{
|
||||
struct sched_attr attr;
|
||||
struct task_struct *p;
|
||||
int retval;
|
||||
|
||||
if (!uattr || pid < 0)
|
||||
if (!uattr || pid < 0 || flags)
|
||||
return -EINVAL;
|
||||
|
||||
if (sched_copy_attr(uattr, &attr))
|
||||
|
@ -3804,8 +3805,8 @@ err_size:
|
|||
* @uattr: structure containing the extended parameters.
|
||||
* @size: sizeof(attr) for fwd/bwd comp.
|
||||
*/
|
||||
SYSCALL_DEFINE3(sched_getattr, pid_t, pid, struct sched_attr __user *, uattr,
|
||||
unsigned int, size)
|
||||
SYSCALL_DEFINE4(sched_getattr, pid_t, pid, struct sched_attr __user *, uattr,
|
||||
unsigned int, size, unsigned int, flags)
|
||||
{
|
||||
struct sched_attr attr = {
|
||||
.size = sizeof(struct sched_attr),
|
||||
|
@ -3814,7 +3815,7 @@ SYSCALL_DEFINE3(sched_getattr, pid_t, pid, struct sched_attr __user *, uattr,
|
|||
int retval;
|
||||
|
||||
if (!uattr || pid < 0 || size > PAGE_SIZE ||
|
||||
size < SCHED_ATTR_SIZE_VER0)
|
||||
size < SCHED_ATTR_SIZE_VER0 || flags)
|
||||
return -EINVAL;
|
||||
|
||||
rcu_read_lock();
|
||||
|
|
Загрузка…
Ссылка в новой задаче