[06/14] Consolidate non cancellable writev call
Commit Message
This patch consolidates all the non cancellable writev calls to use
the __writev_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
__writev_nocancel_nostatus.
(write_call_graph): Likewise.
(write_bb_counts): Likewise.
* resolv/herror.c (herror): Likewise.
* sysdeps/generic/not-cancel.h (writev_not_cancel_no_status): Remove
macro.
(__writev_nocancel_nostatus): New macro.
* sysdeps/unix/sysv/linux/not-cancel.h (writev_not_cancel_no_status):
Remove macro.
(__writev_nocancel_nostatus): New function.
---
ChangeLog | 12 ++++++++++++
gmon/gmon.c | 12 ++++++------
resolv/herror.c | 2 +-
sysdeps/generic/not-cancel.h | 2 +-
sysdeps/unix/sysv/linux/not-cancel.h | 12 ++++++++----
5 files changed, 28 insertions(+), 12 deletions(-)
Comments
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable writev calls to use
> the __writev_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
> __writev_nocancel_nostatus.
> (write_call_graph): Likewise.
> (write_bb_counts): Likewise.
> * resolv/herror.c (herror): Likewise.
> * sysdeps/generic/not-cancel.h (writev_not_cancel_no_status): Remove
> macro.
> (__writev_nocancel_nostatus): New macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (writev_not_cancel_no_status):
> Remove macro.
> (__writev_nocancel_nostatus): New function.
> ---
> ChangeLog | 12 ++++++++++++
> gmon/gmon.c | 12 ++++++------
> resolv/herror.c | 2 +-
> sysdeps/generic/not-cancel.h | 2 +-
> sysdeps/unix/sysv/linux/not-cancel.h | 12 ++++++++----
> 5 files changed, 28 insertions(+), 12 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 4ee70fb..fbf0c6a 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,17 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
> + __writev_nocancel_nostatus.
> + (write_call_graph): Likewise.
> + (write_bb_counts): Likewise.
> + * resolv/herror.c (herror): Likewise.
> + * sysdeps/generic/not-cancel.h (writev_not_cancel_no_status): Remove
> + macro.
> + (__writev_nocancel_nostatus): New macro.
> + * sysdeps/unix/sysv/linux/not-cancel.h (writev_not_cancel_no_status):
> + Remove macro.
> + (__writev_nocancel_nostatus): New function.
> +
> * sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro.
> (close_not_cancel_no_status): Likewise.
> (__close_nocancel): New macro.
> diff --git a/gmon/gmon.c b/gmon/gmon.c
> index 90c7895..c1d1701 100644
> --- a/gmon/gmon.c
> +++ b/gmon/gmon.c
> @@ -216,7 +216,7 @@ write_hist (int fd)
> strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
> thdr.dimen_abbrev = 's';
>
> - writev_not_cancel_no_status (fd, iov, 3);
> + __writev_nocancel_nostatus (fd, iov, 3);
> }
> }
>
> @@ -273,13 +273,13 @@ write_call_graph (int fd)
>
> if (++nfilled == NARCS_PER_WRITEV)
> {
> - writev_not_cancel_no_status (fd, iov, 2 * nfilled);
> + __writev_nocancel_nostatus (fd, iov, 2 * nfilled);
> nfilled = 0;
> }
> }
> }
> if (nfilled > 0)
> - writev_not_cancel_no_status (fd, iov, 2 * nfilled);
> + __writev_nocancel_nostatus (fd, iov, 2 * nfilled);
> }
>
>
> @@ -312,12 +312,12 @@ write_bb_counts (int fd)
> for (grp = __bb_head; grp; grp = grp->next)
> {
> ncounts = grp->ncounts;
> - writev_not_cancel_no_status (fd, bbhead, 2);
> + __writev_nocancel_nostatus (fd, bbhead, 2);
> for (nfilled = i = 0; i < ncounts; ++i)
> {
> if (nfilled > (sizeof (bbbody) / sizeof (bbbody[0])) - 2)
> {
> - writev_not_cancel_no_status (fd, bbbody, nfilled);
> + __writev_nocancel_nostatus (fd, bbbody, nfilled);
> nfilled = 0;
> }
>
> @@ -325,7 +325,7 @@ write_bb_counts (int fd)
> bbbody[nfilled++].iov_base = &grp->counts[i];
> }
> if (nfilled > 0)
> - writev_not_cancel_no_status (fd, bbbody, nfilled);
> + __writev_nocancel_nostatus (fd, bbbody, nfilled);
> }
> }
>
> diff --git a/resolv/herror.c b/resolv/herror.c
> index b3df236..45c0a5d 100644
> --- a/resolv/herror.c
> +++ b/resolv/herror.c
> @@ -89,7 +89,7 @@ herror(const char *s) {
> v++;
> v->iov_base = (char *) "\n";
> v->iov_len = 1;
> - writev_not_cancel_no_status(STDERR_FILENO, iov, (v - iov) + 1);
> + __writev_nocancel_nostatus(STDERR_FILENO, iov, (v - iov) + 1);
> }
>
> /*
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index ee9988a..e3ed0e6 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -34,7 +34,7 @@
> __read (fd, buf, n)
> #define __write_nocancel(fd, buf, n) \
> __write (fd, buf, n)
> -#define writev_not_cancel_no_status(fd, iov, n) \
> +#define __writev_nocancel_nostatus(fd, iov, n) \
> (void) __writev (fd, iov, n)
> #define fcntl_not_cancel(fd, cmd, val) \
> __fcntl (fd, cmd, val)
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 684541a..419a3fa 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -63,10 +63,14 @@ __close_nocancel_nostatus (int fd)
> INTERNAL_SYSCALL (close, err, 1, (fd));
> }
>
> -/* Uncancelable writev. */
> -#define writev_not_cancel_no_status(fd, iov, n) \
> - (void) ({ INTERNAL_SYSCALL_DECL (err); \
> - INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); })
> +/* Non cancellable writev syscall that does not also set errno in case of
> + failure. */
> +static inline void
> +__writev_nocancel_nostatus (int fd, const struct iovec *iov, int iovcnt)
> +{
> + INTERNAL_SYSCALL_DECL (err);
> + INTERNAL_SYSCALL_CALL (writev, err, fd, iov, iovcnt);
> +}
>
> /* Uncancelable fcntl. */
> #define fcntl_not_cancel(fd, cmd, val) \
>
@@ -1,5 +1,17 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
+ __writev_nocancel_nostatus.
+ (write_call_graph): Likewise.
+ (write_bb_counts): Likewise.
+ * resolv/herror.c (herror): Likewise.
+ * sysdeps/generic/not-cancel.h (writev_not_cancel_no_status): Remove
+ macro.
+ (__writev_nocancel_nostatus): New macro.
+ * sysdeps/unix/sysv/linux/not-cancel.h (writev_not_cancel_no_status):
+ Remove macro.
+ (__writev_nocancel_nostatus): New function.
+
* sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro.
(close_not_cancel_no_status): Likewise.
(__close_nocancel): New macro.
@@ -216,7 +216,7 @@ write_hist (int fd)
strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
thdr.dimen_abbrev = 's';
- writev_not_cancel_no_status (fd, iov, 3);
+ __writev_nocancel_nostatus (fd, iov, 3);
}
}
@@ -273,13 +273,13 @@ write_call_graph (int fd)
if (++nfilled == NARCS_PER_WRITEV)
{
- writev_not_cancel_no_status (fd, iov, 2 * nfilled);
+ __writev_nocancel_nostatus (fd, iov, 2 * nfilled);
nfilled = 0;
}
}
}
if (nfilled > 0)
- writev_not_cancel_no_status (fd, iov, 2 * nfilled);
+ __writev_nocancel_nostatus (fd, iov, 2 * nfilled);
}
@@ -312,12 +312,12 @@ write_bb_counts (int fd)
for (grp = __bb_head; grp; grp = grp->next)
{
ncounts = grp->ncounts;
- writev_not_cancel_no_status (fd, bbhead, 2);
+ __writev_nocancel_nostatus (fd, bbhead, 2);
for (nfilled = i = 0; i < ncounts; ++i)
{
if (nfilled > (sizeof (bbbody) / sizeof (bbbody[0])) - 2)
{
- writev_not_cancel_no_status (fd, bbbody, nfilled);
+ __writev_nocancel_nostatus (fd, bbbody, nfilled);
nfilled = 0;
}
@@ -325,7 +325,7 @@ write_bb_counts (int fd)
bbbody[nfilled++].iov_base = &grp->counts[i];
}
if (nfilled > 0)
- writev_not_cancel_no_status (fd, bbbody, nfilled);
+ __writev_nocancel_nostatus (fd, bbbody, nfilled);
}
}
@@ -89,7 +89,7 @@ herror(const char *s) {
v++;
v->iov_base = (char *) "\n";
v->iov_len = 1;
- writev_not_cancel_no_status(STDERR_FILENO, iov, (v - iov) + 1);
+ __writev_nocancel_nostatus(STDERR_FILENO, iov, (v - iov) + 1);
}
/*
@@ -34,7 +34,7 @@
__read (fd, buf, n)
#define __write_nocancel(fd, buf, n) \
__write (fd, buf, n)
-#define writev_not_cancel_no_status(fd, iov, n) \
+#define __writev_nocancel_nostatus(fd, iov, n) \
(void) __writev (fd, iov, n)
#define fcntl_not_cancel(fd, cmd, val) \
__fcntl (fd, cmd, val)
@@ -63,10 +63,14 @@ __close_nocancel_nostatus (int fd)
INTERNAL_SYSCALL (close, err, 1, (fd));
}
-/* Uncancelable writev. */
-#define writev_not_cancel_no_status(fd, iov, n) \
- (void) ({ INTERNAL_SYSCALL_DECL (err); \
- INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); })
+/* Non cancellable writev syscall that does not also set errno in case of
+ failure. */
+static inline void
+__writev_nocancel_nostatus (int fd, const struct iovec *iov, int iovcnt)
+{
+ INTERNAL_SYSCALL_DECL (err);
+ INTERNAL_SYSCALL_CALL (writev, err, fd, iov, iovcnt);
+}
/* Uncancelable fcntl. */
#define fcntl_not_cancel(fd, cmd, val) \