diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/compat.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/kernel/compat.c b/kernel/compat.c index 7b04cf90c847..13ab289c0fc5 100644 --- a/kernel/compat.c +++ b/kernel/compat.c @@ -226,3 +226,54 @@ asmlinkage long compat_sys_futex(u32 *uaddr, int op, int val, } return do_futex((unsigned long)uaddr, op, val, timeout); } + +extern asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len, + unsigned long *user_mask_ptr); + +asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid, + unsigned int len, + compat_ulong_t *user_mask_ptr) +{ + unsigned long kernel_mask; + mm_segment_t old_fs; + int ret; + + if (get_user(kernel_mask, user_mask_ptr)) + return -EFAULT; + + old_fs = get_fs(); + set_fs(KERNEL_DS); + ret = sys_sched_setaffinity(pid, + sizeof(kernel_mask), + &kernel_mask); + set_fs(old_fs); + + return ret; +} + +extern asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, + unsigned long *user_mask_ptr); + +asmlinkage int compat_sys_sched_getaffinity(compat_pid_t pid, unsigned int len, + compat_ulong_t *user_mask_ptr) +{ + unsigned long kernel_mask; + mm_segment_t old_fs; + int ret; + + old_fs = get_fs(); + set_fs(KERNEL_DS); + ret = sys_sched_getaffinity(pid, + sizeof(kernel_mask), + &kernel_mask); + set_fs(old_fs); + + if (ret > 0) { + if (put_user(kernel_mask, user_mask_ptr)) + ret = -EFAULT; + ret = sizeof(compat_ulong_t); + } + + return ret; +} + |
