Commit e3ec6582 authored by Sami Tolvanen's avatar Sami Tolvanen Committed by Will Deacon

arm64: mm: avoid x18 in idmap_kpti_install_ng_mappings

idmap_kpti_install_ng_mappings uses x18 as a temporary register, which
will result in a conflict when x18 is reserved. Use x16 and x17 instead
where needed.
Signed-off-by: default avatarSami Tolvanen <samitolvanen@google.com>
Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent c54f90c2
...@@ -250,15 +250,15 @@ ENTRY(idmap_kpti_install_ng_mappings) ...@@ -250,15 +250,15 @@ ENTRY(idmap_kpti_install_ng_mappings)
/* We're the boot CPU. Wait for the others to catch up */ /* We're the boot CPU. Wait for the others to catch up */
sevl sevl
1: wfe 1: wfe
ldaxr w18, [flag_ptr] ldaxr w17, [flag_ptr]
eor w18, w18, num_cpus eor w17, w17, num_cpus
cbnz w18, 1b cbnz w17, 1b
/* We need to walk swapper, so turn off the MMU. */ /* We need to walk swapper, so turn off the MMU. */
pre_disable_mmu_workaround pre_disable_mmu_workaround
mrs x18, sctlr_el1 mrs x17, sctlr_el1
bic x18, x18, #SCTLR_ELx_M bic x17, x17, #SCTLR_ELx_M
msr sctlr_el1, x18 msr sctlr_el1, x17
isb isb
/* Everybody is enjoying the idmap, so we can rewrite swapper. */ /* Everybody is enjoying the idmap, so we can rewrite swapper. */
...@@ -281,9 +281,9 @@ skip_pgd: ...@@ -281,9 +281,9 @@ skip_pgd:
isb isb
/* We're done: fire up the MMU again */ /* We're done: fire up the MMU again */
mrs x18, sctlr_el1 mrs x17, sctlr_el1
orr x18, x18, #SCTLR_ELx_M orr x17, x17, #SCTLR_ELx_M
msr sctlr_el1, x18 msr sctlr_el1, x17
isb isb
/* /*
...@@ -353,46 +353,47 @@ skip_pte: ...@@ -353,46 +353,47 @@ skip_pte:
b.ne do_pte b.ne do_pte
b next_pmd b next_pmd
.unreq cpu
.unreq num_cpus
.unreq swapper_pa
.unreq cur_pgdp
.unreq end_pgdp
.unreq pgd
.unreq cur_pudp
.unreq end_pudp
.unreq pud
.unreq cur_pmdp
.unreq end_pmdp
.unreq pmd
.unreq cur_ptep
.unreq end_ptep
.unreq pte
/* Secondary CPUs end up here */ /* Secondary CPUs end up here */
__idmap_kpti_secondary: __idmap_kpti_secondary:
/* Uninstall swapper before surgery begins */ /* Uninstall swapper before surgery begins */
__idmap_cpu_set_reserved_ttbr1 x18, x17 __idmap_cpu_set_reserved_ttbr1 x16, x17
/* Increment the flag to let the boot CPU we're ready */ /* Increment the flag to let the boot CPU we're ready */
1: ldxr w18, [flag_ptr] 1: ldxr w16, [flag_ptr]
add w18, w18, #1 add w16, w16, #1
stxr w17, w18, [flag_ptr] stxr w17, w16, [flag_ptr]
cbnz w17, 1b cbnz w17, 1b
/* Wait for the boot CPU to finish messing around with swapper */ /* Wait for the boot CPU to finish messing around with swapper */
sevl sevl
1: wfe 1: wfe
ldxr w18, [flag_ptr] ldxr w16, [flag_ptr]
cbnz w18, 1b cbnz w16, 1b
/* All done, act like nothing happened */ /* All done, act like nothing happened */
offset_ttbr1 swapper_ttb, x18 offset_ttbr1 swapper_ttb, x16
msr ttbr1_el1, swapper_ttb msr ttbr1_el1, swapper_ttb
isb isb
ret ret
.unreq cpu
.unreq num_cpus
.unreq swapper_pa
.unreq swapper_ttb .unreq swapper_ttb
.unreq flag_ptr .unreq flag_ptr
.unreq cur_pgdp
.unreq end_pgdp
.unreq pgd
.unreq cur_pudp
.unreq end_pudp
.unreq pud
.unreq cur_pmdp
.unreq end_pmdp
.unreq pmd
.unreq cur_ptep
.unreq end_ptep
.unreq pte
ENDPROC(idmap_kpti_install_ng_mappings) ENDPROC(idmap_kpti_install_ng_mappings)
.popsection .popsection
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment