traps.c (ae976f063b605dd558571eff40c8229ffbc39e24) traps.c (2e77a62cb3a6d2eb9dd875516411bcd131dd04e7)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Based on arch/arm/kernel/traps.c
4 *
5 * Copyright (C) 1995-2009 Russell King
6 * Copyright (C) 2012 ARM Ltd.
7 */
8

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

522 if (address >= user_addr_max()) { \
523 res = -EFAULT; \
524 } else { \
525 uaccess_ttbr0_enable(); \
526 asm volatile ( \
527 "1: " insn ", %1\n" \
528 " mov %w0, #0\n" \
529 "2:\n" \
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Based on arch/arm/kernel/traps.c
4 *
5 * Copyright (C) 1995-2009 Russell King
6 * Copyright (C) 2012 ARM Ltd.
7 */
8

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

522 if (address >= user_addr_max()) { \
523 res = -EFAULT; \
524 } else { \
525 uaccess_ttbr0_enable(); \
526 asm volatile ( \
527 "1: " insn ", %1\n" \
528 " mov %w0, #0\n" \
529 "2:\n" \
530 " .pushsection .fixup,\"ax\"\n" \
531 " .align 2\n" \
532 "3: mov %w0, %w2\n" \
533 " b 2b\n" \
534 " .popsection\n" \
535 _ASM_EXTABLE(1b, 3b) \
530 _ASM_EXTABLE_UACCESS_ERR(1b, 2b, %w0) \
536 : "=r" (res) \
531 : "=r" (res) \
537 : "r" (address), "i" (-EFAULT)); \
532 : "r" (address)); \
538 uaccess_ttbr0_disable(); \
539 }
540
541static void user_cache_maint_handler(unsigned int esr, struct pt_regs *regs)
542{
543 unsigned long tagged_address, address;
544 int rt = ESR_ELx_SYS64_ISS_RT(esr);
545 int crm = (esr & ESR_ELx_SYS64_ISS_CRM_MASK) >> ESR_ELx_SYS64_ISS_CRM_SHIFT;

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

649 },
650 {
651 /* Trap read access to CNTVCT_EL0 */
652 .esr_mask = ESR_ELx_SYS64_ISS_SYS_OP_MASK,
653 .esr_val = ESR_ELx_SYS64_ISS_SYS_CNTVCT,
654 .handler = cntvct_read_handler,
655 },
656 {
533 uaccess_ttbr0_disable(); \
534 }
535
536static void user_cache_maint_handler(unsigned int esr, struct pt_regs *regs)
537{
538 unsigned long tagged_address, address;
539 int rt = ESR_ELx_SYS64_ISS_RT(esr);
540 int crm = (esr & ESR_ELx_SYS64_ISS_CRM_MASK) >> ESR_ELx_SYS64_ISS_CRM_SHIFT;

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

644 },
645 {
646 /* Trap read access to CNTVCT_EL0 */
647 .esr_mask = ESR_ELx_SYS64_ISS_SYS_OP_MASK,
648 .esr_val = ESR_ELx_SYS64_ISS_SYS_CNTVCT,
649 .handler = cntvct_read_handler,
650 },
651 {
657 /* Trap read access to CNTVCTSS_EL0 */
658 .esr_mask = ESR_ELx_SYS64_ISS_SYS_OP_MASK,
659 .esr_val = ESR_ELx_SYS64_ISS_SYS_CNTVCTSS,
660 .handler = cntvct_read_handler,
661 },
662 {
663 /* Trap read access to CNTFRQ_EL0 */
664 .esr_mask = ESR_ELx_SYS64_ISS_SYS_OP_MASK,
665 .esr_val = ESR_ELx_SYS64_ISS_SYS_CNTFRQ,
666 .handler = cntfrq_read_handler,
667 },
668 {
669 /* Trap read access to CPUID registers */
670 .esr_mask = ESR_ELx_SYS64_ISS_SYS_MRS_OP_MASK,

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

730}
731
732static const struct sys64_hook cp15_64_hooks[] = {
733 {
734 .esr_mask = ESR_ELx_CP15_64_ISS_SYS_MASK,
735 .esr_val = ESR_ELx_CP15_64_ISS_SYS_CNTVCT,
736 .handler = compat_cntvct_read_handler,
737 },
652 /* Trap read access to CNTFRQ_EL0 */
653 .esr_mask = ESR_ELx_SYS64_ISS_SYS_OP_MASK,
654 .esr_val = ESR_ELx_SYS64_ISS_SYS_CNTFRQ,
655 .handler = cntfrq_read_handler,
656 },
657 {
658 /* Trap read access to CPUID registers */
659 .esr_mask = ESR_ELx_SYS64_ISS_SYS_MRS_OP_MASK,

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

719}
720
721static const struct sys64_hook cp15_64_hooks[] = {
722 {
723 .esr_mask = ESR_ELx_CP15_64_ISS_SYS_MASK,
724 .esr_val = ESR_ELx_CP15_64_ISS_SYS_CNTVCT,
725 .handler = compat_cntvct_read_handler,
726 },
738 {
739 .esr_mask = ESR_ELx_CP15_64_ISS_SYS_MASK,
740 .esr_val = ESR_ELx_CP15_64_ISS_SYS_CNTVCTSS,
741 .handler = compat_cntvct_read_handler,
742 },
743 {},
744};
745
746void do_cp15instr(unsigned int esr, struct pt_regs *regs)
747{
748 const struct sys64_hook *hook, *hook_base;
749
750 if (!cp15_cond_valid(esr, regs)) {

--- 334 unchanged lines hidden ---
727 {},
728};
729
730void do_cp15instr(unsigned int esr, struct pt_regs *regs)
731{
732 const struct sys64_hook *hook, *hook_base;
733
734 if (!cp15_cond_valid(esr, regs)) {

--- 334 unchanged lines hidden ---