diff options
| author | Randolph Chung <randolph@tausq.org> | 2003-04-14 09:07:21 -0700 |
|---|---|---|
| committer | Richard Henderson <rth@are.twiddle.net> | 2003-04-14 09:07:21 -0700 |
| commit | 693ccaab9120caa6b6be97d876dc03485f381e42 (patch) | |
| tree | d48ca9afd60be2419c513c798ee3293c6ad22d82 /kernel | |
| parent | 8a9e7331957fe5810607e058c779da4832536e99 (diff) | |
[PATCH] {get,set}affinity unification
This one gets rid of sys32_{get,set}affinity in favor of a unified
compat implementation.
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; +} + |
