qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] linux-user: dup3, fallocate syscalls
@ 2009-07-30 14:45 Ulrich Hecht
  2009-08-13 20:22 ` Riku Voipio
  2009-08-20 10:43 ` [Qemu-devel] [PATCH 07/13] " Ulrich Hecht
  0 siblings, 2 replies; 3+ messages in thread
From: Ulrich Hecht @ 2009-07-30 14:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: riku.voipio

implementations of dup3 and fallocate that are good enough to fool LTP

updated fallocate check to new configure, added dup3 check as suggested
by Jan-Simon Möller

Signed-off-by: Ulrich Hecht <uli@suse.de>
---
 configure            |   36 ++++++++++++++++++++++++++++++++++++
 linux-user/syscall.c |   12 ++++++++++++
 2 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/configure b/configure
index 8160bed..2329f88 100755
--- a/configure
+++ b/configure
@@ -1366,6 +1366,36 @@ if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
   splice=yes
 fi
 
+# check for fallocate
+fallocate=no
+cat > $TMPC << EOF
+#include <fcntl.h>
+
+int main(void)
+{
+    fallocate(0, 0, 0, 0);
+    return 0;
+}
+EOF
+if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
+  fallocate=yes
+fi
+
+# check for dup3
+dup3=no
+cat > $TMPC << EOF
+#include <unistd.h>
+
+int main(void)
+{
+    dup3(0, 0, 0);
+    return 0;
+}
+EOF
+if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
+  dup3=yes
+fi
+
 # Check if tools are available to build documentation.
 if test "$build_docs" = "yes" -a \( ! -x "`which texi2html 2>/dev/null`" -o ! -x "`which pod2man 2>/dev/null`" \) ; then
   build_docs="no"
@@ -1639,6 +1669,12 @@ fi
 if test "$splice" = "yes" ; then
   echo "CONFIG_SPLICE=y" >> $config_host_mak
 fi
+if test "$fallocate" = "yes" ; then
+  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
+fi
+if test "$dup3" = "yes" ; then
+  echo "CONFIG_DUP3=y" >> $config_host_mak
+fi
 if test "$inotify" = "yes" ; then
   echo "CONFIG_INOTIFY=y" >> $config_host_mak
 fi
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 31cf151..d105b8e 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -3681,8 +3681,10 @@ static int target_to_host_fcntl_cmd(int cmd)
             return F_SETLEASE;
         case TARGET_F_GETLEASE:
             return F_GETLEASE;
+#ifdef F_DUPFD_CLOEXEC
         case TARGET_F_DUPFD_CLOEXEC:
             return F_DUPFD_CLOEXEC;
+#endif
         case TARGET_F_NOTIFY:
             return F_NOTIFY;
 	default:
@@ -4732,6 +4734,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
     case TARGET_NR_dup2:
         ret = get_errno(dup2(arg1, arg2));
         break;
+#if defined(TARGET_NR_dup3) && defined(CONFIG_DUP3)
+    case TARGET_NR_dup3:
+        ret = get_errno(dup3(arg1, arg2, arg3));
+        break;
+#endif
 #ifdef TARGET_NR_getppid /* not on alpha */
     case TARGET_NR_getppid:
         ret = get_errno(getppid());
@@ -6976,6 +6983,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         break;
 #endif
 #endif /* CONFIG_SPLICE */
+#if defined(CONFIG_FALLOCATE) && defined(TARGET_NR_fallocate)
+    case TARGET_NR_fallocate:
+        ret = get_errno(fallocate(arg1, arg2, arg3, arg4));
+        break;
+#endif
     default:
     unimplemented:
         gemu_log("qemu: Unsupported syscall: %d\n", num);
-- 
1.6.2.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH] linux-user: dup3, fallocate syscalls
  2009-07-30 14:45 [Qemu-devel] [PATCH] linux-user: dup3, fallocate syscalls Ulrich Hecht
@ 2009-08-13 20:22 ` Riku Voipio
  2009-08-20 10:43 ` [Qemu-devel] [PATCH 07/13] " Ulrich Hecht
  1 sibling, 0 replies; 3+ messages in thread
