2013/6/8 Michael Holzheu <holzheu at linux.vnet.ibm.com>: <cut> > @@ -417,27 +416,44 @@ static void s390_elf_corehdr_create(char **elfcorebuf, size_t *elfcorebuf_sz) > ptr = notes_init(phdr_notes, ptr, ((unsigned long) hdr) + hdr_off); > /* Init loads */ > hdr_off = PTR_DIFF(ptr, hdr); > - loads_init(phdr_loads, ((unsigned long) hdr) + hdr_off); > - *elfcorebuf_sz = hdr_off; > - *elfcorebuf = (void *) relocate((unsigned long) hdr); > - BUG_ON(*elfcorebuf_sz > alloc_size); > + loads_init(phdr_loads, hdr_off); > + elfcorehdr_addr = (unsigned long long) hdr; > + elfcorehdr_size = (unsigned long long) hdr_off; > + elfcorehdr_newmem = hdr; > + BUG_ON(elfcorehdr_size > alloc_size); > + return 0; > } > > /* > - * Create kdump ELF core header in new kernel, if it has not been passed via > - * the "elfcorehdr" kernel parameter > + * Free ELF core header (new kernel) > */ > -static int setup_kdump_elfcorehdr(void) > +void elfcorehdr_free(void) > { > - size_t elfcorebuf_sz; > - char *elfcorebuf; > - > - if (!OLDMEM_BASE || is_kdump_kernel()) > - return -EINVAL; > - s390_elf_corehdr_create(&elfcorebuf, &elfcorebuf_sz); > - elfcorehdr_addr = (unsigned long long) elfcorebuf; > - elfcorehdr_size = elfcorebuf_sz; > - return 0; > + if (!elfcorehdr_newmem) > + return; > + vfree(elfcorehdr_newmem); kfree is correct here? Thanks. HATAYAMA, Daisuke