lkml.org 
[lkml]   [2023]   [Jan]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v15 1/7] crash: move crash_prepare_elf64_headers()
    From

    On 09/12/22 21:06, Eric DeVolder wrote:
    > At the outcome of this patch set, the crash_prepare_elf64_headers()
    > is utilized on both the kexec_file_load() and kexec_load() paths. As
    > such, need to move this function out of kexec_file.c and into a
    > common location crash_core.c.
    >
    > No functionality change.
    >
    > Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
    > Acked-by: Baoquan He <bhe@redhat.com>
    > ---
    > kernel/crash_core.c | 100 ++++++++++++++++++++++++++++++++++++++++++++
    > kernel/kexec_file.c | 99 -------------------------------------------
    > 2 files changed, 100 insertions(+), 99 deletions(-)
    >
    > diff --git a/kernel/crash_core.c b/kernel/crash_core.c
    > index a0eb4d5cf557..46c160d14045 100644
    > --- a/kernel/crash_core.c
    > +++ b/kernel/crash_core.c
    > @@ -10,6 +10,7 @@
    > #include <linux/utsname.h>
    > #include <linux/vmalloc.h>
    > #include <linux/sizes.h>
    > +#include <linux/kexec.h>
    >
    > #include <asm/page.h>
    > #include <asm/sections.h>
    > @@ -314,6 +315,105 @@ static int __init parse_crashkernel_dummy(char *arg)
    > }
    > early_param("crashkernel", parse_crashkernel_dummy);
    >
    > +int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
    > + void **addr, unsigned long *sz)
    > +{
    > + Elf64_Ehdr *ehdr;
    > + Elf64_Phdr *phdr;
    > + unsigned long nr_cpus = num_possible_cpus(), nr_phdr, elf_sz;
    > + unsigned char *buf;
    > + unsigned int cpu, i;
    > + unsigned long long notes_addr;
    > + unsigned long mstart, mend;
    > +
    > + /* extra phdr for vmcoreinfo ELF note */
    > + nr_phdr = nr_cpus + 1;
    > + nr_phdr += mem->nr_ranges;
    > +
    > + /*
    > + * kexec-tools creates an extra PT_LOAD phdr for kernel text mapping
    > + * area (for example, ffffffff80000000 - ffffffffa0000000 on x86_64).
    > + * I think this is required by tools like gdb. So same physical
    > + * memory will be mapped in two ELF headers. One will contain kernel
    > + * text virtual addresses and other will have __va(physical) addresses.
    > + */
    > +
    > + nr_phdr++;
    > + elf_sz = sizeof(Elf64_Ehdr) + nr_phdr * sizeof(Elf64_Phdr);
    > + elf_sz = ALIGN(elf_sz, ELF_CORE_HEADER_ALIGN);
    Seems like above function is out of CONFIG_KEXEC_FILE but some of the
    structure/attributes like crash_mem and ELF_CORE_HEADER_ALIGN are
    still defined under CONFIG_KEXEC_FILE (look for include/linux/kexec.h).

    This leads to kernel build issue when CONFIG_KEXEC_FILE is disabled.

    Thanks,
    Sourabh Jain

    \
     
     \ /
      Last update: 2023-03-26 23:32    [W:4.280 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site