entry-common.c (8bd7f91c03d886f41d35f6108078d20be5a4a1bd) entry-common.c (8d56e5c5a99ce1d17d39ce5a8260e42c2a2d7682)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Exception handling code
4 *
5 * Copyright (C) 2019 ARM Ltd.
6 */
7
8#include <linux/context_tracking.h>

--- 268 unchanged lines hidden (view full) ---

277
278 set_irq_regs(old_regs);
279}
280
281extern void (*handle_arch_irq)(struct pt_regs *);
282extern void (*handle_arch_fiq)(struct pt_regs *);
283
284static void noinstr __panic_unhandled(struct pt_regs *regs, const char *vector,
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Exception handling code
4 *
5 * Copyright (C) 2019 ARM Ltd.
6 */
7
8#include <linux/context_tracking.h>

--- 268 unchanged lines hidden (view full) ---

277
278 set_irq_regs(old_regs);
279}
280
281extern void (*handle_arch_irq)(struct pt_regs *);
282extern void (*handle_arch_fiq)(struct pt_regs *);
283
284static void noinstr __panic_unhandled(struct pt_regs *regs, const char *vector,
285 unsigned int esr)
285 unsigned long esr)
286{
287 arm64_enter_nmi(regs);
288
289 console_verbose();
290
286{
287 arm64_enter_nmi(regs);
288
289 console_verbose();
290
291 pr_crit("Unhandled %s exception on CPU%d, ESR 0x%08x -- %s\n",
291 pr_crit("Unhandled %s exception on CPU%d, ESR 0x%016lx -- %s\n",
292 vector, smp_processor_id(), esr,
293 esr_get_class_string(esr));
294
295 __show_regs(regs);
296 panic("Unhandled exception");
297}
298
299#define UNHANDLED(el, regsize, vector) \

--- 232 unchanged lines hidden (view full) ---

532static void noinstr el0_sve_acc(struct pt_regs *regs, unsigned long esr)
533{
534 enter_from_user_mode(regs);
535 local_daif_restore(DAIF_PROCCTX);
536 do_sve_acc(esr, regs);
537 exit_to_user_mode(regs);
538}
539
292 vector, smp_processor_id(), esr,
293 esr_get_class_string(esr));
294
295 __show_regs(regs);
296 panic("Unhandled exception");
297}
298
299#define UNHANDLED(el, regsize, vector) \

--- 232 unchanged lines hidden (view full) ---

532static void noinstr el0_sve_acc(struct pt_regs *regs, unsigned long esr)
533{
534 enter_from_user_mode(regs);
535 local_daif_restore(DAIF_PROCCTX);
536 do_sve_acc(esr, regs);
537 exit_to_user_mode(regs);
538}
539
540static void noinstr el0_sme_acc(struct pt_regs *regs, unsigned long esr)
541{
542 enter_from_user_mode(regs);
543 local_daif_restore(DAIF_PROCCTX);
544 do_sme_acc(esr, regs);
545 exit_to_user_mode(regs);
546}
547
548static void noinstr el0_fpsimd_exc(struct pt_regs *regs, unsigned long esr)
549{
550 enter_from_user_mode(regs);
551 local_daif_restore(DAIF_PROCCTX);
552 do_fpsimd_exc(esr, regs);
553 exit_to_user_mode(regs);
554}
555

--- 92 unchanged lines hidden (view full) ---

648 el0_ia(regs, esr);
649 break;
650 case ESR_ELx_EC_FP_ASIMD:
651 el0_fpsimd_acc(regs, esr);
652 break;
653 case ESR_ELx_EC_SVE:
654 el0_sve_acc(regs, esr);
655 break;
540static void noinstr el0_fpsimd_exc(struct pt_regs *regs, unsigned long esr)
541{
542 enter_from_user_mode(regs);
543 local_daif_restore(DAIF_PROCCTX);
544 do_fpsimd_exc(esr, regs);
545 exit_to_user_mode(regs);
546}
547

--- 92 unchanged lines hidden (view full) ---

640 el0_ia(regs, esr);
641 break;
642 case ESR_ELx_EC_FP_ASIMD:
643 el0_fpsimd_acc(regs, esr);
644 break;
645 case ESR_ELx_EC_SVE:
646 el0_sve_acc(regs, esr);
647 break;
656 case ESR_ELx_EC_SME:
657 el0_sme_acc(regs, esr);
658 break;
659 case ESR_ELx_EC_FP_EXC64:
660 el0_fpsimd_exc(regs, esr);
661 break;
662 case ESR_ELx_EC_SYS64:
663 case ESR_ELx_EC_WFx:
664 el0_sys(regs, esr);
665 break;
666 case ESR_ELx_EC_SP_ALIGN:

--- 157 unchanged lines hidden (view full) ---

824UNHANDLED(el0t, 32, irq)
825UNHANDLED(el0t, 32, fiq)
826UNHANDLED(el0t, 32, error)
827#endif /* CONFIG_COMPAT */
828
829#ifdef CONFIG_VMAP_STACK
830asmlinkage void noinstr handle_bad_stack(struct pt_regs *regs)
831{
648 case ESR_ELx_EC_FP_EXC64:
649 el0_fpsimd_exc(regs, esr);
650 break;
651 case ESR_ELx_EC_SYS64:
652 case ESR_ELx_EC_WFx:
653 el0_sys(regs, esr);
654 break;
655 case ESR_ELx_EC_SP_ALIGN:

--- 157 unchanged lines hidden (view full) ---

813UNHANDLED(el0t, 32, irq)
814UNHANDLED(el0t, 32, fiq)
815UNHANDLED(el0t, 32, error)
816#endif /* CONFIG_COMPAT */
817
818#ifdef CONFIG_VMAP_STACK
819asmlinkage void noinstr handle_bad_stack(struct pt_regs *regs)
820{
832 unsigned int esr = read_sysreg(esr_el1);
821 unsigned long esr = read_sysreg(esr_el1);
833 unsigned long far = read_sysreg(far_el1);
834
835 arm64_enter_nmi(regs);
836 panic_bad_stack(regs, esr, far);
837}
838#endif /* CONFIG_VMAP_STACK */
839
840#ifdef CONFIG_ARM_SDE_INTERFACE

--- 34 unchanged lines hidden ---
822 unsigned long far = read_sysreg(far_el1);
823
824 arm64_enter_nmi(regs);
825 panic_bad_stack(regs, esr, far);
826}
827#endif /* CONFIG_VMAP_STACK */
828
829#ifdef CONFIG_ARM_SDE_INTERFACE

--- 34 unchanged lines hidden ---