[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 19/74] linux-user: Implement rusage argument to w
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v7 19/74] linux-user: Implement rusage argument to waitid |
Date: |
Sun, 19 May 2019 13:36:31 -0700 |
The kernel interface, which we are supposed to be implementing,
takes a fifth argument: an rusage pointer akin to wait4.
Signed-off-by: Richard Henderson <address@hidden>
---
linux-user/syscall-defs.h | 2 +-
linux-user/syscall-proc.inc.c | 27 +++++++++++++++++++--------
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/linux-user/syscall-defs.h b/linux-user/syscall-defs.h
index a84050a318..f099d98fa3 100644
--- a/linux-user/syscall-defs.h
+++ b/linux-user/syscall-defs.h
@@ -119,7 +119,7 @@ SYSCALL_DEF(shmget, ARG_DEC, ARG_DEC, ARG_HEX);
SYSCALL_DEF_FULL(vfork, .impl = impl_fork);
#endif
SYSCALL_DEF(wait4, ARG_DEC, ARG_PTR, ARG_HEX, ARG_PTR);
-SYSCALL_DEF(waitid, ARG_HEX, ARG_DEC, ARG_PTR, ARG_HEX);
+SYSCALL_DEF(waitid, ARG_HEX, ARG_DEC, ARG_PTR, ARG_HEX, ARG_PTR);
#ifdef TARGET_NR_waitpid
SYSCALL_DEF(waitpid, ARG_DEC, ARG_PTR, ARG_HEX);
#endif
diff --git a/linux-user/syscall-proc.inc.c b/linux-user/syscall-proc.inc.c
index 7c647f36d7..b7304b7a42 100644
--- a/linux-user/syscall-proc.inc.c
+++ b/linux-user/syscall-proc.inc.c
@@ -370,19 +370,30 @@ SYSCALL_IMPL(waitid)
id_t id = arg2;
abi_ulong target_info = arg3;
int options = arg4;
+ abi_ulong target_rusage = arg5;
siginfo_t info, *info_ptr = target_info ? &info : NULL;
+ struct rusage rusage;
+ struct rusage *rusage_ptr = target_rusage ? &rusage : NULL;
abi_long ret;
info.si_pid = 0;
- ret = get_errno(safe_waitid(idtype, id, info_ptr, options, NULL));
- if (!is_error(ret) && target_info && info.si_pid != 0) {
- target_siginfo_t *p = lock_user(VERIFY_WRITE, target_info,
- sizeof(target_siginfo_t), 0);
- if (!p) {
- return -TARGET_EFAULT;
+ ret = get_errno(safe_waitid(idtype, id, info_ptr, options, rusage_ptr));
+ if (!is_error(ret)) {
+ if (target_info && info.si_pid != 0) {
+ target_siginfo_t *p = lock_user(VERIFY_WRITE, target_info,
+ sizeof(target_siginfo_t), 0);
+ if (!p) {
+ return -TARGET_EFAULT;
+ }
+ host_to_target_siginfo(p, &info);
+ unlock_user(p, target_info, sizeof(target_siginfo_t));
+ }
+ if (target_rusage) {
+ abi_long err = host_to_target_rusage(target_rusage, &rusage);
+ if (err) {
+ ret = err;
+ }
}
- host_to_target_siginfo(p, &info);
- unlock_user(p, target_info, sizeof(target_siginfo_t));
}
return ret;
}
--
2.17.1
- [Qemu-devel] [PATCH v7 07/74] linux-user: Split out read, write, (continued)
- [Qemu-devel] [PATCH v7 07/74] linux-user: Split out read, write, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 08/74] linux-user: Reduce regpairs_aligned & target_offset64 ifdefs, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 09/74] linux-user: Split out readv, writev, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 10/74] linux-user: Split out pread64, pwrite64, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 11/74] linux-user: Split out preadv, pwritev, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 12/74] linux-user: Split out name_to_handle_at, open_by_handle_at, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 15/74] linux-user: Split out exit, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 14/74] linux-user: Split out memory syscalls, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 16/74] linux-user: Split out brk, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 18/74] linux-user: Split out wait4, waitid, waitpid, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 19/74] linux-user: Implement rusage argument to waitid,
Richard Henderson <=
- [Qemu-devel] [PATCH v7 17/74] linux-user: Split out clone, fork, vfork, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 22/74] linux-user: Split out unlink, unlinkat, rmdir, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 21/74] linux-user: Split out link, linkat, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 13/74] linux-user: Split out ipc syscalls, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 23/74] linux-user: Split out execve, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 20/74] linux-user: Split out creat, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 24/74] linux-user: Implement execveat, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 26/74] linux-user: Split out time, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 27/74] linux-user: Split out mknod, mknodat, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 30/74] linux-user: Split out getpid, getppid, getxpid, Richard Henderson, 2019/05/19