[PATCH v4] arm64: errata: Fix exec handling in erratum 1418040 workaround
D Scott Phillips
scott at os.amperecomputing.com
Fri Dec 17 13:36:39 PST 2021
D Scott Phillips <scott at os.amperecomputing.com> writes:
> diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> index aacf2f5559a8..b37ff23e625e 100644
> --- a/arch/arm64/kernel/process.c
> +++ b/arch/arm64/kernel/process.c
> @@ -439,34 +439,23 @@ static void entry_task_switch(struct task_struct *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
> + * Ensure access is disabled when switching to a 32bit task, ensure
> + * access is enabled when switching to a 64bit task.
> */
> -static void erratum_1418040_thread_switch(struct task_struct *prev,
> - struct task_struct *next)
> +static void erratum_1418040_thread_switch(struct task_struct *next)
> {
> - bool prev32, next32;
> - u64 val;
> -
> - if (!IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040))
> - return;
> + preempt_disable();
>
> - prev32 = is_compat_thread(task_thread_info(prev));
> - next32 = is_compat_thread(task_thread_info(next));
> -
> - if (prev32 == next32 || !this_cpu_has_cap(ARM64_WORKAROUND_1418040))
> + if (!IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040) ||
> + !this_cpu_has_cap(ARM64_WORKAROUND_1418040))
> return;
Oops, missing preempt_enable() here.
More information about the linux-arm-kernel
mailing list