• James Morse's avatar
    arm64: export memblock_reserve()d regions via /proc/iomem · 50d7ba36
    James Morse authored
    There has been some confusion around what is necessary to prevent kexec
    overwriting important memory regions. memblock: reserve, or nomap?
    Only memblock nomap regions are reported via /proc/iomem, kexec's
    user-space doesn't know about memblock_reserve()d regions.
    
    Until commit f56ab9a5 ("efi/arm: Don't mark ACPI reclaim memory
    as MEMBLOCK_NOMAP") the ACPI tables were nomap, now they are reserved
    and thus possible for kexec to overwrite with the new kernel or initrd.
    But this was always broken, as the UEFI memory map is also reserved
    and not marked as nomap.
    
    Exporting both nomap and reserved memblock types is a nuisance as
    they live in different memblock structures which we can't walk at
    the same time.
    
    Take a second walk over memblock.reserved and add new 'reserved'
    subnodes for the memblock_reserved() regions that aren't already
    described by the existing code. (e.g. Kernel Code)
    
    We use reserve_region_with_split() to find the gaps in existing named
    regions. This handles the gap between 'kernel code' and 'kernel data'
    which is memblock_reserve()d, but already partially described by
    request_standard_resources(). e.g.:
    | 80000000-dfffffff : System RAM
    |   80080000-80ffffff : Kernel code
    |   81000000-8158ffff : reserved
    |   81590000-8237efff : Kernel data
    |   a0000000-dfffffff : Crash kernel
    | e00f0000-f949ffff : System RAM
    
    reserve_region_with_split needs kzalloc() which isn't available when
    request_standard_resources() is called, use an initcall.
    Reported-by: default avatarBhupesh Sharma <bhsharma@redhat.com>
    Reported-by: default avatarTyler Baicar <tbaicar@codeaurora.org>
    Suggested-by: default avatarAkashi Takahiro <takahiro.akashi@linaro.org>
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Fixes: d28f6df1 ("arm64/kexec: Add core kexec support")
    Reviewed-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    CC: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    50d7ba36
setup.c 10.7 KB