summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorRandolph Chung <randolph@tausq.org>2003-04-14 09:07:21 -0700
committerRichard Henderson <rth@are.twiddle.net>2003-04-14 09:07:21 -0700
commit693ccaab9120caa6b6be97d876dc03485f381e42 (patch)
treed48ca9afd60be2419c513c798ee3293c6ad22d82 /kernel
parent8a9e7331957fe5810607e058c779da4832536e99 (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.c51
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;
+}
+