qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: riku.voipio@linaro.org
To: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Cc: Riku Voipio <riku.voipio@linaro.org>
Subject: [Qemu-devel] [PULL v2 06/23] linux-user: support timerfd_{create, gettime, settime} syscalls
Date: Tue, 19 Aug 2014 11:32:41 +0300	[thread overview]
Message-ID: <1982c8df5bf43930fe8227df82b4c93cc0a32b57.1408436940.git.riku.voipio@linaro.org> (raw)
In-Reply-To: <cover.1408436940.git.riku.voipio@linaro.org>

From: Riku Voipio <riku.voipio@linaro.org>

Adds support for the timerfd_create, timerfd_gettime & timerfd_settime
syscalls, allowing use of timerfds by target programs.

v2: By Riku - added configure check for timerfd and ifdefs
for benefit of old distributions like RHEL5.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 configure              | 17 +++++++++++++++++
 linux-user/strace.list |  9 +++++++++
 linux-user/syscall.c   | 45 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 71 insertions(+)

diff --git a/configure b/configure
index 283c71c..3d0ab1b 100755
--- a/configure
+++ b/configure
@@ -3456,6 +3456,20 @@ if compile_prog "" "" ; then
   sendfile=yes
 fi
 
+# check for timerfd support (glibc 2.8 and newer)
+timerfd=no
+cat > $TMPC << EOF
+#include <sys/timerfd.h>
+
+int main(void)
+{
+    return(timerfd_create(CLOCK_REALTIME, 0));
+}
+EOF
+if compile_prog "" "" ; then
+  timerfd=yes
+fi
+
 # Check if tools are available to build documentation.
 if test "$docs" != "no" ; then
   if has makeinfo && has pod2man; then
@@ -4524,6 +4538,9 @@ fi
 if test "$sendfile" = "yes" ; then
   echo "CONFIG_SENDFILE=y" >> $config_host_mak
 fi
+if test "$timerfd" = "yes" ; then
+  echo "CONFIG_TIMERFD=y" >> $config_host_mak
+fi
 if test "$inotify" = "yes" ; then
   echo "CONFIG_INOTIFY=y" >> $config_host_mak
 fi
diff --git a/linux-user/strace.list b/linux-user/strace.list
index fcb258d..8de972a 100644
--- a/linux-user/strace.list
+++ b/linux-user/strace.list
@@ -1404,6 +1404,15 @@
 #ifdef TARGET_NR_timer_settime
 { TARGET_NR_timer_settime, "timer_settime" , NULL, NULL, NULL },
 #endif
+#ifdef TARGET_NR_timerfd_create
+{ TARGET_NR_timerfd_create, "timerfd_create" , NULL, NULL, NULL },
+#endif
+#ifdef TARGET_NR_timerfd_gettime
+{ TARGET_NR_timerfd_gettime, "timerfd_gettime" , NULL, NULL, NULL },
+#endif
+#ifdef TARGET_NR_timerfd_settime
+{ TARGET_NR_timerfd_settime, "timerfd_settime" , NULL, NULL, NULL },
+#endif
 #ifdef TARGET_NR_times
 { TARGET_NR_times, "times" , NULL, NULL, NULL },
 #endif
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 7c108ab..44853d0 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -58,6 +58,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base,
 #include <sys/shm.h>
 #include <sys/sem.h>
 #include <sys/statfs.h>
+#include <sys/timerfd.h>
 #include <utime.h>
 #include <sys/sysinfo.h>
 //#include <sys/user.h>
@@ -9547,6 +9548,50 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
     }
 #endif
 
+#if defined(TARGET_NR_timerfd_create) && defined(CONFIG_TIMERFD)
+    case TARGET_NR_timerfd_create:
+        ret = get_errno(timerfd_create(arg1,
+                target_to_host_bitmask(arg2, fcntl_flags_tbl)));
+        break;
+#endif
+
+#if defined(TARGET_NR_timerfd_gettime) && defined(CONFIG_TIMERFD)
+    case TARGET_NR_timerfd_gettime:
+        {
+            struct itimerspec its_curr;
+
+            ret = get_errno(timerfd_gettime(arg1, &its_curr));
+
+            if (arg2 && host_to_target_itimerspec(arg2, &its_curr)) {
+                goto efault;
+            }
+        }
+        break;
+#endif
+
+#if defined(TARGET_NR_timerfd_settime) && defined(CONFIG_TIMERFD)
+    case TARGET_NR_timerfd_settime:
+        {
+            struct itimerspec its_new, its_old, *p_new;
+
+            if (arg3) {
+                if (target_to_host_itimerspec(&its_new, arg3)) {
+                    goto efault;
+                }
+                p_new = &its_new;
+            } else {
+                p_new = NULL;
+            }
+
+            ret = get_errno(timerfd_settime(arg1, arg2, p_new, &its_old));
+
+            if (arg4 && host_to_target_itimerspec(arg4, &its_old)) {
+                goto efault;
+            }
+        }
+        break;
+#endif
+
     default:
     unimplemented:
         gemu_log("qemu: Unsupported syscall: %d\n", num);
-- 
2.0.1

  parent reply	other threads:[~2014-08-19  8:33 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-19  8:32 [Qemu-devel] [PULL v2 00/23] linux-user updates riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 01/23] linux-user: /proc/self/maps content riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 02/23] linux-user: redirect openat calls riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 03/23] linux-user: Fix syscall instruction usermode emulation on X86_64 riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 04/23] linux-user: Fix conversion of sigevent argument to timer_create riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 05/23] linux-user: fix readlink handling with magic exe symlink riku.voipio
2014-08-19  8:32 ` riku.voipio [this message]
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 07/23] linux-user: support ioprio_{get, set} syscalls riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 08/23] linux-user: support {name_to, open_by}_handle_at syscalls riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 09/23] linux-user: add setns and unshare riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 10/23] linux-user: PPC64 semid_ds Doesnt Include _unused1 and _unused2 riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 11/23] linux-user: Dereference Pointer Argument to ipc/semctl Sys Call riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 12/23] linux-user: Properly Handle semun Structure In Cross-Endian Situations riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 13/23] linux-user: Make ipc syscall's third argument an abi_long riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 14/23] linux-user: Conditionally Pass Attribute Pointer to mq_open() riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 15/23] linux-user: Detect Negative Message Sizes in msgsnd System Call riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 16/23] linux-user: Handle NULL sched_param argument to sched_* riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 17/23] linux-user: Detect fault in sched_rr_get_interval riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 18/23] linux-user: Move get_ppc64_abi riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 19/23] linux-user: Minimum Sig Handler Stack Size for PPC64 ELF V2 riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 20/23] linux-user: clock_nanosleep errno Handling on PPC riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 21/23] linux-user: Support target-to-host translation of mlockall argument riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 22/23] linux-user: writev Partial Writes riku.voipio
2014-08-19  8:32 ` [Qemu-devel] [PULL v2 23/23] linux-user: check return value of malloc() riku.voipio
2014-08-19 11:59 ` [Qemu-devel] [PULL v2 00/23] linux-user updates Peter Maydell
2014-08-19 13:31   ` Riku Voipio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1982c8df5bf43930fe8227df82b4c93cc0a32b57.1408436940.git.riku.voipio@linaro.org \
    --to=riku.voipio@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).