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] Enable common version of pthread_cond_timedwait to useVDSO version of clock_gettime(...)


Sorry for the duplicate, but this is the correct one (had an issue with
the Changelog in the previous mail).

Luis

On Tue, 2010-03-23 at 12:46 -0300, Luis Machado wrote:
> Hi,
> 
> Currently the common version of pthread_cond_timedwait(...) makes a
> explicit call to the clock_gettime(...) syscall.
> 
> This patch enables pthread_cond_timedwait to use the VDSO version of
> clock_gettime(...), whenever it's available, hopefully improving
> performance.
> 
> Regtested on powerpc with no regressions.
> 
> OK for trunk?
> 
> Luis
> 
> 
> 2010-03-23  Luis Machado  <luisgpm@br.ibm.com>
> 
> 	* pthread_cond_timedwait.c: Add check for
> 	HAVE_CLOCK_GETTIME_VSYSCALL to use VDSO whenever possible.
> 	Update Copyright year.
> 	(pthread_cond_timedwait): Use INTERNAL_VSYSCALL instead of
> 	INTERNAL_SYSCALL.
> 
> diff --git a/nptl/pthread_cond_timedwait.c b/nptl/pthread_cond_timedwait.c
> index 9d268e9..7278ec4 100644
> --- a/nptl/pthread_cond_timedwait.c
> +++ b/nptl/pthread_cond_timedwait.c
> @@ -1,4 +1,4 @@
> -/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
> +/* Copyright (C) 2003, 2004, 2007, 2010 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>     Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
> 
> @@ -27,6 +27,14 @@
> 
>  #include <shlib-compat.h>
> 
> +#ifndef HAVE_CLOCK_GETTIME_VSYSCALL
> +# undef INTERNAL_VSYSCALL
> +# define INTERNAL_VSYSCALL INTERNAL_SYSCALL
> +# undef INLINE_VSYSCALL
> +# define INLINE_VSYSCALL INLINE_SYSCALL
> +#else
> +# include <bits/libc-vdso.h>
> +#endif
> 
>  /* Cleanup handler, defined in pthread_cond_wait.c.  */
>  extern void __condvar_cleanup (void *arg)
> @@ -102,7 +110,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
>  #ifdef __NR_clock_gettime
>  	INTERNAL_SYSCALL_DECL (err);
>  	int ret;
> -	ret = INTERNAL_SYSCALL (clock_gettime, err, 2,
> +	ret = INTERNAL_VSYSCALL (clock_gettime, err, 2,
>  				(cond->__data.__nwaiters
>  				 & ((1 << COND_NWAITERS_SHIFT) - 1)),
>  				&rt);
> 
> 
> 



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