• James Morse's avatar
    arm64: hibernate: Support DEBUG_PAGEALLOC · 5ebe3a44
    James Morse authored
    DEBUG_PAGEALLOC removes the valid bit of page table entries to prevent
    any access to unallocated memory. Hibernate uses this as a hint that those
    pages don't need to be saved/restored. This patch adds the
    kernel_page_present() function it uses.
    
    hibernate.c copies the resume kernel's linear map for use during restore.
    Add _copy_pte() to fill-in the holes made by DEBUG_PAGEALLOC in the resume
    kernel, so we can restore data the original kernel had at these addresses.
    
    Finally, DEBUG_PAGEALLOC means the linear-map alias of KERNEL_START to
    KERNEL_END may have holes in it, so we can't lazily clean this whole
    area to the PoC. Only clean the new mmuoff region, and the kernel/kvm
    idmaps.
    
    This reverts commit da24eb1f.
    Reported-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    5ebe3a44
hibernate.c 13.7 KB