From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26740 invoked by alias); 28 Apr 2014 17:02:25 -0000 Mailing-List: contact libc-ports-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: libc-ports-owner@sourceware.org Received: (qmail 26725 invoked by uid 89); 28 Apr 2014 17:02:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.0 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 28 Apr 2014 17:02:23 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s3SH2Lej030559 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 28 Apr 2014 13:02:21 -0400 Received: from [10.3.113.56] (ovpn-113-56.phx2.redhat.com [10.3.113.56]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s3SH2Kp0017102; Mon, 28 Apr 2014 13:02:20 -0400 Message-ID: <535E899C.30509@redhat.com> Date: Mon, 28 Apr 2014 17:02:00 -0000 From: "Carlos O'Donell" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 MIME-Version: 1.0 To: Bernie Ogden , libc-ports@sourceware.org Subject: Re: [PATCH] Remove hppa lowlevellock.c References: In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2014-04/txt/msg00005.txt.bz2 On 04/28/2014 11:51 AM, Bernie Ogden wrote: > lowlevellock.c for hppa differs from the generic lowlevellock.c only in > insignificant ways, so can be removed. I don't have any hppa targets > to work with, so have not been able to test this patch. Thanks for this. I'll test this shortly. > The notable differences between the hppa and generic implementations are: > > 1) Some functions in hppa's lowlevellock.c set futex to 2 if it was 1. > The generic version always sets the futex to 2. As futex can only be > 0, 1 or 2 on entry into these functions, the behaviour is equivalent. > (If the futex manages to be 0 on entry then we've just lost an > unlikely fast path out.) OK. > 2) hppa places most of the functions in this file in both libc and > libpthread. The generic implementation places only > __lll_lock_wait_private in libc. As these are internal functions I > think that, if this does cause a problem, it would show up at build > time - but I'm new to glibc so prepared to be corrected (and have not > been able to build). I'll test this, but as they are internal functions it probably doesn't matter but makes the final object size smaller. > I would be grateful if the maintainer could test/comment. > > Regards, > > Bernie > > ports/ChangeLog.hppa > 2014-04-24 Bernard Ogden > > [BZ #15119] > * ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c: Remove file. Slightly the wrong format. Should be: 2014-04-24 Bernard Ogden [BZ #15119] * ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c: Remove file. However, I haven't moved hppa out of ports, I'll do that at the end of the day or if I get a break of time waiting on something. > diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c > b/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c > deleted file mode 100644 > index d61c5d3..0000000 > --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c > +++ /dev/null > @@ -1,127 +0,0 @@ > -/* low level locking for pthread library. Generic futex-using version. > - Copyright (C) 2003-2014 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - Contributed by Paul Mackerras , 2003. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library. If not, see > - . */ > - > -#include > -#include > -#include > -#include > - > -void > -__lll_lock_wait (lll_lock_t *futex, int private) > -{ > - do > - { > - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); > - if (oldval != 0) > - lll_futex_wait (futex, 2, private); > - } > - while (atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0); > -} > - > -void > -__lll_lock_wait_private (lll_lock_t *futex) > -{ > - do > - { > - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); > - if (oldval != 0) > - lll_futex_wait (futex, 2, LLL_PRIVATE); > - } > - while (atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0); > -} > - > -int > -__lll_timedlock_wait (lll_lock_t *futex, const struct timespec > *abstime, int private) > -{ > - /* Reject invalid timeouts. */ > - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) > - return EINVAL; > - > - do > - { > - struct timeval tv; > - struct timespec rt; > - > - /* Get the current time. */ > - (void) __gettimeofday (&tv, NULL); > - > - /* Compute relative timeout. */ > - rt.tv_sec = abstime->tv_sec - tv.tv_sec; > - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; > - if (rt.tv_nsec < 0) > - { > - rt.tv_nsec += 1000000000; > - --rt.tv_sec; > - } > - > - /* Already timed out? */ > - if (rt.tv_sec < 0) > - return ETIMEDOUT; > - > - /* Wait. */ > - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); > - if (oldval != 0) > - lll_futex_timed_wait (futex, 2, &rt, private); > - } > - while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); > - return 0; > -} > - > - > -/* These don't get included in libc.so */ > -#ifdef IS_IN_libpthread > -int > -__lll_timedwait_tid (int *tidp, const struct timespec *abstime) > -{ > - int tid; > - > - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) > - return EINVAL; > - > - /* Repeat until thread terminated. */ > - while ((tid = *tidp) != 0) > - { > - struct timeval tv; > - struct timespec rt; > - > - /* Get the current time. */ > - (void) __gettimeofday (&tv, NULL); > - > - /* Compute relative timeout. */ > - rt.tv_sec = abstime->tv_sec - tv.tv_sec; > - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; > - if (rt.tv_nsec < 0) > - { > - rt.tv_nsec += 1000000000; > - --rt.tv_sec; > - } > - > - /* Already timed out? */ > - if (rt.tv_sec < 0) > - return ETIMEDOUT; > - > - /* Wait until thread terminates. */ > - if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) > - return ETIMEDOUT; > - } > - > - return 0; > -} > -#endif > - > Cheers, Carlos.