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 06/14] Consolidate non cancellable writev call


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) \
> 


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