diff --git a/Documentation/arm64/silicon-errata.rst b/Documentation/arm64/silicon-errata.rst index ec5f889d7681..808ade4cc008 100644 --- a/Documentation/arm64/silicon-errata.rst +++ b/Documentation/arm64/silicon-errata.rst @@ -120,8 +120,6 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A710 | #2224489 | ARM64_ERRATUM_2224489 | +----------------+-----------------+-----------------+-----------------------------+ -| ARM | Cortex-A715 | #2645198 | ARM64_ERRATUM_2645198 | -+----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-X2 | #2119858 | ARM64_ERRATUM_2119858 | +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-X2 | #2224489 | ARM64_ERRATUM_2224489 | diff --git a/arch/Kconfig b/arch/Kconfig index a3c47c2a79cd..12e3ddabac9d 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -638,7 +638,7 @@ config ARCH_SUPPORTS_SHADOW_CALL_STACK config SHADOW_CALL_STACK bool "Shadow Call Stack" depends on ARCH_SUPPORTS_SHADOW_CALL_STACK - depends on DYNAMIC_FTRACE_WITH_REGS || !FUNCTION_GRAPH_TRACER + depends on DYNAMIC_FTRACE_WITH_ARGS || DYNAMIC_FTRACE_WITH_REGS || !FUNCTION_GRAPH_TRACER help This option enables the compiler's Shadow Call Stack, which uses a shadow stack to protect function return addresses from diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index cf6d1cd8b6dc..03934808b2ed 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -972,22 +972,6 @@ config ARM64_ERRATUM_2457168 If unsure, say Y. -config ARM64_ERRATUM_2645198 - bool "Cortex-A715: 2645198: Workaround possible [ESR|FAR]_ELx corruption" - default y - help - This option adds the workaround for ARM Cortex-A715 erratum 2645198. - - If a Cortex-A715 cpu sees a page mapping permissions change from executable - to non-executable, it may corrupt the ESR_ELx and FAR_ELx registers on the - next instruction abort caused by permission fault. - - Only user-space does executable to non-executable permission transition via - mprotect() system call. Workaround the problem by doing a break-before-make - TLB invalidation, for all changes to executable user space mappings. - - If unsure, say Y. - config CAVIUM_ERRATUM_22375 bool "Cavium erratum 22375, 24313" default y diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h index 6a4a1ab8eb23..d20f5da2d76f 100644 --- a/arch/arm64/include/asm/hugetlb.h +++ b/arch/arm64/include/asm/hugetlb.h @@ -49,15 +49,6 @@ extern pte_t huge_ptep_get(pte_t *ptep); void __init arm64_hugetlb_cma_reserve(void); -#define huge_ptep_modify_prot_start huge_ptep_modify_prot_start -extern pte_t huge_ptep_modify_prot_start(struct vm_area_struct *vma, - unsigned long addr, pte_t *ptep); - -#define huge_ptep_modify_prot_commit huge_ptep_modify_prot_commit -extern void huge_ptep_modify_prot_commit(struct vm_area_struct *vma, - unsigned long addr, pte_t *ptep, - pte_t old_pte, pte_t new_pte); - #include #endif /* __ASM_HUGETLB_H */ diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index 6914add66bcf..b4bbeed80fb6 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -1093,15 +1093,6 @@ static inline bool pud_sect_supported(void) } -#define __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION -#define ptep_modify_prot_start ptep_modify_prot_start -extern pte_t ptep_modify_prot_start(struct vm_area_struct *vma, - unsigned long addr, pte_t *ptep); - -#define ptep_modify_prot_commit ptep_modify_prot_commit -extern void ptep_modify_prot_commit(struct vm_area_struct *vma, - unsigned long addr, pte_t *ptep, - pte_t old_pte, pte_t new_pte); #endif /* !__ASSEMBLY__ */ #endif /* __ASM_PGTABLE_H */ diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index 307faa2b4395..89ac00084f38 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -661,13 +661,6 @@ const struct arm64_cpu_capabilities arm64_errata[] = { CAP_MIDR_RANGE_LIST(trbe_write_out_of_range_cpus), }, #endif -#ifdef CONFIG_ARM64_ERRATUM_2645198 - { - .desc = "ARM erratum 2645198", - .capability = ARM64_WORKAROUND_2645198, - ERRATA_MIDR_ALL_VERSIONS(MIDR_CORTEX_A715) - }, -#endif #ifdef CONFIG_ARM64_ERRATUM_2077057 { .desc = "ARM erratum 2077057", diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c index cd8d96e1fa1a..35e9a468d13e 100644 --- a/arch/arm64/mm/hugetlbpage.c +++ b/arch/arm64/mm/hugetlbpage.c @@ -559,24 +559,3 @@ bool __init arch_hugetlb_valid_size(unsigned long size) { return __hugetlb_valid_size(size); } - -pte_t huge_ptep_modify_prot_start(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) -{ - if (IS_ENABLED(CONFIG_ARM64_WORKAROUND_2645198) && - cpus_have_const_cap(ARM64_WORKAROUND_2645198)) { - /* - * Break-before-make (BBM) is required for all user space mappings - * when the permission changes from executable to non-executable - * in cases where cpu is affected with errata #2645198. - */ - if (pte_user_exec(READ_ONCE(*ptep))) - return huge_ptep_clear_flush(vma, addr, ptep); - } - return huge_ptep_get_and_clear(vma->vm_mm, addr, ptep); -} - -void huge_ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, - pte_t old_pte, pte_t pte) -{ - set_huge_pte_at(vma->vm_mm, addr, ptep, pte); -} diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 12915f379c22..14c87e8d69d8 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1630,24 +1630,3 @@ static int __init prevent_bootmem_remove_init(void) } early_initcall(prevent_bootmem_remove_init); #endif - -pte_t ptep_modify_prot_start(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) -{ - if (IS_ENABLED(CONFIG_ARM64_WORKAROUND_2645198) && - cpus_have_const_cap(ARM64_WORKAROUND_2645198)) { - /* - * Break-before-make (BBM) is required for all user space mappings - * when the permission changes from executable to non-executable - * in cases where cpu is affected with errata #2645198. - */ - if (pte_user_exec(READ_ONCE(*ptep))) - return ptep_clear_flush(vma, addr, ptep); - } - return ptep_get_and_clear(vma->vm_mm, addr, ptep); -} - -void ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, - pte_t old_pte, pte_t pte) -{ - set_pte_at(vma->vm_mm, addr, ptep, pte); -} diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index dfeb2c51e257..a86ee376920a 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -71,7 +71,6 @@ WORKAROUND_2038923 WORKAROUND_2064142 WORKAROUND_2077057 WORKAROUND_2457168 -WORKAROUND_2645198 WORKAROUND_2658417 WORKAROUND_TRBE_OVERWRITE_FILL_MODE WORKAROUND_TSB_FLUSH_FAILURE