Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp3768752pxt; Tue, 10 Aug 2021 10:53:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzBNgvs7HvTtitSYFcuY7gji8LouDadhj51D/FcwAPtf0zblTvPdreDB7m//97CGNGDHKho X-Received: by 2002:a92:b308:: with SMTP id p8mr191893ilh.296.1628618010484; Tue, 10 Aug 2021 10:53:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628618010; cv=none; d=google.com; s=arc-20160816; b=O2kZaNc6wN5GI2sScuV9/2RH6QpuygxkbRBvTU1t7jjIxFlHj1sUGCubjBLPToK9CS bAkxiSVoB9DNR/7u3DQX9ppnbscTxajGlMUaKSI4ClLmVMDzF/I9f91n7/Z4q2ftEv8f LZATKSMmmYBH2hEbJJhD7fALwXT9VWi/hjS7hUH9i2JTT5IIeKEIVfsnAdiR18suHctH UpEeeFm5GuzuxzRWe36YkadVq3F/elr+De4UQoslZIr6+1zK9N8DOyYqyPgqqW+rndhZ rESdOmfQWqN7ZJrBuw9UhSTL6ZC9woVqwtBI+YohNfODfkl2j8sNIzmqiuxlVibepaHc Ju0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Ktb7bo72rW9TjBPLpmAzXELVAUTJ7wfvdINELOiSa3I=; b=i14zRd+VCnplPs33Fv/cJi7rCkwNYXNGYmnBo7GKINUbgTLsblA/gex7N2WfZh0R/v J+X/Yzir4i2DzpwM6u3AXgX83O/a7OxIP7hxXnFRBroENVIxoxXST+1JSNjc3YPJwLSh skTh/HhOvlnPz+t5KA2Ls1+vYanBZoOHEBRM0A2SZ+9OECz5vVIHsNYqgD2QK7nQtqg2 6mYV0qcP0uYOBJ207GIXir9ZE5+OLSpej6CIRilmGN/sq4XaaZdcmSDlmkLCzkJc4Ylw Yb9kojl9I0pY3Gd54EHfg/1Vw1bPUS1RSBoD8pda9iKLexOG8H6tA4S+RdA1Ip/aJbJP V5Pw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=mh0wv7FQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w5si25421692ilu.14.2021.08.10.10.53.18; Tue, 10 Aug 2021 10:53:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=mh0wv7FQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236505AbhHJRw7 (ORCPT + 99 others); Tue, 10 Aug 2021 13:52:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:43224 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236737AbhHJRtl (ORCPT ); Tue, 10 Aug 2021 13:49:41 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 90EF26115C; Tue, 10 Aug 2021 17:41:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1628617315; bh=AvNYSlBrEKEXQrAUJnoa3zL/BEXfezpG86BC/KMqIg0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mh0wv7FQA/PW0b2NYoSUMA03ntPxEjQLBZsEwPHJhLqVDVGz+pDFeM2rFQajP7SYv s55K4aN6Tn/AVbCG7RYgdYPy/9m4lHOmF3g7L+VwTsR23lAzh6wcHmBCSxT23PNVLc 6Lj+w0aNSp53qQQbh2o7Sqo/2ZxEjm0VkC5CwclA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Will Deacon , Vincenzo Frascino , Catalin Marinas , Chanho Park Subject: [PATCH 5.10 113/135] arm64: vdso: Avoid ISB after reading from cntvct_el0 Date: Tue, 10 Aug 2021 19:30:47 +0200 Message-Id: <20210810172959.632306472@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210810172955.660225700@linuxfoundation.org> References: <20210810172955.660225700@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Will Deacon commit 77ec462536a13d4b428a1eead725c4818a49f0b1 upstream. We can avoid the expensive ISB instruction after reading the counter in the vDSO gettime functions by creating a fake address hazard against a dummy stack read, just like we do inside the kernel. Signed-off-by: Will Deacon Reviewed-by: Vincenzo Frascino Link: https://lore.kernel.org/r/20210318170738.7756-5-will@kernel.org Signed-off-by: Catalin Marinas Signed-off-by: Greg Kroah-Hartman Signed-off-by: Chanho Park --- arch/arm64/include/asm/arch_timer.h | 21 --------------------- arch/arm64/include/asm/barrier.h | 19 +++++++++++++++++++ arch/arm64/include/asm/vdso/gettimeofday.h | 6 +----- 3 files changed, 20 insertions(+), 26 deletions(-) --- a/arch/arm64/include/asm/arch_timer.h +++ b/arch/arm64/include/asm/arch_timer.h @@ -165,25 +165,6 @@ static inline void arch_timer_set_cntkct isb(); } -/* - * Ensure that reads of the counter are treated the same as memory reads - * for the purposes of ordering by subsequent memory barriers. - * - * This insanity brought to you by speculative system register reads, - * out-of-order memory accesses, sequence locks and Thomas Gleixner. - * - * http://lists.infradead.org/pipermail/linux-arm-kernel/2019-February/631195.html - */ -#define arch_counter_enforce_ordering(val) do { \ - u64 tmp, _val = (val); \ - \ - asm volatile( \ - " eor %0, %1, %1\n" \ - " add %0, sp, %0\n" \ - " ldr xzr, [%0]" \ - : "=r" (tmp) : "r" (_val)); \ -} while (0) - static __always_inline u64 __arch_counter_get_cntpct_stable(void) { u64 cnt; @@ -224,8 +205,6 @@ static __always_inline u64 __arch_counte return cnt; } -#undef arch_counter_enforce_ordering - static inline int arch_timer_arch_init(void) { return 0; --- a/arch/arm64/include/asm/barrier.h +++ b/arch/arm64/include/asm/barrier.h @@ -70,6 +70,25 @@ static inline unsigned long array_index_ return mask; } +/* + * Ensure that reads of the counter are treated the same as memory reads + * for the purposes of ordering by subsequent memory barriers. + * + * This insanity brought to you by speculative system register reads, + * out-of-order memory accesses, sequence locks and Thomas Gleixner. + * + * http://lists.infradead.org/pipermail/linux-arm-kernel/2019-February/631195.html + */ +#define arch_counter_enforce_ordering(val) do { \ + u64 tmp, _val = (val); \ + \ + asm volatile( \ + " eor %0, %1, %1\n" \ + " add %0, sp, %0\n" \ + " ldr xzr, [%0]" \ + : "=r" (tmp) : "r" (_val)); \ +} while (0) + #define __smp_mb() dmb(ish) #define __smp_rmb() dmb(ishld) #define __smp_wmb() dmb(ishst) --- a/arch/arm64/include/asm/vdso/gettimeofday.h +++ b/arch/arm64/include/asm/vdso/gettimeofday.h @@ -83,11 +83,7 @@ static __always_inline u64 __arch_get_hw */ isb(); asm volatile("mrs %0, cntvct_el0" : "=r" (res) :: "memory"); - /* - * This isb() is required to prevent that the seq lock is - * speculated.# - */ - isb(); + arch_counter_enforce_ordering(res); return res; }