----- "Petr Tesarik" <ptesarik@xxxxxxx> wrote: > Hi, > > the crash utility is unable to read xendump cores from kernel versions > 2.6.27 or newer. Bernhard fixed this only for kdump Xen cores. > > With 2.6.27 and newer kernels, the max_pfn symbol should be used > to get the highest PFN in the system. However, xendump code still > tries to use end_pfn. Without the patch, early initialization > fails with the error message: "crash: cannot resolve "end_pfn". > > Signed-off-by: Petr Tesarik <ptesarik@xxxxxxx> Looks good to me -- queued for next release. Thanks, Dave > > --- > x86_64.c | 22 ++++++++++++++++++++-- > 1 file changed, 20 insertions(+), 2 deletions(-) > > --- a/x86_64.c > +++ b/x86_64.c > @@ -4851,6 +4851,7 @@ x86_64_xen_kdump_p2m_create(struct xen_k > ulong frames; > ulong frame_mfn[MAX_X86_64_FRAMES] = { 0 }; > int mfns[MAX_X86_64_FRAMES] = { 0 }; > + struct syment *sp; > > /* > * Temporarily read physical (machine) addresses from vmcore > by > @@ -4932,7 +4933,15 @@ use_cr3: > x86_64_debug_dump_page(fp, machdep->machspec->pml4, > "contents of PML4 page:"); > > - kvaddr = symbol_value("end_pfn"); > + /* > + * kernel version < 2.6.27 => end_pfn > + * kernel version >= 2.6.27 => max_pfn > + */ > + if ((sp = symbol_search("end_pfn"))) > + kvaddr = sp->value; > + else > + kvaddr = symbol_value("max_pfn"); > + > if (!x86_64_xen_kdump_load_page(kvaddr, xkd->page)) > return FALSE; > up = (ulong *)(xkd->page + PAGEOFFSET(kvaddr)); > @@ -5262,6 +5271,7 @@ x86_64_xendump_p2m_create(struct xendump > ulong mfn, kvaddr, ctrlreg[8], ctrlreg_offset; > ulong *up; > off_t offset; > + struct syment *sp; > > if (!symbol_exists("phys_to_machine_mapping")) { > xd->flags |= XC_CORE_NO_P2M; > @@ -5299,7 +5309,15 @@ x86_64_xendump_p2m_create(struct xendump > x86_64_debug_dump_page(xd->ofp, machdep->machspec->pml4, > "contents of PML4 page:"); > > - kvaddr = symbol_value("end_pfn"); > + /* > + * kernel version < 2.6.27 => end_pfn > + * kernel version >= 2.6.27 => max_pfn > + */ > + if ((sp = symbol_search("end_pfn"))) > + kvaddr = sp->value; > + else > + kvaddr = symbol_value("max_pfn"); > + > if (!x86_64_xendump_load_page(kvaddr, xd)) > return FALSE; > > > > -- > Crash-utility mailing list > Crash-utility@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility