On Thu, Dec 15, 2016 at 7:56 AM, Xunlei Pang <xpang at redhat.com> wrote: > On 12/14/2016 at 02:11 PM, Pingfan Liu wrote: >> kexec-tools always allocates program headers for possible cpus. But >> when crashing, offline cpus have dummy headers. We do not copy these >> dummy notes into ELF file, also have no need of warning on them. >> >> Signed-off-by: Pingfan Liu <piliu at redhat.com> >> --- >> fs/proc/vmcore.c | 21 +++++++++++++++++---- >> 1 file changed, 17 insertions(+), 4 deletions(-) >> >> diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c >> index 8ab782d..bbc9dad 100644 >> --- a/fs/proc/vmcore.c >> +++ b/fs/proc/vmcore.c >> @@ -526,9 +526,10 @@ static u64 __init get_vmcore_size(size_t elfsz, size_t elfnotesegsz, >> */ >> static int __init update_note_header_size_elf64(const Elf64_Ehdr *ehdr_ptr) >> { >> - int i, rc=0; >> + int i, j, rc = 0; >> Elf64_Phdr *phdr_ptr; >> Elf64_Nhdr *nhdr_ptr; >> + bool warn; >> >> phdr_ptr = (Elf64_Phdr *)(ehdr_ptr + 1); >> for (i = 0; i < ehdr_ptr->e_phnum; i++, phdr_ptr++) { >> @@ -536,6 +537,7 @@ static int __init update_note_header_size_elf64(const Elf64_Ehdr *ehdr_ptr) >> u64 offset, max_sz, sz, real_sz = 0; >> if (phdr_ptr->p_type != PT_NOTE) >> continue; >> + warn = true; >> max_sz = phdr_ptr->p_memsz; >> offset = phdr_ptr->p_offset; >> notes_section = kmalloc(max_sz, GFP_KERNEL); >> @@ -547,7 +549,7 @@ static int __init update_note_header_size_elf64(const Elf64_Ehdr *ehdr_ptr) >> return rc; >> } >> nhdr_ptr = notes_section; >> - while (nhdr_ptr->n_namesz != 0) { >> + for (j = 0; nhdr_ptr->n_namesz != 0; j++) { > > Hi Pingfan, > > I think we don't need to be this complex, how about simply check before while loop, > if it is the cpu dummy note(initialize it with some magic), then handle it differently, > e.g. set a "nowarn" flag to use afterwards and make sure it has zero p_memsz? > I had thought that how the percpu note section was filled. But you are right, we can suppose that for all archs, cpus just overwrite the note, not append the note. > Also do the similar thing for update_note_header_size_elf32()? > Yes, will fix it. Thx,