Skip to content

Commit c0cd1d5

Browse files
committed
Revert "arm64: errata: Workaround possible Cortex-A715 [ESR|FAR]_ELx corruption"
This reverts commit 44ecda7. All versions of this patch on the mailing list, including the version that ended up getting merged, have portions of code guarded by the non-existent CONFIG_ARM64_WORKAROUND_2645198 option. Although Anshuman says he tested the code with some additional debug changes [1], I'm hesitant to fix the CONFIG option and light up a bunch of code right before I (and others) disappear for the end of year holidays, during which time we won't be around to deal with any fallout. So revert the change for now. We can bring back a fixed, tested version for a later -rc when folks are thinking about things other than trees and turkeys. [1] https://lore.kernel.org/r/[email protected] Reported-by: Lukas Bulwahn <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Will Deacon <[email protected]>
1 parent 3879297 commit c0cd1d5

File tree

8 files changed

+0
-86
lines changed

8 files changed

+0
-86
lines changed

Documentation/arm64/silicon-errata.rst

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,6 @@ stable kernels.
120120
+----------------+-----------------+-----------------+-----------------------------+
121121
| ARM | Cortex-A710 | #2224489 | ARM64_ERRATUM_2224489 |
122122
+----------------+-----------------+-----------------+-----------------------------+
123-
| ARM | Cortex-A715 | #2645198 | ARM64_ERRATUM_2645198 |
124-
+----------------+-----------------+-----------------+-----------------------------+
125123
| ARM | Cortex-X2 | #2119858 | ARM64_ERRATUM_2119858 |
126124
+----------------+-----------------+-----------------+-----------------------------+
127125
| ARM | Cortex-X2 | #2224489 | ARM64_ERRATUM_2224489 |

arch/arm64/Kconfig

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -971,22 +971,6 @@ config ARM64_ERRATUM_2457168
971971

972972
If unsure, say Y.
973973

974-
config ARM64_ERRATUM_2645198
975-
bool "Cortex-A715: 2645198: Workaround possible [ESR|FAR]_ELx corruption"
976-
default y
977-
help
978-
This option adds the workaround for ARM Cortex-A715 erratum 2645198.
979-
980-
If a Cortex-A715 cpu sees a page mapping permissions change from executable
981-
to non-executable, it may corrupt the ESR_ELx and FAR_ELx registers on the
982-
next instruction abort caused by permission fault.
983-
984-
Only user-space does executable to non-executable permission transition via
985-
mprotect() system call. Workaround the problem by doing a break-before-make
986-
TLB invalidation, for all changes to executable user space mappings.
987-
988-
If unsure, say Y.
989-
990974
config CAVIUM_ERRATUM_22375
991975
bool "Cavium erratum 22375, 24313"
992976
default y

arch/arm64/include/asm/hugetlb.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,6 @@ extern pte_t huge_ptep_get(pte_t *ptep);
4949

5050
void __init arm64_hugetlb_cma_reserve(void);
5151

52-
#define huge_ptep_modify_prot_start huge_ptep_modify_prot_start
53-
extern pte_t huge_ptep_modify_prot_start(struct vm_area_struct *vma,
54-
unsigned long addr, pte_t *ptep);
55-
56-
#define huge_ptep_modify_prot_commit huge_ptep_modify_prot_commit
57-
extern void huge_ptep_modify_prot_commit(struct vm_area_struct *vma,
58-
unsigned long addr, pte_t *ptep,
59-
pte_t old_pte, pte_t new_pte);
60-
6152
#include <asm-generic/hugetlb.h>
6253

6354
#endif /* __ASM_HUGETLB_H */

arch/arm64/include/asm/pgtable.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,15 +1095,6 @@ static inline bool pud_sect_supported(void)
10951095
}
10961096

10971097

