mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Marc Zyngier <maz@kernel.org>,
	Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>,
	Stephen Boyd <swboyd@chromium.org>, Will Deacon <will@kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Sasha Levin <sashal@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH AUTOSEL 5.4 37/38] arm64: Move handling of erratum 1418040 into C code
Date: Mon, 24 Aug 2020 12:37:49 -0400	[thread overview]
Message-ID: <20200824163751.606577-37-sashal@kernel.org> (raw)
In-Reply-To: <20200824163751.606577-1-sashal@kernel.org>

From: Marc Zyngier <maz@kernel.org>

[ Upstream commit d49f7d7376d0c0daf8680984a37bd07581ac7d38 ]

Instead of dealing with erratum 1418040 on each entry and exit,
let's move the handling to __switch_to() instead, which has
several advantages:

- It can be applied when it matters (switching between 32 and 64
  bit tasks).
- It is written in C (yay!)
- It can rely on static keys rather than alternatives

Signed-off-by: Marc Zyngier <maz@kernel.org>
Tested-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20200731173824.107480-2-maz@kernel.org
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 arch/arm64/kernel/process.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index fab013c5ee8c9..10190c4b16dc4 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -498,6 +498,39 @@ static void entry_task_switch(struct task_struct *next)
 	__this_cpu_write(__entry_task, next);
 }
 
+/*
+ * ARM erratum 1418040 handling, affecting the 32bit view of CNTVCT.
+ * Assuming the virtual counter is enabled at the beginning of times:
+ *
+ * - disable access when switching from a 64bit task to a 32bit task
+ * - enable access when switching from a 32bit task to a 64bit task
+ */
+static void erratum_1418040_thread_switch(struct task_struct *prev,
+					  struct task_struct *next)
+{
+	bool prev32, next32;
+	u64 val;
+
+	if (!(IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040) &&
+	      cpus_have_const_cap(ARM64_WORKAROUND_1418040)))
+		return;
+
+	prev32 = is_compat_thread(task_thread_info(prev));
+	next32 = is_compat_thread(task_thread_info(next));
+
+	if (prev32 == next32)
+		return;
+
+	val = read_sysreg(cntkctl_el1);
+
+	if (!next32)
+		val |= ARCH_TIMER_USR_VCT_ACCESS_EN;
+	else
+		val &= ~ARCH_TIMER_USR_VCT_ACCESS_EN;
+
+	write_sysreg(val, cntkctl_el1);
+}
+
 /*
  * Thread switching.
  */
@@ -514,6 +547,7 @@ __notrace_funcgraph struct task_struct *__switch_to(struct task_struct *prev,
 	uao_thread_switch(next);
 	ptrauth_thread_switch(next);
 	ssbs_thread_switch(next);
+	erratum_1418040_thread_switch(prev, next);
 
 	/*
 	 * Complete any pending TLB or cache maintenance on this CPU in case
-- 
2.25.1


  parent reply	other threads:[~2020-08-24 17:00 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-24 16:37 [PATCH AUTOSEL 5.4 01/38] spi: stm32: clear only asserted irq flags on interrupt Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 02/38] jbd2: make sure jh have b_transaction set in refile/unfile_buffer Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 03/38] ext4: don't BUG on inconsistent journal feature Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 04/38] ext4: handle read only external journal device Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 05/38] jbd2: abort journal if free a async write error metadata buffer Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 06/38] ext4: handle option set by mount flags correctly Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 07/38] ext4: handle error of ext4_setup_system_zone() on remount Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 08/38] ext4: correctly restore system zone info when remount fails Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 09/38] fs: prevent BUG_ON in submit_bh_wbc() Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 10/38] spi: stm32h7: fix race condition at end of transfer Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 11/38] spi: stm32: fix fifo threshold level in case of short transfer Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 12/38] spi: stm32: fix stm32_spi_prepare_mbr in case of odd clk_rate Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 13/38] spi: stm32: always perform registers configuration prior to transfer Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 14/38] drm/amd/powerplay: correct Vega20 cached smu feature state Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 15/38] drm/amd/powerplay: correct UVD/VCE PG state on custom pptable uploading Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 16/38] drm/amd/display: Switch to immediate mode for updating infopackets Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 17/38] libbpf: Handle GCC built-in types for Arm NEON Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 18/38] netfilter: avoid ipv6 -> nf_defrag_ipv6 module dependency Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 19/38] can: j1939: transport: j1939_xtp_rx_dat_one(): compare own packets to detect corruptions Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 20/38] ALSA: hda/realtek: Add model alc298-samsung-headphone Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 21/38] s390/cio: add cond_resched() in the slow_eval_known_fn() loop Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 22/38] ASoC: wm8994: Avoid attempts to read unreadable registers Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 23/38] selftests: disable rp_filter for icmp_redirect.sh Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 24/38] scsi: fcoe: Fix I/O path allocation Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 25/38] scsi: ufs: Fix possible infinite loop in ufshcd_hold Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 26/38] scsi: ufs: Improve interrupt handling for shared interrupts Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 27/38] scsi: ufs: Clean up completed request without interrupt notification Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 28/38] scsi: qla2xxx: Fix login timeout Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 29/38] scsi: qla2xxx: Check if FW supports MQ before enabling Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 30/38] scsi: qla2xxx: Fix null pointer access during disconnect from subsystem Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 31/38] Revert "scsi: qla2xxx: Fix crash on qla2x00_mailbox_command" Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 32/38] macvlan: validate setting of multiple remote source MAC addresses Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 33/38] net: gianfar: Add of_node_put() before goto statement Sasha Levin
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 34/38] drm/amdgpu: disable gfxoff for navy_flounder Sasha Levin
2020-08-24 18:25   ` Alex Deucher
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 35/38] Revert "drm/amdgpu: disable gfxoff for navy_flounder" Sasha Levin
2020-08-24 18:25   ` Alex Deucher
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 36/38] powerpc/perf: Fix soft lockups due to missed interrupt accounting Sasha Levin
2020-08-24 16:37 ` Sasha Levin [this message]
2020-08-24 16:37 ` [PATCH AUTOSEL 5.4 38/38] arm64: Allow booting of late CPUs affected by erratum 1418040 Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200824163751.606577-37-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maz@kernel.org \
    --cc=saiprakash.ranjan@codeaurora.org \
    --cc=stable@vger.kernel.org \
    --cc=swboyd@chromium.org \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome