From patchwork Fri Nov 10 18:24:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Salyzyn X-Patchwork-Id: 10053549 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1EAAD603FA for ; Fri, 10 Nov 2017 18:26:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0EEFE2B409 for ; Fri, 10 Nov 2017 18:26:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 037D92B40D; Fri, 10 Nov 2017 18:26:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 8F09C2B409 for ; Fri, 10 Nov 2017 18:26:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=Zt4Q3JPJmg8EQqAN/lnTlJ5u0I/eOfeikBvVDTfICaY=; b=EK7 2m+UGWcSvXk9lB37Quzy1AM0dt/9XY5FS5VhD9167PahWOMaRoQ0uCIeAwqpggUuCcL98m5o+1llL 4WCY2yyBL7YAhDYY74114TWz+3ZndwdIq823X5L/Njpy1AoFNr+su0TO0ej/llTQsZAJ3F6dljl8f NknybiR3RNgGSJO+KbUFhNXTEqBN0IYxsnQDfEFDzOeaaOjQWlgyLorg/sjl6tGcRuqohFCNQ7eA4 W2vedfF/aDaqMi47pmLLxdk1lElbiacTa4uVNpSkYKeqfwxEnGI57nGLrYKc5XhazVMIqggG/H/5U wgfkUZchcgvNyQB8Xr0FUHH89OKqGDQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1eDE06-0002mD-NV; Fri, 10 Nov 2017 18:25:58 +0000 Received: from mail-io0-x242.google.com ([2607:f8b0:4001:c06::242]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1eDE01-0002fI-Ta for linux-arm-kernel@lists.infradead.org; Fri, 10 Nov 2017 18:25:56 +0000 Received: by mail-io0-x242.google.com with SMTP id m81so14503566ioi.13 for ; Fri, 10 Nov 2017 10:25:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=NItn86r5im2TqZ36VrOKxkdDvHhfc519PH3wchGo5Sw=; b=pkDXyrkGOkOf4umunkOhYaa6dvwaViPKeMR6CI91TD0EerpzCXVg1tg782lqUd8URM awQy6Lplw1lsOfX5MgAMCwxCH5f6nNbhURQ/0rcS9xXBnEaBnUvPMqdePaqKk/1dXpDj 4eDEnWs/noBa6cScd/7CBrrW/nklfKmlaEWXvmx9xpvQs9ink4V36MlcXXebeK/fyM2a Ud5hGIV7EyMTmGhnXoSglgovtkALm2YrqZaztanfVv2oJZvLggVlcEFWOLAMSB373XQK AOC4WcT8bdu30f/sN9wQz2DpMwv3xTriwN4lVlbYqirxqWQ7rUMh7nbk+p2vpkxLzWIQ MCUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=NItn86r5im2TqZ36VrOKxkdDvHhfc519PH3wchGo5Sw=; b=kQ6poUpePiBQjhBYvMmUEZMQ6ae2vFYoAWK0q64l7mzGhoNu+kgFpZ8fDS7hCGlGzp jkh2xvYFZKLYSgDUsum9BAQijiV9gACxntZxPnzJhUrdAied+tZwCl3xnOEQN2V3bJ1+ a6b0a+L9WV5Nd+tQfKgcat0JvJUZ9BIQcRo+BU6WM0DgHkUR73QxEnm1CCzOAsORZadW uTar+ho6Ry0mIBs18x0xaKHnAVO5IZXnKrBHTBooCqlGZQVcy6jpDCpXT00jhuxmpzHb xsoO+zBOr1lxKcjNEZKJJig/BhAffAzASDfGQSaRRfH7fVd2o6nMRiTbkTLzyPVSbiDg GtGg== X-Gm-Message-State: AJaThX7b4Ov6h1fEGr5H1JNyUt3tgIguv2/Y2XldkQA/4shwKlv/bxfA T3BGhVPSYV1UYKoZTrBKXQVsRA== X-Google-Smtp-Source: AGs4zMbv1dp6CtxmHqjSwU+PlGqVjiQQc7v80PAo3Tb/y+4+bkh/HJ/+hx6NRG1INA0F8+YK+Q5Q7Q== X-Received: by 10.107.46.216 with SMTP id u85mr1474738iou.2.1510338332468; Fri, 10 Nov 2017 10:25:32 -0800 (PST) Received: from nebulus.mtv.corp.google.com ([100.98.120.17]) by smtp.gmail.com with ESMTPSA id b133sm4925182ioe.73.2017.11.10.10.25.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 10 Nov 2017 10:25:32 -0800 (PST) From: Mark Salyzyn To: linux-kernel@vger.kernel.org Subject: [PATCH] lib: vdso: add support for time Date: Fri, 10 Nov 2017 10:24:53 -0800 Message-Id: <20171110182513.44671-1-salyzyn@android.com> X-Mailer: git-send-email 2.15.0.448.gf294e3d99a-goog X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171110_102554_001371_2C49C6C3 X-CRM114-Status: GOOD ( 13.96 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Laura Abbott , Kees Cook , Ard Biesheuvel , Catalin Marinas , Kevin Brodsky , Will Deacon , Russell King , Andy Lutomirski , Mark Salyzyn , James Morse , Andrew Pinski , Dmitry Safonov , Andy Gross , John Stultz , Thomas Gleixner , Mark Salyzyn , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Add time() vdso support to match up with existing support in the x86's vdso. Currently benefitting arm and arm64 which uses the common vgettimeofday.c implementation. On arm provides about a ~14 fold improvement in speed over the straight syscall, and about a ~5 fold improvement in speed over an alternate library implementation that relies on the vdso call to gettimeofday to fulfill the request. We can provide __vdso_time even if we can not provide a speed enhanced __vdso_gettimeofday (arm, virtual counters). Signed-off-by: Mark Salyzyn Cc: James Morse Cc: Russell King Cc: Catalin Marinas Cc: Will Deacon Cc: Andy Lutomirski Cc: Dmitry Safonov Cc: John Stultz Cc: Mark Rutland Cc: Laura Abbott Cc: Kees Cook Cc: Ard Biesheuvel Cc: Andy Gross Cc: Kevin Brodsky Cc: Andrew Pinski Cc: Thomas Gleixner Cc: linux-kernel@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org NB: to be applied _after_ [PATCH v5 10/12] arm64: vdso: replace gettimeofday.S with global vgettimeofday.C --- arch/arm/kernel/vdso.c | 1 + arch/arm/vdso/vdso.lds.S | 1 + arch/arm64/kernel/vdso/compiler.h | 1 + arch/arm64/kernel/vdso/vdso.lds.S | 1 + lib/vdso/vgettimeofday.c | 10 ++++++++++ 5 files changed, 14 insertions(+) diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c index da52aade40a3..b8ae87b4d526 100644 --- a/arch/arm/kernel/vdso.c +++ b/arch/arm/kernel/vdso.c @@ -190,6 +190,7 @@ static void __init patch_vdso(void *ehdr) vdso_nullpatch_one(&einfo, "__vdso_gettimeofday"); vdso_nullpatch_one(&einfo, "__vdso_clock_gettime"); vdso_nullpatch_one(&einfo, "__vdso_clock_getres"); + /* do not zero out __vdso_time, no cntvct_ok dependency */ } } diff --git a/arch/arm/vdso/vdso.lds.S b/arch/arm/vdso/vdso.lds.S index 1d81e8c3acf6..1eb577091d1f 100644 --- a/arch/arm/vdso/vdso.lds.S +++ b/arch/arm/vdso/vdso.lds.S @@ -83,6 +83,7 @@ VERSION __vdso_clock_gettime; __vdso_gettimeofday; __vdso_clock_getres; + __vdso_time; local: *; }; } diff --git a/arch/arm64/kernel/vdso/compiler.h b/arch/arm64/kernel/vdso/compiler.h index 921a7191b497..fb27545640f2 100644 --- a/arch/arm64/kernel/vdso/compiler.h +++ b/arch/arm64/kernel/vdso/compiler.h @@ -65,5 +65,6 @@ static __always_inline notrace u64 arch_vdso_read_counter(void) #define __vdso_clock_gettime __kernel_clock_gettime #define __vdso_gettimeofday __kernel_gettimeofday #define __vdso_clock_getres __kernel_clock_getres +#define __vdso_time __kernel_time #endif /* __VDSO_COMPILER_H */ diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S index beca249bc2f3..9de0ffc369c5 100644 --- a/arch/arm64/kernel/vdso/vdso.lds.S +++ b/arch/arm64/kernel/vdso/vdso.lds.S @@ -88,6 +88,7 @@ VERSION __kernel_gettimeofday; __kernel_clock_gettime; __kernel_clock_getres; + __kernel_time; local: *; }; } diff --git a/lib/vdso/vgettimeofday.c b/lib/vdso/vgettimeofday.c index 079955162be8..d8d675d46749 100644 --- a/lib/vdso/vgettimeofday.c +++ b/lib/vdso/vgettimeofday.c @@ -385,3 +385,13 @@ int __vdso_clock_getres(clockid_t clock, struct timespec *res) return 0; } + +notrace time_t __vdso_time(time_t *t) +{ + const struct vdso_data *vd = __get_datapage(); + time_t result = READ_ONCE(vd->xtime_coarse_sec); + + if (t) + *t = result; + return result; +}