From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-3.9 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 5D8C520248 for ; Tue, 19 Mar 2019 17:24:38 +0000 (UTC) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:subject:from:to:references:message-id:date :mime-version:in-reply-to:content-type :content-transfer-encoding; q=dns; s=default; b=HBre49e3R995wonj OTZXYWKFDcMq7vckWBi5zqLvQvZqGyobPMA4VxT0/lJ6/yCQ9ayF/P6polZqh5dN hKTnBuKTOxi7H8qZst8QVkuViEIR5aqoOyCMwh3OYZP9/INJMYQ1DzrYJ/0fwp6v t19+GcJdbjqoaz1cY+A+qZZapE4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:subject:from:to:references:message-id:date :mime-version:in-reply-to:content-type :content-transfer-encoding; s=default; bh=jDE7pEWJlAMfUYfDL53kaB DQHII=; b=g5DEg7Md6LozOLKgt4OM0N9zg1F6lIRjZbKu8+1JWxLgjOUrAUqpJD WlNi9G+jQubufwd1GQLgAileg/EcPk0rFhqZNpz0Yjtk8anPboKDIZHzVcX03ffd jymsjZgoeKzqvXndO2sKSLvBmHWQzIsBIYaWZS5XHoaiNUXul4v3I= Received: (qmail 95750 invoked by alias); 19 Mar 2019 17:24:34 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 92541 invoked by uid 89); 19 Mar 2019 17:24:26 -0000 Authentication-Results: sourceware.org; auth=none X-HELO: mail-vs1-f66.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:from:to:references:openpgp:autocrypt:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=QILUTiq9urqDNty0Gjvfoyq/nphdssvoq73jMgzxPwc=; b=RVSAoElwyvco3a6JlerhUKYCzKIM/ihaN5vJ/YsRGOKYOJMiFh312v2IZFM8hYBvhs i5Mdj0Q/YKrOg6WlOBxk5JW4CDsUvh2NtK/A928Nw5NAP1DnvaEkfdFA1wFdXYRrXOM/ mXNXNtv4tUkInF6ZUAlVX9+QTH3xGuv7/w85635WDG8Rn4DLbhlE47EhO6VeDDxuZ1YZ n8ft16Bz6yc0mBE1TzXLZIuh6Jnyxa0+bpBdWI66eGMQ/40UmEiXDevT3qczsqSZ2Lih YrOY0gpfcm6rUNleRX+j1wiejOFqCZvsZlhoC6KbQpKOeiUW6upZJwf3/c8AE5eTsaH1 Bl9Q== Subject: Re: [PATCH v2 2/6] linux: Assume clock_getres CLOCK_{PROCESS,THREAD}_CPUTIME_ID From: Adhemerval Zanella To: libc-alpha@sourceware.org References: <20190218211128.1869-1-adhemerval.zanella@linaro.org> <20190218211128.1869-2-adhemerval.zanella@linaro.org> Openpgp: preference=signencrypt Message-ID: <8bd4db2a-75d6-a279-c9d3-d741512ebe4d@linaro.org> Date: Tue, 19 Mar 2019 14:24:10 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: <20190218211128.1869-2-adhemerval.zanella@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Ping. On 18/02/2019 18:11, Adhemerval Zanella wrote: > Changes from previous version: > > - Remove ia64 itc drift check and assume kernel handles it correctly. > > --- > > This patch assumes that clock_getres syscall always support > CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID, so there is no need > to fallback to hp-timing support for _SC_MONOTONIC_CLOCK. This allows > simplify the sysconf support to always use the syscall. > > The ia64 implementation is also simplified and consolidate in one file. > > Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu. > > * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c: Remove file. > * sysdeps/unix/sysv/linux/ia64/sysconf.c: Likewise. > * sysdeps/unix/sysv/linux/sysconf.c (has_cpuclock): Remove function. > (check_clock_getres): New function. > (__sysconf): Use check_clock_getres instead of has_cpuclock. > --- > sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 51 --------------------- > sysdeps/unix/sysv/linux/ia64/sysconf.c | 30 ------------ > sysdeps/unix/sysv/linux/sysconf.c | 48 ++++++------------- > 3 files changed, 13 insertions(+), 116 deletions(-) > delete mode 100644 sysdeps/unix/sysv/linux/ia64/has_cpuclock.c > delete mode 100644 sysdeps/unix/sysv/linux/ia64/sysconf.c > > diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c > deleted file mode 100644 > index b3afb37f8b..0000000000 > --- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c > +++ /dev/null > @@ -1,51 +0,0 @@ > -/* Copyright (C) 2000-2019 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - 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 > -#include > -#include > - > -static int itc_usable; > - > -static int > -has_cpuclock (void) > -{ > - if (__builtin_expect (itc_usable == 0, 0)) > - { > - int newval = 1; > - int fd = __open_nocancel ("/proc/sal/itc_drift", O_RDONLY); > - if (__builtin_expect (fd != -1, 1)) > - { > - char buf[16]; > - /* We expect the file to contain a single digit followed by > - a newline. If the format changes we better not rely on > - the file content. */ > - if (__read_nocancel (fd, buf, sizeof buf) != 2 > - || buf[0] != '0' || buf[1] != '\n') > - newval = -1; > - > - __close_nocancel_nostatus (fd); > - } > - > - itc_usable = newval; > - } > - > - return itc_usable; > -} > diff --git a/sysdeps/unix/sysv/linux/ia64/sysconf.c b/sysdeps/unix/sysv/linux/ia64/sysconf.c > deleted file mode 100644 > index ef75322f1f..0000000000 > --- a/sysdeps/unix/sysv/linux/ia64/sysconf.c > +++ /dev/null > @@ -1,30 +0,0 @@ > -/* Get file-specific information about a file. Linux/ia64 version. > - Copyright (C) 2003-2019 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - 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 > - > - > -#include "has_cpuclock.c" > -#define HAS_CPUCLOCK(name) (has_cpuclock () ? _POSIX_VERSION : -1) > - > - > -/* Now the generic Linux version. */ > -#include > diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c > index 4b297ba35f..2027444488 100644 > --- a/sysdeps/unix/sysv/linux/sysconf.c > +++ b/sysdeps/unix/sysv/linux/sysconf.c > @@ -35,33 +35,18 @@ > static long int posix_sysconf (int name); > > > -#ifndef HAS_CPUCLOCK > static long int > -has_cpuclock (int name) > +check_clock_getres (clockid_t clk_id) > { > -# if defined __NR_clock_getres || HP_TIMING_AVAIL > - /* If we have HP_TIMING, we will fall back on that if the system > - call does not work, so we support it either way. */ > -# if !HP_TIMING_AVAIL > - /* Check using the clock_getres system call. */ > struct timespec ts; > INTERNAL_SYSCALL_DECL (err); > - int r = INTERNAL_SYSCALL (clock_getres, err, 2, > - (name == _SC_CPUTIME > - ? CLOCK_PROCESS_CPUTIME_ID > - : CLOCK_THREAD_CPUTIME_ID), > - &ts); > + /* Avoid setting errno to we can check whether the kernel supports > + the CLK_ID. */ > + int r = INTERNAL_SYSCALL_CALL (clock_getres, err, clk_id, &ts); > if (INTERNAL_SYSCALL_ERROR_P (r, err)) > return -1; > -# endif > return _POSIX_VERSION; > -# else > - return -1; > -# endif > } > -# define HAS_CPUCLOCK(name) has_cpuclock (name) > -#endif > - > > /* Get the value of the system variable NAME. */ > long int > @@ -71,29 +56,21 @@ __sysconf (int name) > > switch (name) > { > - struct rlimit rlimit; > -#ifdef __NR_clock_getres > case _SC_MONOTONIC_CLOCK: > - /* Check using the clock_getres system call. */ > - { > - struct timespec ts; > - INTERNAL_SYSCALL_DECL (err); > - int r; > - r = INTERNAL_SYSCALL (clock_getres, err, 2, CLOCK_MONOTONIC, &ts); > - return INTERNAL_SYSCALL_ERROR_P (r, err) ? -1 : _POSIX_VERSION; > - } > -#endif > - > + return check_clock_getres (CLOCK_MONOTONIC); > case _SC_CPUTIME: > + return check_clock_getres (CLOCK_PROCESS_CPUTIME_ID); > case _SC_THREAD_CPUTIME: > - return HAS_CPUCLOCK (name); > + return check_clock_getres (CLOCK_THREAD_CPUTIME_ID); > > - case _SC_ARG_MAX: > + case _SC_ARG_MAX: { > + struct rlimit rlimit; > /* Use getrlimit to get the stack limit. */ > if (__getrlimit (RLIMIT_STACK, &rlimit) == 0) > return MAX (legacy_ARG_MAX, rlimit.rlim_cur / 4); > > return legacy_ARG_MAX; > + } break; > > case _SC_NGROUPS_MAX: > /* Try to read the information from the /proc/sys/kernel/ngroups_max > @@ -101,13 +78,14 @@ __sysconf (int name) > procfname = "/proc/sys/kernel/ngroups_max"; > break; > > - case _SC_SIGQUEUE_MAX: > + case _SC_SIGQUEUE_MAX: { > + struct rlimit rlimit; > if (__getrlimit (RLIMIT_SIGPENDING, &rlimit) == 0) > return rlimit.rlim_cur; > > /* The /proc/sys/kernel/rtsig-max file contains the answer. */ > procfname = "/proc/sys/kernel/rtsig-max"; > - break; > + } break; > > default: > break; >