Patchwork [3/4] Add inotify_init1 syscall support

login
register
mail settings
Submitter Riku Voipio
Date March 26, 2010, 3:25 p.m.
Message ID <47b7d8a4c69443f7902c4b413143cb8de67c1d6e.1269616764.git.riku.voipio@nokia.com>
Download mbox | patch
Permalink /patch/48653/
State New
Headers show

Comments

Riku Voipio - March 26, 2010, 3:25 p.m.
From: Riku Voipio <riku.voipio@nokia.com>

New syscall which gets actively used when you have a
fresh kernel.

Signed-off-by: Riku Voipio <riku.voipio@nokia.com>
---
 configure            |   18 ++++++++++++++++++
 linux-user/syscall.c |   14 ++++++++++++++
 2 files changed, 32 insertions(+), 0 deletions(-)
Aurelien Jarno - March 26, 2010, 10:14 p.m.
On Fri, Mar 26, 2010 at 03:25:11PM +0000, Riku Voipio wrote:
> From: Riku Voipio <riku.voipio@nokia.com>
> 
> New syscall which gets actively used when you have a
> fresh kernel.
> 
> Signed-off-by: Riku Voipio <riku.voipio@nokia.com>

Thanks, applied.

> ---
>  configure            |   18 ++++++++++++++++++
>  linux-user/syscall.c |   14 ++++++++++++++
>  2 files changed, 32 insertions(+), 0 deletions(-)
> 
> diff --git a/configure b/configure
> index 6bc40a3..f9e08f6 100755
> --- a/configure
> +++ b/configure
> @@ -1629,6 +1629,21 @@ if compile_prog "" "" ; then
>    inotify=yes
>  fi
>  
> +inotify1=no
> +cat > $TMPC << EOF
> +#include <sys/inotify.h>
> +
> +int
> +main(void)
> +{
> +    /* try to start inotify */
> +    return inotify_init1(0);
> +}
> +EOF
> +if compile_prog "" "" ; then
> +  inotify1=yes
> +fi
> +
>  # check if utimensat and futimens are supported
>  utimens=no
>  cat > $TMPC << EOF
> @@ -2136,6 +2151,9 @@ fi
>  if test "$inotify" = "yes" ; then
>    echo "CONFIG_INOTIFY=y" >> $config_host_mak
>  fi
> +if test "$inotify1" = "yes" ; then
> +  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
> +fi
>  if test "$byteswap_h" = "yes" ; then
>    echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
>  fi
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 845bb60..4b2a765 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -506,9 +506,18 @@ static int sys_inotify_rm_watch(int fd, int32_t wd)
>    return (inotify_rm_watch(fd, wd));
>  }
>  #endif
> +#ifdef CONFIG_INOTIFY1
> +#if defined(TARGET_NR_inotify_init1) && defined(__NR_inotify_init1)
> +static int sys_inotify_init1(int flags)
> +{
> +  return (inotify_init1(flags));
> +}
> +#endif
> +#endif
>  #else
>  /* Userspace can usually survive runtime without inotify */
>  #undef TARGET_NR_inotify_init
> +#undef TARGET_NR_inotify_init1
>  #undef TARGET_NR_inotify_add_watch
>  #undef TARGET_NR_inotify_rm_watch
>  #endif /* CONFIG_INOTIFY  */
> @@ -7174,6 +7183,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>          ret = get_errno(sys_inotify_init());
>          break;
>  #endif
> +#if defined(TARGET_NR_inotify_init1) && defined(__NR_inotify_init1)
> +    case TARGET_NR_inotify_init1:
> +        ret = get_errno(sys_inotify_init1(arg1));
> +        break;
> +#endif
>  #if defined(TARGET_NR_inotify_add_watch) && defined(__NR_inotify_add_watch)
>      case TARGET_NR_inotify_add_watch:
>          p = lock_user_string(arg2);
> -- 
> 1.6.5
> 
> 
> 
>

Patch

diff --git a/configure b/configure
index 6bc40a3..f9e08f6 100755
--- a/configure
+++ b/configure
@@ -1629,6 +1629,21 @@  if compile_prog "" "" ; then
   inotify=yes
 fi
 
+inotify1=no
+cat > $TMPC << EOF
+#include <sys/inotify.h>
+
+int
+main(void)
+{
+    /* try to start inotify */
+    return inotify_init1(0);
+}
+EOF
+if compile_prog "" "" ; then
+  inotify1=yes
+fi
+
 # check if utimensat and futimens are supported
 utimens=no
 cat > $TMPC << EOF
@@ -2136,6 +2151,9 @@  fi
 if test "$inotify" = "yes" ; then
   echo "CONFIG_INOTIFY=y" >> $config_host_mak
 fi
+if test "$inotify1" = "yes" ; then
+  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
+fi
 if test "$byteswap_h" = "yes" ; then
   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
 fi
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 845bb60..4b2a765 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -506,9 +506,18 @@  static int sys_inotify_rm_watch(int fd, int32_t wd)
   return (inotify_rm_watch(fd, wd));
 }
 #endif
+#ifdef CONFIG_INOTIFY1
+#if defined(TARGET_NR_inotify_init1) && defined(__NR_inotify_init1)
+static int sys_inotify_init1(int flags)
+{
+  return (inotify_init1(flags));
+}
+#endif
+#endif
 #else
 /* Userspace can usually survive runtime without inotify */
 #undef TARGET_NR_inotify_init
+#undef TARGET_NR_inotify_init1
 #undef TARGET_NR_inotify_add_watch
 #undef TARGET_NR_inotify_rm_watch
 #endif /* CONFIG_INOTIFY  */
@@ -7174,6 +7183,11 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         ret = get_errno(sys_inotify_init());
         break;
 #endif
+#if defined(TARGET_NR_inotify_init1) && defined(__NR_inotify_init1)
+    case TARGET_NR_inotify_init1:
+        ret = get_errno(sys_inotify_init1(arg1));
+        break;
+#endif
 #if defined(TARGET_NR_inotify_add_watch) && defined(__NR_inotify_add_watch)
     case TARGET_NR_inotify_add_watch:
         p = lock_user_string(arg2);