[PATCH 9/9] arm64: Use arm64_force_sig_info instead of force_sig_info

Mark Rutland mark.rutland at arm.com
Thu Feb 22 07:48:21 PST 2018


On Thu, Feb 22, 2018 at 02:00:57PM +0000, Will Deacon wrote:
> Using arm64_force_sig_info means that printing messages about unhandled
> signals is dealt with for us, so use that in preference to force_sig_info
> and remove any homebrew printing code.
> 
> Signed-off-by: Will Deacon <will.deacon at arm.com>
> ---
>  arch/arm64/kernel/debug-monitors.c | 3 ++-
>  arch/arm64/kernel/ptrace.c         | 2 +-
>  arch/arm64/kernel/traps.c          | 9 ++-------
>  3 files changed, 5 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c
> index 53781f5687c5..06ca574495af 100644
> --- a/arch/arm64/kernel/debug-monitors.c
> +++ b/arch/arm64/kernel/debug-monitors.c
> @@ -33,6 +33,7 @@
>  #include <asm/daifflags.h>
>  #include <asm/debug-monitors.h>
>  #include <asm/system_misc.h>
> +#include <asm/traps.h>
>  
>  /* Determine debug architecture. */
>  u8 debug_monitors_arch(void)
> @@ -223,7 +224,7 @@ static void send_user_sigtrap(int si_code)
>  	if (interrupts_enabled(regs))
>  		local_irq_enable();
>  
> -	force_sig_info(SIGTRAP, &info, current);
> +	arm64_force_sig_info(&info, "User debug trap", current);
>  }
>  
>  static int single_step_handler(unsigned long addr, unsigned int esr,
> diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
> index 6618036ae6d4..dd359ee02e2b 100644
> --- a/arch/arm64/kernel/ptrace.c
> +++ b/arch/arm64/kernel/ptrace.c
> @@ -209,7 +209,7 @@ static void ptrace_hbptriggered(struct perf_event *bp,
>  		force_sig_ptrace_errno_trap(si_errno, (void __user *)bkpt->trigger);
>  	}
>  #endif
> -	force_sig_info(SIGTRAP, &info, current);
> +	arm64_force_sig_info(&info, "Hardware breakpoint trap (ptrace)", current);
>  }
>  
>  /*
> diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
> index 4231488a5a9f..cb5ad77524f3 100644
> --- a/arch/arm64/kernel/traps.c
> +++ b/arch/arm64/kernel/traps.c
> @@ -633,11 +633,6 @@ asmlinkage void bad_el0_sync(struct pt_regs *regs, int reason, unsigned int esr)
>  {
>  	siginfo_t info;
>  	void __user *pc = (void __user *)instruction_pointer(regs);
> -	console_verbose();
> -
> -	pr_crit("Bad EL0 synchronous exception detected on CPU%d, code 0x%08x -- %s\n",
> -		smp_processor_id(), esr, esr_get_class_string(esr));
> -	__show_regs(regs);

Here we dump the CPU so that a developer can figure out which
microarchitecture the exception was taken on (e.g. to allow them to
decode an IMP DEF SError). We added that in commit:

  8051f4d16ef1d037 ("arm64: report CPU number in bad_mode")

However, in arm64_force_sig_info() we don't dump the CPU, and I guess
that may be preemptible in cases other than bad_el0_sync().

Are we happy to lose this?

Thanks,
Mark.



More information about the linux-arm-kernel mailing list