• Will Deacon's avatar
    arm64: mm: move pgd_cache initialisation to pgtable_cache_init · 39b5be9b
    Will Deacon authored
    Initialising the suppport for EFI runtime services requires us to
    allocate a pgd off the back of an early_initcall. On systems where the
    PGD_SIZE is smaller than PAGE_SIZE (e.g. 64k pages and 48-bit VA), the
    pgd_cache isn't initialised at this stage, and we panic with a NULL
    dereference during boot:
    
      Unable to handle kernel NULL pointer dereference at virtual address 00000000
    
      __create_mapping.isra.5+0x84/0x350
      create_pgd_mapping+0x20/0x28
      efi_create_mapping+0x5c/0x6c
      arm_enable_runtime_services+0x154/0x1e4
      do_one_initcall+0x8c/0x190
      kernel_init_freeable+0x84/0x1ec
      kernel_init+0x10/0xe0
      ret_from_fork+0x10/0x50
    
    This patch fixes the problem by initialising the pgd_cache earlier, in
    the pgtable_cache_init callback, which sounds suspiciously like what it
    was intended for.
    Reported-by: default avatarDennis Chen <dennis.chen@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    39b5be9b
pgtable.h 21.1 KB