[PATCH 2/2] [fs] proc/vmcore: check the dummy place holder for offline cpu to avoid warning

Liu ping fan kernelfans at gmail.com
Wed Dec 14 19:04:25 PST 2016


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,



More information about the kexec mailing list