This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Enable common version of pthread_cond_timedwait to useVDSO version of clock_gettime(...)
- From: Luis Machado <luisgpm at linux dot vnet dot ibm dot com>
- To: libc-alpha at sourceware dot org
- Date: Tue, 23 Mar 2010 20:12:48 -0300
- Subject: Re: [PATCH] Enable common version of pthread_cond_timedwait to useVDSO version of clock_gettime(...)
- References: <1269359186.26595.12.camel@gargoyle>
- Reply-to: luisgpm at linux dot vnet dot ibm dot com
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);
>
>
>