From patchwork Wed Aug 30 17:41:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: dann frazier X-Patchwork-Id: 807797 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3xjCW01vzVz9sP5; Thu, 31 Aug 2017 03:42:04 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1dn702-0002k1-TO; Wed, 30 Aug 2017 17:41:58 +0000 Received: from complete.lackof.org ([198.49.126.79]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1dn6zy-0002is-0l for kernel-team@lists.ubuntu.com; Wed, 30 Aug 2017 17:41:54 +0000 Received: from localhost (c-107-2-141-92.hsd1.co.comcast.net [107.2.141.92]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by complete.lackof.org (Postfix) with ESMTPSA id 69FC833E0258 for ; Wed, 30 Aug 2017 11:41:52 -0600 (MDT) From: dann frazier To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/6][SRU Zesty] Revert "UBUNTU: SAUCE: arm64: arch_timer: Enable CNTVCT_EL0 trap if workaround is enabled" Date: Wed, 30 Aug 2017 11:41:23 -0600 Message-Id: <20170830174128.32541-2-dann.frazier@canonical.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170830174128.32541-1-dann.frazier@canonical.com> References: <20170830174128.32541-1-dann.frazier@canonical.com> X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=unavailable version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on complete.lackof.org X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: kernel-team-bounces@lists.ubuntu.com BugLink: https://bugs.launchpad.net/bugs/1713821 This reverts commit 83f3444f36eba82cca61715f793d1f6411b06e3b. Before this patch landed upstream, a fix was added to prevent CNTVCT_EL0 accesses from going untrapped if it was reset the the user access bit set: https://www.spinics.net/lists/arm-kernel/msg574175.html Let's inherit this fix by replacing with the upstream version. Signed-off-by: dann frazier --- drivers/clocksource/arm_arch_timer.c | 42 +++++++++++------------------------- 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c index 168421d2043f..18a8e5727ce7 100644 --- a/drivers/clocksource/arm_arch_timer.c +++ b/drivers/clocksource/arm_arch_timer.c @@ -74,7 +74,6 @@ static enum arch_timer_ppi_nr arch_timer_uses_ppi = ARCH_TIMER_VIRT_PPI; static bool arch_timer_c3stop; static bool arch_timer_mem_use_virtual; static bool arch_counter_suspend_stop; -static bool vdso_default = true; static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM); @@ -462,17 +461,6 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa } static_branch_enable(&arch_timer_read_ool_enabled); - - /* - * Don't use the vdso fastpath if errata require using the - * out-of-line counter accessor. We may change our mind pretty - * late in the game (with a per-CPU erratum, for example), so - * change both the default value and the vdso itself. - */ - if (wa->read_cntvct_el0) { - clocksource_counter.archdata.vdso_direct = false; - vdso_default = false; - } } static void arch_timer_check_ool_workaround(enum arch_timer_erratum_match_type type, @@ -539,19 +527,11 @@ static void arch_timer_check_ool_workaround(enum arch_timer_erratum_match_type t __val; \ }) -static bool arch_timer_this_cpu_has_cntvct_wa(void) -{ - const struct arch_timer_erratum_workaround *wa; - - wa = __this_cpu_read(timer_unstable_counter_workaround); - return wa && wa->read_cntvct_el0; -} #else #define arch_timer_check_ool_workaround(t,a) do { } while(0) #define erratum_set_next_event_tval_virt(...) ({BUG(); 0;}) #define erratum_set_next_event_tval_phys(...) ({BUG(); 0;}) #define erratum_handler(fn, r, ...) ({false;}) -#define arch_timer_this_cpu_has_cntvct_wa() ({false;}) #endif /* CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND */ static __always_inline irqreturn_t timer_handler(const int access, @@ -771,15 +751,8 @@ static void arch_counter_set_user_access(void) | ARCH_TIMER_VIRT_EVT_EN | ARCH_TIMER_USR_PCT_ACCESS_EN); - /* - * Enable user access to the virtual counter if it doesn't - * need to be workaround. The vdso may have been already - * disabled though. - */ - if (arch_timer_this_cpu_has_cntvct_wa()) - pr_info("CPU%d: Trapping CNTVCT access\n", smp_processor_id()); - else - cntkctl |= ARCH_TIMER_USR_VCT_ACCESS_EN; + /* Enable user access to the virtual counter */ + cntkctl |= ARCH_TIMER_USR_VCT_ACCESS_EN; arch_timer_set_cntkctl(cntkctl); } @@ -900,7 +873,16 @@ static void __init arch_counter_register(unsigned type) else arch_timer_read_counter = arch_counter_get_cntpct; - clocksource_counter.archdata.vdso_direct = vdso_default; + clocksource_counter.archdata.vdso_direct = true; + +#ifdef CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND + /* + * Don't use the vdso fastpath if errata require using + * the out-of-line counter accessor. + */ + if (static_branch_unlikely(&arch_timer_read_ool_enabled)) + clocksource_counter.archdata.vdso_direct = false; +#endif } else { arch_timer_read_counter = arch_counter_get_cntvct_mem; }