UPSTREAM: arm64: mm: move pgd_cache initialisation to pgtable_cache_init
authorWill Deacon <will.deacon@arm.com>
Tue, 5 Jan 2016 15:36:59 +0000 (15:36 +0000)
committerJeff Vander Stoep <jeffv@google.com>
Sun, 18 Sep 2016 21:16:37 +0000 (14:16 -0700)
commit606d0cab2091ee86fa8dc7c77a53a9e59e9fac05
tree2c6b0f9d40b6f403e701a8f99bedb1621c003287
parentcc68289965af2e593fdf5161f7e6407d48d79191
UPSTREAM: arm64: mm: move pgd_cache initialisation to pgtable_cache_init

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: Dennis Chen <dennis.chen@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Bug: 30369029
Patchset: rework-pagetable

(cherry picked from commit 39b5be9b4233a9f212b98242bddf008f379b5122)
Signed-off-by: Jeff Vander Stoep <jeffv@google.com>
Change-Id: I124f03d19299be93124af35641294bf73c13bb22
arch/arm64/include/asm/pgtable.h
arch/arm64/mm/pgd.c