qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] ?==?utf-8?q? [PATCH v7 05/10] linux-user: Add support


From: Aleksandar Markovic
Subject: Re: [Qemu-devel] ?==?utf-8?q? [PATCH v7 05/10] linux-user: Add support for ustat() syscall
Date: Fri, 21 Oct 2016 20:01:11 +0200
User-agent: SOGoMail 2.3.10

Sure, thanks for all other efforts that you put regarding my patches.

I may post another version in some time. There is no rush wrt 2.8 as far as I 
am concerned.

-------- Original Message --------
Subject: Re: [PATCH v7 05/10] linux-user: Add support for ustat() syscall
Date: Friday, October 21, 2016 19:04 CEST
From: Riku Voipio <address@hidden>
To: Aleksandar Markovic <address@hidden>
CC: address@hidden, address@hidden, address@hidden, address@hidden, 
address@hidden, address@hidden, address@hidden
References: <address@hidden> <address@hidden>


 On Thu, Sep 22, 2016 at 06:56:54PM +0200, Aleksandar Markovic wrote:
> From: Aleksandar Markovic <address@hidden>
>
> This patch implements Qemu user mode ustat() syscall support.
>
> Syscall ustat() returns information about a mounted filesystem.
>
> Its declaration is:
>
> int ustat(dev_t dev, struct ustat *ubuf);
>
> Its Linux kernel implementation is at fs/compat.c, line 334.
>
> The Qemu implementation proposed in this patch is similar to the
> Qemu implementations of statfs(), fstatfs() and other related syscalls.
> It is based on invocation of host's ustat(), and its key part is in the
> correspondent case segment of the main switch statement of the function
> do_syscall(), in file linux-user/syscalls.c. All necessary conversions
> of data structures from target to host and from host to target are
> covered. Support for target_ustat is included. Sufficient support for
> "-strace" option for this syscall is already present, and this patch
> does not change it.
>
> This patch also fixes failures of LTP tests ustat01, and ustat02, if
> executed on Qemu-emulated systems.

Had to drop this patch from my series. Not all platforms implement
ustat anymore. As Peter suggested, it is probably better implement ustat
with calling statvfs or statfs.

> Signed-off-by: Aleksandar Markovic <address@hidden>
> ---
> linux-user/syscall.c | 23 +++++++++++++++++++++--
> linux-user/syscall_defs.h | 6 ++++++
> 2 files changed, 27 insertions(+), 2 deletions(-)
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 563796a..d28f3e6 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -48,6 +48,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base,
> #include <sys/shm.h>
> #include <sys/sem.h>
> #include <sys/statfs.h>
> +#include <ustat.h>
> #include <utime.h>
> #include <sys/sysinfo.h>
> #include <sys/signalfd.h>
> @@ -8226,9 +8227,27 @@ abi_long do_syscall(void *cpu_env, int num, abi_long 
> arg1,
> ret = get_errno(chroot(p));
> unlock_user(p, arg1, 0);
> break;
> -#ifdef TARGET_NR_ustat
> +#if defined(TARGET_NR_ustat)
> case TARGET_NR_ustat:
> - goto unimplemented;
> + {
> + struct ustat ust;
> +
> + ret = get_errno(ustat(arg1, &ust));
> + if (!is_error(ret)) {
> + struct target_ustat *target_ust;
> +
> + if (!lock_user_struct(VERIFY_WRITE, target_ust, arg2, 0)) {
> + goto efault;
> + }
> + __put_user(ust.f_tfree, &target_ust->f_tfree);
> + __put_user(ust.f_tinode, &target_ust->f_tinode);
> + memcpy(target_ust->f_fname, ust.f_fname, 6);
> + memcpy(target_ust->f_fpack, ust.f_fpack, 6);
> + unlock_user_struct(target_ust, arg2, 1);
> + }
> + }
> + break;
> +
> #endif
> #ifdef TARGET_NR_dup2
> case TARGET_NR_dup2:
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index e47a61a..2c183d1 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -2164,6 +2164,12 @@ struct target_statfs64 {
> };
> #endif
>
> +struct target_ustat {
> + abi_ulong f_tfree;
> + abi_int f_tinode;
> + char f_fname[6];
> + char f_fpack[6];
> +};
>
> #define TARGET_F_DUPFD 0 /* dup */
> #define TARGET_F_GETFD 1 /* get close_on_exec */
> --
> 2.9.3
>


 


reply via email to

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