From: Riku Voipio @ 2009-08-13 20:22 UTC (permalink / raw)
  To: Ulrich Hecht; +Cc: qemu-devel

Hi,

I quequed the other patches from you execpt this one -
The patch didn't apply for me, and a few comments inline:

On Thu, Jul 30, 2009 at 04:45:55PM +0200, Ulrich Hecht wrote:
> updated fallocate check to new configure, added dup3 check as suggested
> by Jan-Simon Möller

> Signed-off-by: Ulrich Hecht <uli@suse.de>
> ---
>  configure            |   36 ++++++++++++++++++++++++++++++++++++
>  linux-user/syscall.c |   12 ++++++++++++
>  2 files changed, 48 insertions(+), 0 deletions(-)
> 
> diff --git a/configure b/configure
> index 8160bed..2329f88 100755
> --- a/configure
> +++ b/configure
> @@ -1366,6 +1366,36 @@ if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
>    splice=yes
>  fi
>  
> +# check for fallocate
> +fallocate=no
> +cat > $TMPC << EOF
> +#include <fcntl.h>
> +
> +int main(void)
> +{
> +    fallocate(0, 0, 0, 0);
> +    return 0;
> +}
> +EOF
> +if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then

There is new stanza for this in configure:

	if compile_prog "" "" ; then

> +  fallocate=yes
> +fi
> +
> +# check for dup3
> +dup3=no
> +cat > $TMPC << EOF
> +#include <unistd.h>
> +
> +int main(void)
> +{
> +    dup3(0, 0, 0);
> +    return 0;
> +}
> +EOF
> +if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then

likewise

> +  dup3=yes
> +fi
> +
>  # Check if tools are available to build documentation.
>  if test "$build_docs" = "yes" -a \( ! -x "`which texi2html 2>/dev/null`" -o ! -x "`which pod2man 2>/dev/null`" \) ; then
>    build_docs="no"
> @@ -1639,6 +1669,12 @@ fi
>  if test "$splice" = "yes" ; then
>    echo "CONFIG_SPLICE=y" >> $config_host_mak
>  fi
> +if test "$fallocate" = "yes" ; then
> +  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
> +fi
> +if test "$dup3" = "yes" ; then
> +  echo "CONFIG_DUP3=y" >> $config_host_mak
> +fi
>  if test "$inotify" = "yes" ; then
>    echo "CONFIG_INOTIFY=y" >> $config_host_mak
>  fi
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 31cf151..d105b8e 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -3681,8 +3681,10 @@ static int target_to_host_fcntl_cmd(int cmd)
>              return F_SETLEASE;
>          case TARGET_F_GETLEASE:
>              return F_GETLEASE;

This is patching your previous patch? Generally that is frowned upon - it
is tricky to find which patches need to be applied first, and it is better
to fix it in the original patch so the broken code is never part of the git
history.

> +#ifdef F_DUPFD_CLOEXEC
>          case TARGET_F_DUPFD_CLOEXEC:
>              return F_DUPFD_CLOEXEC;
> +#endif
>          case TARGET_F_NOTIFY:
>              return F_NOTIFY;
>  	default:
> @@ -4732,6 +4734,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>      case TARGET_NR_dup2:
>          ret = get_errno(dup2(arg1, arg2));
>          break;
> +#if defined(TARGET_NR_dup3) && defined(CONFIG_DUP3)
> +    case TARGET_NR_dup3:
> +        ret = get_errno(dup3(arg1, arg2, arg3));
> +        break;
> +#endif
>  #ifdef TARGET_NR_getppid /* not on alpha */
>      case TARGET_NR_getppid:
>          ret = get_errno(getppid());
> @@ -6976,6 +6983,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>          break;
>  #endif
>  #endif /* CONFIG_SPLICE */
> +#if defined(CONFIG_FALLOCATE) && defined(TARGET_NR_fallocate)
> +    case TARGET_NR_fallocate:
> +        ret = get_errno(fallocate(arg1, arg2, arg3, arg4));
> +        break;
> +#endif

