qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v2 099/108] linux-user: Split out signalfd, signalfd


From: Richard Henderson
Subject: [Qemu-devel] [PATCH v2 099/108] linux-user: Split out signalfd, signalfd4
Date: Sat, 9 Jun 2018 17:02:11 -1000

All targets define signalfd4; remove the ifdefs.
In do_signalfd4, unlock the target sigmask earlier and use is_error.

Signed-off-by: Richard Henderson <address@hidden>
---
 linux-user/syscall.c | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 5edcb39b73..e630a43f97 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -6975,8 +6975,6 @@ static abi_long host_to_target_statfs64(abi_ulong 
target_addr,
 }
 #endif
 
-#if defined(TARGET_NR_signalfd) || defined(TARGET_NR_signalfd4)
-
 /* signalfd siginfo conversion */
 
 static void
@@ -7045,21 +7043,17 @@ static abi_long do_signalfd4(int fd, abi_long mask, int 
flags)
     if (!lock_user_struct(VERIFY_READ, target_mask, mask, 1)) {
         return -TARGET_EFAULT;
     }
-
     target_to_host_sigset(&host_mask, target_mask);
+    unlock_user_struct(target_mask, mask, 0);
 
     host_flags = target_to_host_bitmask(flags, fcntl_flags_tbl);
 
     ret = get_errno(signalfd(fd, &host_mask, host_flags));
-    if (ret >= 0) {
+    if (!is_error(ret)) {
         fd_trans_register(ret, &target_signalfd_trans);
     }
-
-    unlock_user_struct(target_mask, mask, 0);
-
     return ret;
 }
-#endif
 
 /* Map host to target signal numbers for the wait family of syscalls.
    Assume all other status bits are the same.  */
@@ -11884,6 +11878,18 @@ IMPL(sigaltstack)
     return do_sigaltstack(arg1, arg2, get_sp_from_cpustate(cpu_env));
 }
 
+#ifdef TARGET_NR_signalfd
+IMPL(signalfd)
+{
+    return do_signalfd4(arg1, arg2, 0);
+}
+#endif
+
+IMPL(signalfd4)
+{
+    return do_signalfd4(arg1, arg2, arg4);
+}
+
 #ifdef TARGET_NR_sigpending
 IMPL(sigpending)
 {
@@ -12850,14 +12856,6 @@ static abi_long do_syscall1(void *cpu_env, unsigned 
num, abi_long arg1,
     abi_long ret;
 
     switch(num) {
-#if defined(TARGET_NR_signalfd4)
-    case TARGET_NR_signalfd4:
-        return do_signalfd4(arg1, arg2, arg4);
-#endif
-#if defined(TARGET_NR_signalfd)
-    case TARGET_NR_signalfd:
-        return do_signalfd4(arg1, arg2, 0);
-#endif
 #if defined(CONFIG_EPOLL)
 #if defined(TARGET_NR_epoll_create)
     case TARGET_NR_epoll_create:
@@ -13808,6 +13806,10 @@ static impl_fn *syscall_table(unsigned num)
         SYSCALL(sigaction);
 #endif
         SYSCALL(sigaltstack);
+#ifdef TARGET_NR_signalfd
+        SYSCALL(signalfd);
+#endif
+        SYSCALL(signalfd4);
 #ifdef TARGET_NR_sigpending
         SYSCALL(sigpending);
 #endif
-- 
2.17.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]