• Gavin Shan's avatar
    arm64/kernel: Fix range on invalidating dcache for boot page tables · 9d2d75ed
    Gavin Shan authored
    Prior to commit 8eb7e28d ("arm64/mm: move runtime pgds to
    rodata"), idmap_pgd_dir, tramp_pg_dir, reserved_ttbr0, swapper_pg_dir,
    and init_pg_dir were contiguous at the end of the kernel image. The
    maintenance at the end of __create_page_tables assumed these were
    contiguous, and affected everything from the start of idmap_pg_dir
    to the end of init_pg_dir.
    
    That commit moved all but init_pg_dir into the .rodata section, with
    other data placed between idmap_pg_dir and init_pg_dir, but did not
    update the maintenance. Hence the maintenance is performed on much
    more data than necessary (but as the bootloader previously made this
    clean to the PoC there is no functional problem).
    
    As we only alter idmap_pg_dir, and init_pg_dir, we only need to perform
    maintenance for these. As the other dirs are in .rodata, the bootloader
    will have initialised them as expected and cleaned them to the PoC. The
    kernel will initialize them as necessary after enabling the MMU.
    
    This patch reworks the maintenance to only cover the idmap_pg_dir and
    init_pg_dir to avoid this unnecessary work.
    Signed-off-by: default avatarGavin Shan <gshan@redhat.com>
    Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
    Link: https://lore.kernel.org/r/20200427235700.112220-1-gshan@redhat.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    9d2d75ed
pgtable.h 25.3 KB