> I just noticed it's changed in BK now. However, the respective
> changes in the compat_sys_waitid() code and include/linux/syscalls.h
> are still missing.
Sorry for that oversight. This patch updates the x86-64's compat code to
handle the new argument to waitid.
Index: linux-2.6/include/linux/syscalls.h
===================================================================
RCS file: /home/roland/redhat/bkcvs/linux-2.5/include/linux/syscalls.h,v
retrieving revision 1.12
diff -B -b -p -u -r1.12 syscalls.h
--- linux-2.6/include/linux/syscalls.h 31 Aug 2004 17:35:25 -0000 1.12
+++ linux-2.6/include/linux/syscalls.h 20 Sep 2004 19:55:29 -0000
@@ -163,7 +163,8 @@ asmlinkage void sys_exit_group(int error
asmlinkage long sys_wait4(pid_t pid, unsigned int __user *stat_addr,
int options, struct rusage __user *ru);
asmlinkage long sys_waitid(int which, pid_t pid,
- struct siginfo __user *infop, int options);
+ struct siginfo __user *infop,
+ int options, struct rusage __user *ru);
asmlinkage long sys_waitpid(pid_t pid, unsigned int __user *stat_addr, int options);
asmlinkage long sys_set_tid_address(int __user *tidptr);
asmlinkage long sys_futex(u32 __user *uaddr, int op, int val,
Index: linux-2.6/arch/x86_64/ia32/sys_ia32.c
===================================================================
RCS file: /home/roland/redhat/bkcvs/linux-2.5/arch/x86_64/ia32/sys_ia32.c,v
retrieving revision 1.69
diff -B -b -p -u -r1.69 sys_ia32.c
--- linux-2.6/arch/x86_64/ia32/sys_ia32.c 31 Aug 2004 17:35:25 -0000 1.69
+++ linux-2.6/arch/x86_64/ia32/sys_ia32.c 20 Sep 2004 20:01:06 -0000
@@ -1152,19 +1152,26 @@ asmlinkage long sys32_clone(unsigned int
}
asmlinkage long sys32_waitid(int which, compat_pid_t pid,
- siginfo_t32 __user *uinfo, int options)
+ siginfo_t32 __user *uinfo, int options,
+ struct compat_rusage __user *uru)
{
siginfo_t info;
+ struct rusage ru;
long ret;
mm_segment_t old_fs = get_fs();
info.si_signo = 0;
set_fs (KERNEL_DS);
- ret = sys_waitid(which, pid, (siginfo_t __user *) &info, options);
+ ret = sys_waitid(which, pid, (siginfo_t __user *) &info, options,
+ uru ? &ru : NULL);
set_fs (old_fs);
if (ret < 0 || info.si_signo == 0)
return ret;
+
+ if (uru && (ret = put_compat_rusage(&ru, uru)))
+ return ret;
+
BUG_ON(info.si_code & __SI_MASK);
info.si_code |= __SI_CHLD;
return ia32_copy_siginfo_to_user(uinfo, &info);