• David Hildenbrand's avatar
    kernel/resource: make walk_system_ram_res() find all busy IORESOURCE_SYSTEM_RAM resources · 97f61c8f
    David Hildenbrand authored
    Patch series "kernel/resource: make walk_system_ram_res() and walk_mem_res() search the whole tree", v2.
    
    Playing with kdump+virtio-mem I noticed that kexec_file_load() does not
    consider System RAM added via dax/kmem and virtio-mem when preparing the
    elf header for kdump.  Looking into the details, the logic used in
    walk_system_ram_res() and walk_mem_res() seems to be outdated.
    
    walk_system_ram_range() already does the right thing, let's change
    walk_system_ram_res() and walk_mem_res(), and clean up.
    
    Loading a kdump kernel via "kexec -p -s" ...  will result in the kdump
    kernel to also dump dax/kmem and virtio-mem added System RAM now.
    
    Note: kexec-tools on x86-64 also have to be updated to consider this
    memory in the kexec_load() case when processing /proc/iomem.
    
    This patch (of 3):
    
    It used to be true that we can have system RAM (IORESOURCE_SYSTEM_RAM |
    IORESOURCE_BUSY) only on the first level in the resource tree.  However,
    this is no longer holds for driver-managed system RAM (i.e., added via
    dax/kmem and virtio-mem), which gets added on lower levels, for example,
    inside device containers.
    
    We have two users of walk_system_ram_res(), which currently only
    consideres the first level:
    
    a) kernel/kexec_file.c:kexec_walk_resources() -- We properly skip
       IORESOURCE_SYSRAM_DRIVER_MANAGED resources via
       locate_mem_hole_callback(), so even after this change, we won't be
       placing kexec images onto dax/kmem and virtio-mem added memory.  No
       change.
    
    b) arch/x86/kernel/crash.c:fill_up_crash_elf_data() -- we're currently
       not adding relevant ranges to the crash elf header, resulting in them
       not getting dumped via kdump.
    
    This change fixes loading a crashkernel via kexec_file_load() and
    including dax/kmem and virtio-mem added System RAM in the crashdump on
    x86-64.  Note that e.g,, arm64 relies on memblock data and, therefore,
    always considers all added System RAM already.
    
    Let's find all IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY resources, making
    the function behave like walk_system_ram_range().
    
    Link: https://lkml.kernel.org/r/20210325115326.7826-1-david@redhat.com
    Link: https://lkml.kernel.org/r/20210325115326.7826-2-david@redhat.com
    Fixes: ebf71552 ("virtio-mem: Add parent resource for all added "System RAM"")
    Fixes: c221c0b0 ("device-dax: "Hotplug" persistent memory for use like normal RAM")
    Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarDan Williams <dan.j.williams@intel.com>
    Acked-by: default avatarBaoquan He <bhe@redhat.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Cc: Dave Young <dyoung@redhat.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Keith Busch <keith.busch@intel.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Qian Cai <cai@lca.pw>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Eric Biederman <ebiederm@xmission.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: Brijesh Singh <brijesh.singh@amd.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    97f61c8f
resource.c 47.9 KB