We want to rework how set_pXd() behaves for generic compile-time folded page tables by disallowing its use and triggering a compile-time error when it is used improperly, ensuring that the actual first-level set_pXd() function is used instead.
Since csky's PGTABLE_LEVELS always is 2, use set_pmd() instead of set_pgd() to handle vmalloc_fault(). There should be no functional change. Signed-off-by: Yeoreum Yun <[email protected]> --- arch/csky/mm/fault.c | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/arch/csky/mm/fault.c b/arch/csky/mm/fault.c index 7ff4011089850..1467ea963806c 100644 --- a/arch/csky/mm/fault.c +++ b/arch/csky/mm/fault.c @@ -114,12 +114,12 @@ static inline void bad_area_nosemaphore(struct pt_regs *regs, struct mm_struct * static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long addr) { - pgd_t *pgd, *pgd_k; - pud_t *pud, *pud_k; - pmd_t *pmd, *pmd_k; - pte_t *pte_k; + pmd_t *pmdp, *pmdp_k, pmd_k; + pte_t *ptep_k; int offset; + BUILD_BUG_ON(CONFIG_PGTABLE_LEVELS != 2); + /* User mode accesses just cause a SIGSEGV */ if (user_mode(regs)) { do_trap(regs, SIGSEGV, code, addr); @@ -135,32 +135,19 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long a */ offset = pgd_index(addr); - pgd = get_pgd() + offset; - pgd_k = init_mm.pgd + offset; - - if (!pgd_present(*pgd_k)) { - no_context(regs, addr); - return; - } - set_pgd(pgd, *pgd_k); + pmdp = (pmd_t *)(get_pgd() + offset); + pmdp_k = (pmd_t *)(init_mm.pgd + offset); - pud = (pud_t *)pgd; - pud_k = (pud_t *)pgd_k; - if (!pud_present(*pud_k)) { + pmd_k = *pmdp_k; + if (!pmd_present(pmd_k)) { no_context(regs, addr); return; } - pmd = pmd_offset(pud, addr); - pmd_k = pmd_offset(pud_k, addr); - if (!pmd_present(*pmd_k)) { - no_context(regs, addr); - return; - } - set_pmd(pmd, *pmd_k); + set_pmd(pmdp, pmd_k); - pte_k = pte_offset_kernel(pmd_k, addr); - if (!pte_present(*pte_k)) { + ptep_k = pte_offset_kernel(pmdp_k, addr); + if (!pte_present(*ptep_k)) { no_context(regs, addr); return; } -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}
