[Crash-utility] [PATCH] Fix reading x86_64 xendump cores on 2.6.27+
Dave Anderson
anderson at redhat.com
Fri Jun 18 14:56:22 UTC 2010
----- "Petr Tesarik" <ptesarik at suse.cz> 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 at suse.cz>
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 at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
More information about the Crash-utility
mailing list