[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 08/18] linux-user: Use safe_syscall wrapper for slee
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH 08/18] linux-user: Use safe_syscall wrapper for sleep syscalls |
Date: |
Mon, 6 Jun 2016 19:58:09 +0100 |
Use the safe_syscall wrapper for the clock_nanosleep and nanosleep
syscalls.
Signed-off-by: Peter Maydell <address@hidden>
---
linux-user/syscall.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 300edc4..c87665a 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -712,6 +712,12 @@ safe_syscall3(ssize_t, recvmsg, int, fd, struct msghdr *,
msg, int, flags)
safe_syscall2(int, flock, int, fd, int, operation)
safe_syscall4(int, rt_sigtimedwait, const sigset_t *, these, siginfo_t *,
uinfo,
const struct timespec *, uts, size_t, sigsetsize)
+safe_syscall2(int, nanosleep, const struct timespec *, req,
+ struct timespec *, rem)
+#ifdef TARGET_NR_clock_nanosleep
+safe_syscall4(int, clock_nanosleep, const clockid_t, clock, int, flags,
+ const struct timespec *, req, struct timespec *, rem)
+#endif
#ifdef __NR_msgsnd
safe_syscall4(int, msgsnd, int, msgid, const void *, msgp, size_t, sz,
int, flags)
@@ -8564,7 +8570,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
{
struct timespec req, rem;
target_to_host_timespec(&req, arg1);
- ret = get_errno(nanosleep(&req, &rem));
+ ret = get_errno(safe_nanosleep(&req, &rem));
if (is_error(ret) && arg2) {
host_to_target_timespec(arg2, &rem);
}
@@ -9832,14 +9838,15 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
arg1,
{
struct timespec ts;
target_to_host_timespec(&ts, arg3);
- ret = get_errno(clock_nanosleep(arg1, arg2, &ts, arg4 ? &ts : NULL));
+ ret = get_errno(safe_clock_nanosleep(arg1, arg2,
+ &ts, arg4 ? &ts : NULL));
if (arg4)
host_to_target_timespec(arg4, &ts);
#if defined(TARGET_PPC)
/* clock_nanosleep is odd in that it returns positive errno values.
* On PPC, CR0 bit 3 should be set in such a situation. */
- if (ret) {
+ if (ret && ret != -TARGET_ERESTARTSYS) {
((CPUPPCState *)cpu_env)->crf[0] |= 1;
}
#endif
--
1.9.1
- [Qemu-devel] [PATCH 17/18] linux-user: Make target_strerror() return 'const char *', (continued)
- [Qemu-devel] [PATCH 17/18] linux-user: Make target_strerror() return 'const char *', Peter Maydell, 2016/06/06
- [Qemu-devel] [PATCH 01/18] linux-user: Use safe_syscall wrapper for readv and writev syscalls, Peter Maydell, 2016/06/06
- [Qemu-devel] [PATCH 16/18] linux-user: Use safe_syscall wrapper for fcntl, Peter Maydell, 2016/06/06
- [Qemu-devel] [PATCH 12/18] linux-user: Use safe_syscall wrapper for accept and accept4 syscalls, Peter Maydell, 2016/06/06
- [Qemu-devel] [PATCH 10/18] linux-user: Use safe_syscall wrapper for epoll_wait syscalls, Peter Maydell, 2016/06/06
- [Qemu-devel] [PATCH 14/18] linux-user: Use __get_user() and __put_user() to handle structs in do_fcntl(), Peter Maydell, 2016/06/06
- [Qemu-devel] [PATCH 08/18] linux-user: Use safe_syscall wrapper for sleep syscalls,
Peter Maydell <=
- [Qemu-devel] [PATCH 05/18] linux-user: Use safe_syscall wrapper for mq_timedsend and mq_timedreceive, Peter Maydell, 2016/06/06
- [Qemu-devel] [PATCH 03/18] linux-user: Use safe_syscall wrapper for send* and recv* syscalls, Peter Maydell, 2016/06/06
- [Qemu-devel] [PATCH 18/18] linux-user: Special-case ERESTARTSYS in target_strerror(), Peter Maydell, 2016/06/06
- Re: [Qemu-devel] [PATCH 00/18] linux-user: Extend safe_syscall wrapper use, Riku Voipio, 2016/06/08