This is colliding with other patches in linux-user-for-upstream. It is a good
example why it is better to separete patches for seperate features - In that case
it would have been quite easy for me to fix it in by hand.

>      default:
>      unimplemented:
>          gemu_log("qemu: Unsupported syscall: %d\n", num);

Cheers, Riku

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PATCH 07/13] linux-user: dup3, fallocate syscalls
  2009-07-30 14:45 [Qemu-devel] [PATCH] linux-user: dup3, fallocate syscalls Ulrich Hecht
  2009-08-13 20:22 ` Riku Voipio
@ 2009-08-20 10:43 ` Ulrich Hecht
  1 sibling, 0 replies; 3+ messages in thread
From: Ulrich Hecht @ 2009-08-20 10:43 UTC (permalink / raw)
  To: qemu-devel, Riku Voipio

implementations of dup3 and fallocate that are good enough to fool LTP

dup3 check, fallocate check fixed
use compile_prog

Signed-off-by: Ulrich Hecht <uli@suse.de>
---
 configure            |   36 ++++++++++++++++++++++++++++++++++++
 linux-user/syscall.c |   10 ++++++++++
 2 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/configure b/configure
index 8e109c5..45f7a52 100755
--- a/configure
+++ b/configure
@@ -1349,6 +1349,36 @@ if compile_prog "" "" ; then
   splice=yes
 fi
 
+# check for fallocate
+fallocate=no
+cat > $TMPC << EOF
+#include <fcntl.h>
+
+int main(void)
+{
+    fallocate(0, 0, 0, 0);
+    return 0;
+}
+EOF
+if compile_prog "" "" ; then
+  fallocate=yes
+fi
+
+# check for dup3
+dup3=no
+cat > $TMPC << EOF
+#include <unistd.h>
+
+int main(void)
+{
+    dup3(0, 0, 0);
+    return 0;
+}
+EOF
+if compile_prog "" "" ; then
+  dup3=yes
+fi
+
 # Check if tools are available to build documentation.
 if test "$build_docs" = "yes" -a \( ! -x "`which texi2html 2>/dev/null`" -o ! -x "`which pod2man 2>/dev/null`" \) ; then
   build_docs="no"
@@ -1688,6 +1718,12 @@ fi
 if test "$splice" = "yes" ; then
   echo "CONFIG_SPLICE=y" >> $config_host_mak
 fi
+if test "$fallocate" = "yes" ; then
+  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
+fi
+if test "$dup3" = "yes" ; then
+  echo "CONFIG_DUP3=y" >> $config_host_mak
+fi
 if test "$inotify" = "yes" ; then
   echo "CONFIG_INOTIFY=y" >> $config_host_mak
 fi
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 6712cb7..7ee66bf 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4731,6 +4731,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
     case TARGET_NR_dup2:
         ret = get_errno(dup2(arg1, arg2));
         break;
+#if defined(TARGET_NR_dup3) && defined(CONFIG_DUP3)
+    case TARGET_NR_dup3:
+        ret = get_errno(dup3(arg1, arg2, arg3));
+        break;
+#endif
 #ifdef TARGET_NR_getppid /* not on alpha */
     case TARGET_NR_getppid:
         ret = get_errno(getppid());
@@ -6983,6 +6988,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         break;
 #endif
 #endif /* CONFIG_SPLICE */
+#if defined(CONFIG_FALLOCATE) && defined(TARGET_NR_fallocate)
+    case TARGET_NR_fallocate:
+        ret = get_errno(fallocate(arg1, arg2, arg3, arg4));
+        break;
+#endif
     default:
     unimplemented:
         gemu_log("qemu: Unsupported syscall: %d\n", num);
-- 
1.6.2.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-08-20 10:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-30 14:45 [Qemu-devel] [PATCH] linux-user: dup3, fallocate syscalls Ulrich Hecht
2009-08-13 20:22 ` Riku Voipio
2009-08-20 10:43 ` [Qemu-devel] [PATCH 07/13] " Ulrich Hecht

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).