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