[PATCH 5/5] arm64: simplify interrupt code

Ilias Apalodimas ilias.apalodimas at linaro.org
Thu Jul 3 15:26:49 CEST 2025


On Thu, 3 Jul 2025 at 08:20, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> Carve out a function except_msg() to handle the output for most type of
> interrupts.
>
> Consistently use 16 digits for printing the exception syndrome register
> esr to match the register size.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> ---

Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>

>  arch/arm/lib/interrupts_64.c | 72 ++++++++++++------------------------
>  1 file changed, 24 insertions(+), 48 deletions(-)
>
> diff --git a/arch/arm/lib/interrupts_64.c b/arch/arm/lib/interrupts_64.c
> index 970f8b6831f..cc20528327b 100644
> --- a/arch/arm/lib/interrupts_64.c
> +++ b/arch/arm/lib/interrupts_64.c
> @@ -170,14 +170,18 @@ static bool smh_emulate_trap(struct pt_regs *regs)
>         return true;
>  }
>
> -/*
> - * do_bad_sync handles the impossible case in the Synchronous Abort vector.
> +/**
> + * except_msg() - print exception message
> + *
> + * Print exception message, register contents, backtrace, loaded EFI images.
> + *
> + * @msg:       message describing exception type
> + * @pt_regs:   registers
>   */
> -void do_bad_sync(struct pt_regs *pt_regs)
> +static void except_msg(const char *msg, struct pt_regs *pt_regs)
>  {
>         efi_restore_gd();
> -       printf("Bad mode in \"Synchronous Abort\" handler, esr 0x%08lx\n",
> -              pt_regs->esr);
> +       printf("%s handler, esr 0x%016lx\n", msg, pt_regs->esr);
>         show_regs(pt_regs);
>         if (CONFIG_IS_ENABLED(FRAMEPOINTER))
>                 show_backtrace(pt_regs);
> @@ -185,18 +189,20 @@ void do_bad_sync(struct pt_regs *pt_regs)
>         panic("Resetting CPU ...\n");
>  }
>
> +/*
> + * do_bad_sync handles the impossible case in the Synchronous Abort vector.
> + */
> +void do_bad_sync(struct pt_regs *pt_regs)
> +{
> +       except_msg("Bad mode in \"Synchronous Abort\"", pt_regs);
> +}
> +
>  /*
>   * do_bad_irq handles the impossible case in the Irq vector.
>   */
>  void do_bad_irq(struct pt_regs *pt_regs)
>  {
> -       efi_restore_gd();
> -       printf("Bad mode in \"Irq\" handler, esr 0x%08lx\n", pt_regs->esr);
> -       show_regs(pt_regs);
> -       if (CONFIG_IS_ENABLED(FRAMEPOINTER))
> -               show_backtrace(pt_regs);
> -       show_efi_loaded_images(pt_regs);
> -       panic("Resetting CPU ...\n");
> +       except_msg("Bad mode in \"Irq\"", pt_regs);
>  }
>
>  /*
> @@ -204,13 +210,7 @@ void do_bad_irq(struct pt_regs *pt_regs)
>   */
>  void do_bad_fiq(struct pt_regs *pt_regs)
>  {
> -       efi_restore_gd();
> -       printf("Bad mode in \"Fiq\" handler, esr 0x%08lx\n", pt_regs->esr);
> -       show_regs(pt_regs);
> -       if (CONFIG_IS_ENABLED(FRAMEPOINTER))
> -               show_backtrace(pt_regs);
> -       show_efi_loaded_images(pt_regs);
> -       panic("Resetting CPU ...\n");
> +       except_msg("Bad mode in \"Fiq\"", pt_regs);
>  }
>
>  /*
> @@ -218,13 +218,7 @@ void do_bad_fiq(struct pt_regs *pt_regs)
>   */
>  void do_bad_error(struct pt_regs *pt_regs)
>  {
> -       efi_restore_gd();
> -       printf("Bad mode in \"Error\" handler, esr 0x%08lx\n", pt_regs->esr);
> -       show_regs(pt_regs);
> -       if (CONFIG_IS_ENABLED(FRAMEPOINTER))
> -               show_backtrace(pt_regs);
> -       show_efi_loaded_images(pt_regs);
> -       panic("Resetting CPU ...\n");
> +       except_msg("Bad mode in \"Error\"", pt_regs);
>  }
>
>  /*
> @@ -236,7 +230,7 @@ void do_sync(struct pt_regs *pt_regs)
>             smh_emulate_trap(pt_regs))
>                 return;
>         efi_restore_gd();
> -       printf("\"Synchronous Abort\" handler, esr 0x%08lx", pt_regs->esr);
> +       printf("\"Synchronous Abort\" handler, esr 0x%016lx", pt_regs->esr);
>         dump_far(pt_regs->esr);
>         printf("\n");
>         show_regs(pt_regs);
> @@ -251,13 +245,7 @@ void do_sync(struct pt_regs *pt_regs)
>   */
>  void do_irq(struct pt_regs *pt_regs)
>  {
> -       efi_restore_gd();
> -       printf("\"Irq\" handler, esr 0x%08lx\n", pt_regs->esr);
> -       show_regs(pt_regs);
> -       if (CONFIG_IS_ENABLED(FRAMEPOINTER))
> -               show_backtrace(pt_regs);
> -       show_efi_loaded_images(pt_regs);
> -       panic("Resetting CPU ...\n");
> +       except_msg("\"Irq\"", pt_regs);
>  }
>
>  /*
> @@ -265,13 +253,7 @@ void do_irq(struct pt_regs *pt_regs)
>   */
>  void do_fiq(struct pt_regs *pt_regs)
>  {
> -       efi_restore_gd();
> -       printf("\"Fiq\" handler, esr 0x%08lx\n", pt_regs->esr);
> -       show_regs(pt_regs);
> -       if (CONFIG_IS_ENABLED(FRAMEPOINTER))
> -               show_backtrace(pt_regs);
> -       show_efi_loaded_images(pt_regs);
> -       panic("Resetting CPU ...\n");
> +       except_msg("\"Fiq\"", pt_regs);
>  }
>
>  /*
> @@ -282,11 +264,5 @@ void do_fiq(struct pt_regs *pt_regs)
>   */
>  void __weak do_error(struct pt_regs *pt_regs)
>  {
> -       efi_restore_gd();
> -       printf("\"Error\" handler, esr 0x%08lx\n", pt_regs->esr);
> -       show_regs(pt_regs);
> -       if (CONFIG_IS_ENABLED(FRAMEPOINTER))
> -               show_backtrace(pt_regs);
> -       show_efi_loaded_images(pt_regs);
> -       panic("Resetting CPU ...\n");
> +       except_msg("\"Error\"", pt_regs);
>  }
> --
> 2.48.1
>


More information about the U-Boot mailing list