This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 4/4] Consolidate posix_fadvise implementations


On Fri, Aug 19, 2016 at 11:41:49AM -0300, Adhemerval Zanella wrote:
Ah, forgot to notice...

[...]

> diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h
> index 6ca607e..628d27f 100644
> --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h
> @@ -27,6 +27,13 @@
>  # undef __ASSUME_SET_ROBUST_LIST
>  #endif
>  
> +/* ARM fadvise64_64 reorganize the syscall arguments.  */
> +#define __ASSUME_FADVISE64_64_6ARG	1

[...]

> diff --git a/sysdeps/unix/sysv/linux/posix_fadvise.c b/sysdeps/unix/sysv/linux/posix_fadvise.c
> index 093d707..869a642 100644
> --- a/sysdeps/unix/sysv/linux/posix_fadvise.c
> +++ b/sysdeps/unix/sysv/linux/posix_fadvise.c
> @@ -22,27 +22,46 @@
>  /* Advice the system about the expected behaviour of the application with
>     respect to the file associated with FD.  */
>  
> +#ifndef __OFF_T_MATCHES_OFF64_T
> +
> +/* Both arm and powerpc implements fadvise64_64 with last 'advise' argument
> +   just after 'fd' to avoid the requirement of implementing 7-arg syscalls.
> +   ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64.
> +
> +   tile requires __ASSUME_ALIGNED_REGISTER_PAIRS but implements the 32-bit
> +   fadvise64_64 without the padding 0 after fd.
> +
> +   s390 implements fadvice64_64 using a specific struct with arguments
> +   packed inside.  This is the only implementation handled in arch-specific
> +   code.  */
> +
>  int
>  posix_fadvise (int fd, off_t offset, off_t len, int advise)
>  {
> -#if defined(__NR_fadvise64) || defined(__NR_fadvise64_64)
>    INTERNAL_SYSCALL_DECL (err);
>  # ifdef __NR_fadvise64
> -  int ret = INTERNAL_SYSCALL (fadvise64, err, 5, fd,
> -			      __LONG_LONG_PAIR (offset >> 31, offset), len,
> -			      advise);
> +  int ret = INTERNAL_SYSCALL_CALL (fadvise64, err, fd,
> +				   __ALIGNMENT_ARG SYSCALL_LL (offset),
> +				   len, advise);
>  # else
> -  int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd,
> -			      __LONG_LONG_PAIR ((long) (offset >> 31),
> -						(long) offset),
> -			      __LONG_LONG_PAIR ((long) (len >> 31),
> -						(long) len),
> -			      advise);
> +#  ifdef __ASSUME_FADVISE64_64_6ARG

You should define __ASSUME_FADVISE64_64_6ARG for all ports,
and use #if instead of #ifdef.

For all new options you introduce. This is coding style rule. :(


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]