Remove __ASSUME_COMPLETE_READV_WRITEV
Commit Message
This patch removes the __ASSUME_COMPLETE_READV_WRITEV
kernel-features.h macro, now that it can be unconditionally assumed to
be true. (The relevant kernel feature was added some time between 2.0
and 2.2, and this macro is only used in sysdeps/unix/sysv/linux/.)
Tested x86_64 that the disassembly of installed shared libraries is
unchanged by this patch.
2014-06-20 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_COMPLETE_READV_WRITEV): Remove macro.
* sysdeps/unix/sysv/linux/readv.c: Do not include
<kernel-features.h>.
[!__ASSUME_COMPLETE_READV_WRITEV]: Remove conditional code.
[!UIO_FASTIOV] (UIO_FASTIOV): Remove macro.
(__libc_readv) [__ASSUME_COMPLETE_READV_WRITEV]: Make code
unconditional.
(__libc_readv) [!__ASSUME_COMPLETE_READV_WRITEV]: Remove
conditional code.
* sysdeps/unix/sysv/linux/writev.c: Do not include
<kernel-features.h>.
[!__ASSUME_COMPLETE_READV_WRITEV]: Remove conditional code.
[!UIO_FASTIOV] (UIO_FASTIOV): Remove macro.
(__libc_writev) [__ASSUME_COMPLETE_READV_WRITEV]: Make code
unconditional.
(__libc_writev) [!__ASSUME_COMPLETE_READV_WRITEV]: Remove
conditional code.
Comments
Ping. This patch
<https://sourceware.org/ml/libc-alpha/2014-06/msg00518.html> is pending
review.
On 20 June 2014 17:00, Joseph S. Myers <joseph@codesourcery.com> wrote:
> This patch removes the __ASSUME_COMPLETE_READV_WRITEV
> kernel-features.h macro, now that it can be unconditionally assumed to
> be true. (The relevant kernel feature was added some time between 2.0
> and 2.2, and this macro is only used in sysdeps/unix/sysv/linux/.)
>
> Tested x86_64 that the disassembly of installed shared libraries is
> unchanged by this patch.
>
> 2014-06-20 Joseph Myers <joseph@codesourcery.com>
>
> * sysdeps/unix/sysv/linux/kernel-features.h
> (__ASSUME_COMPLETE_READV_WRITEV): Remove macro.
> * sysdeps/unix/sysv/linux/readv.c: Do not include
> <kernel-features.h>.
> [!__ASSUME_COMPLETE_READV_WRITEV]: Remove conditional code.
> [!UIO_FASTIOV] (UIO_FASTIOV): Remove macro.
> (__libc_readv) [__ASSUME_COMPLETE_READV_WRITEV]: Make code
> unconditional.
> (__libc_readv) [!__ASSUME_COMPLETE_READV_WRITEV]: Remove
> conditional code.
> * sysdeps/unix/sysv/linux/writev.c: Do not include
> <kernel-features.h>.
> [!__ASSUME_COMPLETE_READV_WRITEV]: Remove conditional code.
> [!UIO_FASTIOV] (UIO_FASTIOV): Remove macro.
> (__libc_writev) [__ASSUME_COMPLETE_READV_WRITEV]: Make code
> unconditional.
> (__libc_writev) [!__ASSUME_COMPLETE_READV_WRITEV]: Remove
> conditional code.
This looks ok to me.
> diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
> index 026f89f..acc7ca3 100644
> --- a/sysdeps/unix/sysv/linux/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/kernel-features.h
> @@ -94,11 +94,6 @@
> # define __ASSUME_SET_ROBUST_LIST 1
> #endif
>
> -/* Pessimistically assume that 2.6.18 introduced real handling of
> - large numbers of requests to readv and writev and that we don't
> - need a fallback. It likely worked for much longer. */
> -#define __ASSUME_COMPLETE_READV_WRITEV 1
> -
> /* Support for PI futexes was added in 2.6.18 (but some architectures
> lack futex_atomic_cmpxchg_inatomic in some configurations). */
> #if !(defined __sparc__ && !defined __arch64__ && !defined __sparc_v9__)
> diff --git a/sysdeps/unix/sysv/linux/readv.c b/sysdeps/unix/sysv/linux/readv.c
> index 48eae46..a977d17 100644
> --- a/sysdeps/unix/sysv/linux/readv.c
> +++ b/sysdeps/unix/sysv/linux/readv.c
> @@ -23,19 +23,8 @@
>
> #include <sysdep-cancel.h>
> #include <sys/syscall.h>
> -#include <kernel-features.h>
> -
> -#ifndef __ASSUME_COMPLETE_READV_WRITEV
> -static ssize_t __atomic_readv_replacement (int, const struct iovec *,
> - int) internal_function;
> -#endif
> -
> -
> -/* Not all versions of the kernel support the large number of records. */
> -#ifndef UIO_FASTIOV
> -# define UIO_FASTIOV 8 /* 8 is a safe number. */
> -#endif
>
> +/* Consider moving to syscalls.list. */
>
> ssize_t
> __libc_readv (fd, vector, count)
> @@ -56,19 +45,7 @@ __libc_readv (fd, vector, count)
> LIBC_CANCEL_RESET (oldtype);
> }
>
> -#ifdef __ASSUME_COMPLETE_READV_WRITEV
> return result;
> -#else
> - if (result >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
> - return result;
> -
> - return __atomic_readv_replacement (fd, vector, count);
> -#endif
> }
> strong_alias (__libc_readv, __readv)
> weak_alias (__libc_readv, readv)
> -
> -#ifndef __ASSUME_COMPLETE_READV_WRITEV
> -# define __libc_readv static internal_function __atomic_readv_replacement
> -# include <sysdeps/posix/readv.c>
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/writev.c b/sysdeps/unix/sysv/linux/writev.c
> index 06c4c9c..f19221f 100644
> --- a/sysdeps/unix/sysv/linux/writev.c
> +++ b/sysdeps/unix/sysv/linux/writev.c
> @@ -23,19 +23,9 @@
>
> #include <sysdep-cancel.h>
> #include <sys/syscall.h>
> -#include <kernel-features.h>
>
> -#ifndef __ASSUME_COMPLETE_READV_WRITEV
> -static ssize_t __atomic_writev_replacement (int, const struct iovec *,
> - int) internal_function;
> -#endif
> -
> -
> -/* Not all versions of the kernel support the large number of records. */
> -#ifndef UIO_FASTIOV
> -# define UIO_FASTIOV 8 /* 8 is a safe number. */
> -#endif
>
> +/* Consider moving to syscalls.list. */
>
> ssize_t
> __libc_writev (fd, vector, count)
> @@ -56,19 +46,7 @@ __libc_writev (fd, vector, count)
> LIBC_CANCEL_RESET (oldtype);
> }
>
> -#ifdef __ASSUME_COMPLETE_READV_WRITEV
> return result;
> -#else
> - if (result >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
> - return result;
> -
> - return __atomic_writev_replacement (fd, vector, count);
> -#endif
> }
> strong_alias (__libc_writev, __writev)
> weak_alias (__libc_writev, writev)
> -
> -#ifndef __ASSUME_COMPLETE_READV_WRITEV
> -# define __libc_writev static internal_function __atomic_writev_replacement
> -# include <sysdeps/posix/writev.c>
> -#endif
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
@@ -94,11 +94,6 @@
# define __ASSUME_SET_ROBUST_LIST 1
#endif
-/* Pessimistically assume that 2.6.18 introduced real handling of
- large numbers of requests to readv and writev and that we don't
- need a fallback. It likely worked for much longer. */
-#define __ASSUME_COMPLETE_READV_WRITEV 1
-
/* Support for PI futexes was added in 2.6.18 (but some architectures
lack futex_atomic_cmpxchg_inatomic in some configurations). */
#if !(defined __sparc__ && !defined __arch64__ && !defined __sparc_v9__)
@@ -23,19 +23,8 @@
#include <sysdep-cancel.h>
#include <sys/syscall.h>
-#include <kernel-features.h>
-
-#ifndef __ASSUME_COMPLETE_READV_WRITEV
-static ssize_t __atomic_readv_replacement (int, const struct iovec *,
- int) internal_function;
-#endif
-
-
-/* Not all versions of the kernel support the large number of records. */
-#ifndef UIO_FASTIOV
-# define UIO_FASTIOV 8 /* 8 is a safe number. */
-#endif
+/* Consider moving to syscalls.list. */
ssize_t
__libc_readv (fd, vector, count)
@@ -56,19 +45,7 @@ __libc_readv (fd, vector, count)
LIBC_CANCEL_RESET (oldtype);
}
-#ifdef __ASSUME_COMPLETE_READV_WRITEV
return result;
-#else
- if (result >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
- return result;
-
- return __atomic_readv_replacement (fd, vector, count);
-#endif
}
strong_alias (__libc_readv, __readv)
weak_alias (__libc_readv, readv)
-
-#ifndef __ASSUME_COMPLETE_READV_WRITEV
-# define __libc_readv static internal_function __atomic_readv_replacement
-# include <sysdeps/posix/readv.c>
-#endif
@@ -23,19 +23,9 @@
#include <sysdep-cancel.h>
#include <sys/syscall.h>
-#include <kernel-features.h>
-#ifndef __ASSUME_COMPLETE_READV_WRITEV
-static ssize_t __atomic_writev_replacement (int, const struct iovec *,
- int) internal_function;
-#endif
-
-
-/* Not all versions of the kernel support the large number of records. */
-#ifndef UIO_FASTIOV
-# define UIO_FASTIOV 8 /* 8 is a safe number. */
-#endif
+/* Consider moving to syscalls.list. */
ssize_t
__libc_writev (fd, vector, count)
@@ -56,19 +46,7 @@ __libc_writev (fd, vector, count)
LIBC_CANCEL_RESET (oldtype);
}
-#ifdef __ASSUME_COMPLETE_READV_WRITEV
return result;
-#else
- if (result >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
- return result;
-
- return __atomic_writev_replacement (fd, vector, count);
-#endif
}
strong_alias (__libc_writev, __writev)
weak_alias (__libc_writev, writev)
-
-#ifndef __ASSUME_COMPLETE_READV_WRITEV
-# define __libc_writev static internal_function __atomic_writev_replacement
-# include <sysdeps/posix/writev.c>
-#endif