• Will Deacon's avatar
    arm64: make ARCH_SUPPORTS_DEBUG_PAGEALLOC depend on !HIBERNATION · da24eb1f
    Will Deacon authored
    Selecting both DEBUG_PAGEALLOC and HIBERNATION results in a build failure:
    | kernel/built-in.o: In function `saveable_page':
    | memremap.c:(.text+0x100f90): undefined reference to `kernel_page_present'
    | kernel/built-in.o: In function `swsusp_save':
    | memremap.c:(.text+0x1026f0): undefined reference to `kernel_page_present'
    | make: *** [vmlinux] Error 1
    James sayeth:
    "This is caused by DEBUG_PAGEALLOC, which clears the PTE_VALID bit from
    'free' pages. Hibernate uses it as a hint that it shouldn't save/access
    that page. This function is used to test whether the PTE_VALID bit has
    been cleared by kernel_map_pages(), hibernate is the only user.
    Fixing this exposes a bigger problem with that configuration though: if
    the resume kernel has cut free pages out of the linear map, we copy this
    swiss-cheese view of memory, and try to use it to restore...
    We can fixup the copy of the linear map, but it then explodes in my lazy
    'clean the whole kernel to PoC' after resume, as now both the kernel and
    linear map have holes in them."
    On closer inspection, the whole Kconfig machinery around DEBUG_PAGEALLOC,
    it might need some affection. In particular, DEBUG_ALLOC has:
    which looks pretty fishy.
    For the moment, require ARCH_SUPPORTS_DEBUG_PAGEALLOC to depend on
    !HIBERNATION on arm64 and get allmodconfig building again.
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
Kconfig 29.8 KB