From patchwork Sat Aug 10 01:00:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 1145029 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-104275-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="VdIUmOoO"; dkim=pass (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.b="iqIpdvH2"; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4653lx65xvz9sMr for ; Sat, 10 Aug 2019 11:04:13 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; q=dns; s= default; b=CLjQuN8ubiB+e1Gp4sf/xz8J98RRv4RtTZvrxOLRp5bOAJKCVVcKR XW+WSWG3kOA1AXAjk3tGuEz3n6LrNN38CnVN6cM9eHsf9CUXzviyyCIeGOJkGQpr y0gNuI3d+j9uj87bvL67K5njFJnNnBsjYF2KLdCZhRUBP23E0GsGhU= 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:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; s=default; bh=jDqNCv4s1MwHYw//Z0Mr7s+fU14=; b=VdIUmOoOmeKu9erm39wowbn6gNsT QGzE0+fEjI56btiSWyg/0HRl76x/TfSPsIvClZZjyKZg/N6CyZKhZQBqE7H1rzyt WynlvJ2/MFrRIT++D0EDxAnl0AhMwzUFMmOH4AVdfTH5OxC0N62xDp84CpazTCh0 V89pWgwBFquBiQg= Received: (qmail 73089 invoked by alias); 10 Aug 2019 01:03:25 -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 Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 72976 invoked by uid 89); 10 Aug 2019 01:03:24 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy=HX-Languages-Length:2114 X-HELO: esa6.hgst.iphmx.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1565399004; x=1596935004; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Jza6dVxMRAK1X+RBW+fiutzDdZqA8FtMv6QBR+fZM18=; b=iqIpdvH23/NLUUW7xKTsgpc7/70PSDa9GnCdkH3L/aFMl6Amf9F19VxY jlC7X/O+qhEqljmLt7+e1nlgj7dZ+VB3bjvfSJkzIQxDIoZZb8E1c0Cpv tvyxilKgFt5FJsJi3o8KpvCS5QbYOclptCOKuV+0DsVjci9zd++8qCuqK EGuX0a68jjese8w48iPR441gjI5jVZuUC0Nc5f/HQU6JEa+x0MCVRNh+E YKc4MeP2pzya6Uhx6JSTkyiZ31a2d8rNwQgkgymSX2/FrINU1iLX1uftc EyhuWldxEsu2gAV+6E/8sFMCnAoO4tdmPBx4eGooBeUEnwVAb+KJLlI5v g==; IronPort-SDR: qJvPQpeGYjQT25xl4Lt183LdtneKzE+s6aT+cRXkcaEbnQYFf7l9S++a7EVqmFf3QkeivtP7QF oqM1PRufrkK7/ZoqxtTeWj09JHe6t833CtW25RKuMhqJ0NpTZ51qBmDvcGPvY/tPSGDGC8sWbf dkEnmRApfJdHOlYSBAz9F5XHojqyTUrkLz74vTZca0eK2zYoCJtuC/EPdIu747khCFkoPc3cOJ cnHsdvIsw1i/gfegL/FcFDBYkeYmwD5gbH+BwCA2rltA4SwxVUBQD3mZzyLWmcaIl7ZZaUTozX eaA= IronPort-SDR: a3mBvwPKMmLAeeR7Pc3yibUcb5zA5V1C7jMhOnfADenynXJCbRRHZ49fEyyLB2cyqz+OVKvQlf PyQJBlgOUurGAzM5db/WU1MxJ7YqbYEv5ymVMZuQthy3R+pmKiaFGjWJL1lnLUGx20Erf599dr 9GZblkL3jx9XR6L4bNKnvQVouUM/UQbNQFTZiPeydyUxs2B86mJ/Wcmm4+tN6v8NRwCqNdgYH5 +CAk65qfUuOVz4RrgohyKMWF7UDOhx4zW52GDdMPafDOwYF3ciNfbD4PZMM3tpTdAsMqXMhP7T kv6S34mrSSkJF+6fLSiOnflv IronPort-SDR: PYL6CxbAMyyYne3mCk/R4HwJYYhIKrPKesk8I0EbgUcdgnUApsv0zjISstCdaBxBBsSS9Q339q LE+KnZIzKAGzTh3aWq8Th8FhjKqVEvOT/VAl7Z7XBNJhPJsJmza/p0jZBuByXURZOiArzGcBaD cTMx6XhDX+MRRVz3hB3Ho4mDrNIktDc5/IacTg1Cq6s0aJiTxJT8d2wgXfv2xsj34/qOqferGQ IpfgwcdjxHThIzdZJT9I81pOskxXbWfLp8MkhOxHM3STk4okNNlny1ZtvoHh4NvPfF71asucf5 BgQ= From: Alistair Francis To: libc-alpha@sourceware.org Cc: arnd@arndb.de, adhemerval.zanella@linaro.org, fweimer@redhat.com, palmer@sifive.com, macro@wdc.com, zongbox@gmail.com, alistair.francis@wdc.com, alistair23@gmail.com Subject: [RFC v4 06/24] sysdeps/timespec_get: Use clock_gettime64 if avaliable Date: Fri, 9 Aug 2019 18:00:03 -0700 Message-Id: <3ee6c1e52cbefe6f6dbd7aef423f13607ff50402.1565398513.git.alistair.francis@wdc.com> In-Reply-To: References: MIME-Version: 1.0 Signed-off-by: Alistair Francis --- sysdeps/unix/sysv/linux/timespec_get.c | 56 +++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/sysdeps/unix/sysv/linux/timespec_get.c b/sysdeps/unix/sysv/linux/timespec_get.c index 52080ddf08a..97ef9c5f799 100644 --- a/sysdeps/unix/sysv/linux/timespec_get.c +++ b/sysdeps/unix/sysv/linux/timespec_get.c @@ -24,6 +24,58 @@ #endif #include +int +__timespec_get (struct timespec *ts, int base) +{ +#ifdef __ASSUME_TIME64_SYSCALLS + return INTERNAL_VSYSCALL (clock_gettime64, err, 2, CLOCK_REALTIME, ts); +#else + long int ret; +# ifdef __NR_clock_gettime64 +# if __TIMESIZE == 64 + ret = INTERNAL_VSYSCALL (clock_gettime64, err, 2, CLOCK_REALTIME, ts); + + if (ret == 0 || errno != ENOSYS) + { + return ret; + } +# else + struct __timespec64 ts64; + + ret = INTERNAL_VSYSCALL (clock_gettime64, err, 2, CLOCK_REALTIME, &ts64); + + if (ret == 0 || errno != ENOSYS) + { + ts->tv_sec = ts64.tv_sec; + ts->tv_nsec = ts64.tv_nsec; + return ret; + } +# endif /* __TIMESIZE == 64 */ +# endif /* __NR_clock_gettime64 */ +# if __TIMESIZE == 64 + struct timespec ts32; + + if (! in_time_t_range (ts->tv_sec)) + { + __set_errno (EOVERFLOW); + return -1; + } + + valid_timespec64_to_timespec (ts, &ts32); + ret = INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, &ts32); + + if (ret == 0 || errno != ENOSYS) + { + ts->tv_sec = ts32.tv_sec; + ts->tv_nsec = ts32.tv_nsec; + } + return ret; +# else + return INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, ts); +# endif /* __TIMESIZE == 64 */ +#endif +} + /* Set TS to calendar time based in time base BASE. */ int timespec_get (struct timespec *ts, int base) @@ -33,9 +85,9 @@ timespec_get (struct timespec *ts, int base) int res; INTERNAL_SYSCALL_DECL (err); case TIME_UTC: - res = INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, ts); + res = __timespec_get (ts, base); if (INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; + return 0; break; default: