On Wed, 3 Jul 2013 10:15:29 -0400 Vivek Goyal <vgoyal at redhat.com> wrote: > On Wed, Jul 03, 2013 at 09:59:13AM +0200, Michael Holzheu wrote: > > On Tue, 2 Jul 2013 12:23:23 -0400 > > Vivek Goyal <vgoyal at redhat.com> wrote: > > > > > On Mon, Jul 01, 2013 at 09:32:36PM +0200, Michael Holzheu wrote: > > > > > > [..] > > > > +ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos) > > > > +{ > > > > + void *src = (void *)(unsigned long)*ppos; > > > > + > > > > + src = elfcorehdr_newmem ? src : src - OLDMEM_BASE; > > > > > > Seriously, we need to get rid of all this OLDMEM_BASE logic in s390 > > > specific code. For regular kdump, it is no different than x86. Only > > > special handling required for zfcpdump for HSA region. > > > > > > Why do we need above. Is it to cover the case where elfcorehdr have > > > been prepared by user space? Are elf headers initially stored in > > > reserved region and then swapped. Why do we need to swap these or > > > why kexec-tools could not take care of swapping it. > > > > I know it is confusing. The "src - OLDMEM_BASE" term is currently > > needed because of the swap issue that we have discussed already. We > > load the ELF header into reserved memory > > [OLDMEM_BASE, OLDMEM_BASE + OLDMEM_SIZE] that is swapped with > > [0, OLDMEM_SIZE]. So the ELF header address has to be adjusted. > > Can't kexec-tools could easily do this swapping and modify elfcorehdr= > command line accordingly so that second kernel does not have to do > swapping for ELF headers. > > And for PT_LOAD segment swapping, we could use ELF header swapping trick > (again in kexec-tools). > > After above two changes I think all the OLD_MEMBASE magic will go away > from s390 code and only HSA region special handling will remain. > > This brings it inline with x86 code and it becomes easier to understand > the s390 code. Otherwise there so may special corner cases that it is > easy to get lost. Right, I agree that it is possible to do the swap in the kexec tool. Then we would load in the kexec tool the ELF header to address "OLDMEM_BASE + addr" (or "crashkernel base + addr") and would specify the kernel parameter as "elfcorehdr=addr". Currently we specify "elfcorehdr=OLDMEM_BASE + addr" and the kernel reverses the swap. Michael