1098-
#define __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION
1099-
#define ptep_modify_prot_start ptep_modify_prot_start
1100-
extern pte_t ptep_modify_prot_start(struct vm_area_struct *vma,
1101-
unsigned long addr, pte_t *ptep);
1102-
1103-
#define ptep_modify_prot_commit ptep_modify_prot_commit
1104-
extern void ptep_modify_prot_commit(struct vm_area_struct *vma,
1105-
unsigned long addr, pte_t *ptep,
1106-
pte_t old_pte, pte_t new_pte);
11071098
#endif /* !__ASSEMBLY__ */
11081099

11091100
#endif /* __ASM_PGTABLE_H */

arch/arm64/kernel/cpu_errata.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -661,13 +661,6 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
661661
CAP_MIDR_RANGE_LIST(trbe_write_out_of_range_cpus),
662662
},
663663
#endif
664-
#ifdef CONFIG_ARM64_ERRATUM_2645198
665-
{
666-
.desc = "ARM erratum 2645198",
667-
.capability = ARM64_WORKAROUND_2645198,
668-
ERRATA_MIDR_ALL_VERSIONS(MIDR_CORTEX_A715)
669-
},
670-
#endif
671664
#ifdef CONFIG_ARM64_ERRATUM_2077057
672665
{
673666
.desc = "ARM erratum 2077057",

arch/arm64/mm/hugetlbpage.c

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -559,24 +559,3 @@ bool __init arch_hugetlb_valid_size(unsigned long size)
559559
{
560560
return __hugetlb_valid_size(size);
561561
}
562-
563-
pte_t huge_ptep_modify_prot_start(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
564-
{
565-
if (IS_ENABLED(CONFIG_ARM64_WORKAROUND_2645198) &&
566-
cpus_have_const_cap(ARM64_WORKAROUND_2645198)) {
567-
/*
568-
* Break-before-make (BBM) is required for all user space mappings
569-
* when the permission changes from executable to non-executable
570-
* in cases where cpu is affected with errata #2645198.
571-
*/
572-
if (pte_user_exec(READ_ONCE(*ptep)))
573-
return huge_ptep_clear_flush(vma, addr, ptep);
574-
}
575-
return huge_ptep_get_and_clear(vma->vm_mm, addr, ptep);
576-
}
577-
578-
void huge_ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep,
579-
pte_t old_pte, pte_t pte)
580-
{
581-
set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
582-
}

arch/arm64/mm/mmu.c

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1702,24 +1702,3 @@ static int __init prevent_bootmem_remove_init(void)
17021702
}
17031703
early_initcall(prevent_bootmem_remove_init);
17041704
#endif
1705-
1706-
pte_t ptep_modify_prot_start(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
1707-
{
1708-
if (IS_ENABLED(CONFIG_ARM64_WORKAROUND_2645198) &&
1709-
cpus_have_const_cap(ARM64_WORKAROUND_2645198)) {
1710-
/*
1711-
* Break-before-make (BBM) is required for all user space mappings
1712-
* when the permission changes from executable to non-executable
1713-
* in cases where cpu is affected with errata #2645198.
1714-
*/
1715-
if (pte_user_exec(READ_ONCE(*ptep)))
1716-
return ptep_clear_flush(vma, addr, ptep);
1717-
}
1718-
return ptep_get_and_clear(vma->vm_mm, addr, ptep);
1719-
}
1720-
1721-
void ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep,
1722-
pte_t old_pte, pte_t pte)
1723-
{
1724-
set_pte_at(vma->vm_mm, addr, ptep, pte);
1725-
}

arch/arm64/tools/cpucaps

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ WORKAROUND_2038923
7171
WORKAROUND_2064142
7272
WORKAROUND_2077057
7373
WORKAROUND_2457168
74-
WORKAROUND_2645198
7574
WORKAROUND_2658417
7675
WORKAROUND_TRBE_OVERWRITE_FILL_MODE
7776
WORKAROUND_TSB_FLUSH_FAILURE

0 commit comments

Comments
 (0)