qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 11/12] linux-user: Support target-to-host transl


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH 11/12] linux-user: Support target-to-host translation of mlockall argument
Date: Mon, 4 Aug 2014 18:19:04 +0100

On 4 August 2014 17:45, Tom Musta <address@hidden> wrote:
> The argument to the mlockall system call is not necessarily the same on
> all platforms and thus may require translation prior to passing to the
> host.
>
> For example, PowerPC 64 bit platforms define values for MCL_CURRENT
> (0x2000) and MCL_FUTURE (0x4000) which are different from Intel platforms
> (0x1 and 0x2, respectively)
>
> Signed-off-by: Tom Musta <address@hidden>
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 5660520..fea54be 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -4934,6 +4934,34 @@ static inline abi_long 
> host_to_target_itimerspec(abi_ulong target_addr,
>      return 0;
>  }
>
> +#if defined(TARGET_NR_mlockall)
> +
> +#if defined(TARGET_PPC64)
> +#define TARGET_MLOCKALL_MCL_CURRENT 0x2000
> +#define TARGET_MLOCKALL_MCL_FUTURE  0x4000
> +#endif

These shouldn't be here -- they ought to go in some header file
in linux-user/ppc.

> +static inline int target_to_host_mlockall_arg(int arg)
> +{
> +    int result = 0;
> +
> +#ifdef TARGET_MLOCKALL_MCL_CURRENT
> +    if (arg & TARGET_MLOCKALL_MCL_CURRENT) {
> +        result |= MCL_CURRENT;
> +        arg ^= TARGET_MLOCKALL_MCL_CURRENT;
> +    }
> +#endif
> +#ifdef TARGET_MLOCKALL_MCL_FUTURE
> +    if (arg & TARGET_MLOCKALL_MCL_FUTURE) {
> +        result |= MCL_FUTURE;
> +        arg ^= TARGET_MLOCKALL_MCL_FUTURE;
> +    }
> +#endif

Rather than conditionalizing all this on whether
TARGET_MLOCKALL_* are defined we should just
define them for all our target architectures. (Otherwise
other-arch-on-PPC-host won't work.)

The right values are:
MCL_CURRENT:
 * PPC, SPARC, Alpha: 0x2000
 * everything else: 1
MCL_FUTURE:
 * PPC, SPARC, Alpha: 0x4000
 * everything else: 2

It's probably bogus to pass unknown flags through...

(For once MIPS isn't the weirdo.)

thanks
-- PMM



reply via email to

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