It is inefficient to do kernel relocation with MMU disabled. This is because if MMU is disabled, dcache must also be disabled. Now, that we have identity page table we can disable MMU after relocation is completed. Signed-off-by: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> --- arch/arm64/kernel/cpu-reset.S | 8 ------- arch/arm64/kernel/relocate_kernel.S | 36 ++++++++++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/arch/arm64/kernel/cpu-reset.S b/arch/arm64/kernel/cpu-reset.S index 6ea337d464c4..d5cfc17b8e1f 100644 --- a/arch/arm64/kernel/cpu-reset.S +++ b/arch/arm64/kernel/cpu-reset.S @@ -30,14 +30,6 @@ * flat identity mapping. */ ENTRY(__cpu_soft_restart) - /* Clear sctlr_el1 flags. */ - mrs x12, sctlr_el1 - ldr x13, =SCTLR_ELx_FLAGS - bic x12, x12, x13 - pre_disable_mmu_workaround - msr sctlr_el1, x12 - isb - cbz x0, 1f // el2_switch? mov x0, #HVC_SOFT_RESTART hvc #0 // no return diff --git a/arch/arm64/kernel/relocate_kernel.S b/arch/arm64/kernel/relocate_kernel.S index c1d7db71a726..e2724fedd082 100644 --- a/arch/arm64/kernel/relocate_kernel.S +++ b/arch/arm64/kernel/relocate_kernel.S @@ -36,18 +36,6 @@ ENTRY(arm64_relocate_new_kernel) mov x14, xzr /* x14 = entry ptr */ mov x13, xzr /* x13 = copy dest */ - /* Clear the sctlr_el2 flags. */ - mrs x0, CurrentEL - cmp x0, #CurrentEL_EL2 - b.ne 1f - mrs x0, sctlr_el2 - ldr x1, =SCTLR_ELx_FLAGS - bic x0, x0, x1 - pre_disable_mmu_workaround - msr sctlr_el2, x0 - isb -1: - /* Check if the new image needs relocation. */ tbnz x16, IND_DONE_BIT, .Ldone @@ -63,10 +51,10 @@ ENTRY(arm64_relocate_new_kernel) add x20, x0, #PAGE_SIZE sub x1, x15, #1 bic x0, x0, x1 -2: dc ivac, x0 +1: dc ivac, x0 add x0, x0, x15 cmp x0, x20 - b.lo 2b + b.lo 1b dsb sy mov x20, x13 @@ -104,6 +92,26 @@ ENTRY(arm64_relocate_new_kernel) dsb nsh isb + /* Clear sctlr_el1 flags. */ + mrs x12, sctlr_el1 + ldr x13, =SCTLR_ELx_FLAGS + bic x12, x12, x13 + pre_disable_mmu_workaround + msr sctlr_el1, x12 + isb + + /* Clear the sctlr_el2 flags. */ + mrs x0, CurrentEL + cmp x0, #CurrentEL_EL2 + b.ne 2f + mrs x0, sctlr_el2 + ldr x1, =SCTLR_ELx_FLAGS + bic x0, x0, x1 + pre_disable_mmu_workaround + msr sctlr_el2, x0 + isb +2: + /* Start new image. */ mov x0, x18 mov x1, xzr -- 2.22.0 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec