Version 3 changes: As James Morse suggested[1], we split the old patch into 5 patches:
1. Introduce init_pg_dir. 2. Make __enable_mmu() take the ttbr1 page as an argument. 3. Create initial page tables in init_pg_dir and then create final page tables in swapper_pg_dir directly. 4. Make swapper_pg_dir smaller. 5. Move {idmap_pg_dir, swapper_pg_dir} to .rodata section. At the same time, fix bugs mentioned in [1] and [2]. Special thanks to James Morse and Suzuki K Poulose. Without their help, I couldn't write these patches. v2: https://patchwork.kernel.org/patch/10485641/ v1: https://patchwork.kernel.org/patch/10476595/ [1] https://patchwork.kernel.org/patch/10485641/ [2] https://patchwork.kernel.org/patch/10485643/ Jun Yao (5): arm64/mm: Introduce init_pg_dir arm64/mm: Make __enable_mmu() take the ttbr1 page as an argument arm64/mm: Create initial page tables in init_pg_dir arm64/mm: Make swapper_pg_dir smaller arm64/mm: Move {idmap_pg_dir, swapper_pg_dir} to .rodata section arch/arm64/include/asm/assembler.h | 23 ++++++++++++++ arch/arm64/include/asm/pgalloc.h | 48 ++++++++++++++++++++++++++++++ arch/arm64/include/asm/pgtable.h | 17 ++++++----- arch/arm64/kernel/head.S | 31 ++++++++++++++----- arch/arm64/kernel/setup.c | 1 + arch/arm64/kernel/sleep.S | 1 + arch/arm64/kernel/vmlinux.lds.S | 29 ++++++++++++------ arch/arm64/mm/mmu.c | 32 +++----------------- 8 files changed, 129 insertions(+), 53 deletions(-) -- 2.17.1