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

Mark Rutland mark.rutland at arm.com
Thu Nov 26 13:41:59 EST 2020


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 at 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 at arm.com>
Cc: Will Deacon <will at 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




More information about the linux-arm-kernel mailing list