Re: [PATCH 10/11] arm64: entry: fix NMI {user,kernel}->kernel transitions

Mark Rutland
2020-11-26T18:43:29Z

On Thu, Nov 26, 2020 at 12:36:01PM +0000, Mark Rutland wrote:
> diff --git a/arch/arm64/include/asm/exception.h b/arch/arm64/include/asm/exception.h
> index d579b2e6db7a..0756191f44f6 100644
> --- a/arch/arm64/include/asm/exception.h
> +++ b/arch/arm64/include/asm/exception.h

> +void arm64_enter_nmi(struct pt_regs *regs);
> +void arm64_exit_nmi(struct pt_regs *regs);

[...]

> -asmlinkage __kprobes notrace unsigned long
> +asmlinkage noinstr unsigned long
> __sdei_handler(struct pt_regs *regs, struct sdei_registered_event *arg)
> {
> unsigned long ret;
>
> - nmi_enter();
> + arm64_enter_nmi();
>
> ret = _sdei_handler(regs, arg);
>
> - nmi_exit();
> + arm64_exit_nmi();
>
> return ret;
> }

Whoops; I forgot to pass the regs here.

Will, could you please apply the fixup patch below? I've build+boot
tested with the CKI config atop rc5, and made sure I hadn't done
likewise in any of the other callers.

Thanks,
Mark

---->8----
From a055c2d9e24ddb2383b930ea36dad01d5036c801 Mon Sep 17 00:00:00 2001
From: Mark Rutland <mark.rutland@arm.com>
Date: Thu, 26 Nov 2020 18:29:13 +0000
Subject: [PATCH] arm64: sdei: fix arm64_{enter,exit}_nmi() calls

When converting __sdei_handler() to the new arm64 NMI entry/exit
helpers I missed the `regs` argument, leading to a build failure when
CONFIG_ARM_SDE_INTERFACE is selected.

Fix this by adding the missing argument to both calls. Build a boot
tested with CONFIG_ARM_SDE_INTERFACE selected.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will@kernel.org>
---
arch/arm64/kernel/sdei.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/kernel/sdei.c b/arch/arm64/kernel/sdei.c
index 162646f0d151..793c46d6a447 100644
--- a/arch/arm64/kernel/sdei.c
+++ b/arch/arm64/kernel/sdei.c
@@ -229,11 +229,11 @@ __sdei_handler(struct pt_regs *regs, struct sdei_registered_event *arg)
{
unsigned long ret;

- arm64_enter_nmi();
+ arm64_enter_nmi(regs);

ret = _sdei_handler(regs, arg);

- arm64_exit_nmi();
+ arm64_exit_nmi(regs);

return ret;
}
--
2.20.1