Hi Bhupesh, Sorry for the late reply, I tested your v5 patches on arm64 and x86_64 vms with 4.15, 5.4 and the latest upstream kernel and makedumpfile works fine. Cheers, Ioanna On Thu, Sep 10, 2020 at 9:42 PM Bhupesh SHARMA <bhupesh.linux@xxxxxxxxx> wrote: > > Hello Ioanna, > > Thanks for the patch. I am partially at blame here (and also for > top-posting here) as this failure is caused due to the flipped VA > address space support we have on arm64 architecture now with newer > kernels (>= 5.4.0) due to the addition of larger VA addressing space > features (52-bit). > > I had sent out a v4 series to fix this issue several months back (see > <https://www.spinics.net/lists/kexec/msg23850.html>) and I was > supposed to send an update for the same (v5), but the kernel patches > (for variable export to vmcoreinfo) took a longer time to get accepted > upstream. > > I have shared the updated v5 version earlier today (see > <http://lists.infradead.org/pipermail/kexec/2020-September/021333.html>). > Can you please try the same and share your testing inputs. > > Thanks, > Bhupesh > > > > > On Thu, Sep 10, 2020 at 6:25 AM Ioanna Alifieraki > <ioanna-maria.alifieraki@xxxxxxxxxxxxx> wrote: > > > > Currently makedumpfile fails on arm64 for 5.4 and newer kernels with > > the following : > > > > [9.595476] kdump-tools[513]: Starting kdump-tools: > > [9.597988] kdump-tools[519]: * running makedumpfile -c -d 31 /proc/vmcore /var/crash/202009011332/dump-incomplete > > [9.636915] kdump-tools[537]: calculate_plat_config: PAGE SIZE 0x1000 and VA Bits 47 not supported > > [9.639652] kdump-tools[537]: get_machdep_info_arm64: Can't determine platform config values > > [9.642085] kdump-tools[537]: makedumpfile Failed. > > [9.643064] kdump-tools[519]: * kdump-tools: makedumpfile failed, falling back to 'cp' > > > > The problem starts at get_versiondep_info_arm64 function. > > This functions uses _stext to calculate the va_bits. > > Up to 5.3 kernels the _stext would be ffff000010081000. > > After commit 14c127c957c1c607 (arm64: mm: Flip kernel VA space), > > _stext is ffff800010081000 which ends up the va_bits getting the value > > of 47, even though the kernel configuration is 48 bits. > > Now _stext has contiguous bits ffff8 and matches the 47 bits > > while in the past it had ffff0 that would match the 48 bits. > > The va_bits variable is already exported in vmcoreinfo and therefore > > that could be solved by reading the value from there > > (va_bits = NUMBER(VA_BITS)) instead of relying on _stext. > > However, if we do so, the page_offset is not calculated properly. > > Currently : > > info->page_offset = (0xffffffffffffffffUL) << (va_bits - 1); > > The page_offset still depends on the _stext value. > > So read the va_bits from vmcoreinfo and keep the old logic of calculating > > va_bits to calculate page_offset (calc_page_offset_variable). > > > > Signed-off-by: Ioanna Alifieraki <ioanna-maria.alifieraki@xxxxxxxxxxxxx> > > --- > > arch/arm64.c | 18 +++++++++++------- > > 1 file changed, 11 insertions(+), 7 deletions(-) > > > > diff --git a/arch/arm64.c b/arch/arm64.c > > index 54d60b4..2b0fca3 100644 > > --- a/arch/arm64.c > > +++ b/arch/arm64.c > > @@ -290,6 +290,7 @@ int > > get_versiondep_info_arm64(void) > > { > > ulong _stext; > > + int calc_page_offset; > > > > _stext = get_stext_symbol(); > > if (!_stext) { > > @@ -297,25 +298,28 @@ get_versiondep_info_arm64(void) > > return FALSE; > > } > > > > + va_bits = NUMBER(VA_BITS); > > + > > /* Derive va_bits as per arch/arm64/Kconfig */ > > if ((_stext & PAGE_OFFSET_36) == PAGE_OFFSET_36) { > > - va_bits = 36; > > + calc_page_offset = 36; > > } else if ((_stext & PAGE_OFFSET_39) == PAGE_OFFSET_39) { > > - va_bits = 39; > > + calc_page_offset = 39; > > } else if ((_stext & PAGE_OFFSET_42) == PAGE_OFFSET_42) { > > - va_bits = 42; > > + calc_page_offset = 42; > > } else if ((_stext & PAGE_OFFSET_47) == PAGE_OFFSET_47) { > > - va_bits = 47; > > + calc_page_offset = 47; > > } else if ((_stext & PAGE_OFFSET_48) == PAGE_OFFSET_48) { > > - va_bits = 48; > > + calc_page_offset = 48; > > } else { > > - ERRMSG("Cannot find a proper _stext for calculating VA_BITS\n"); > > + ERRMSG("Cannot find a proper _stext for calculating page_offset\n"); > > return FALSE; > > } > > > > - info->page_offset = (0xffffffffffffffffUL) << (va_bits - 1); > > + info->page_offset = (0xffffffffffffffffUL) << (calc_page_offset - 1); > > > > DEBUG_MSG("va_bits : %d\n", va_bits); > > + DEBUG_MSG("calc_page_offset : %d\n", calc_page_offset); > > DEBUG_MSG("page_offset : %lx\n", info->page_offset); > > > > return TRUE; > > -- > > 2.17.1 > > > > > > _______________________________________________ > > kexec mailing list > > kexec@xxxxxxxxxxxxxxxxxxx > > http://lists.infradead.org/mailman/listinfo/kexec _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec