On Tue, Jun 29, 2021 at 10:13 AM HAGIO KAZUHITO(萩尾 一仁) <k-hagio-ab@xxxxxxx> wrote: > > -----Original Message----- > > Kernel commit 5c83511bdb9832c86be20fb86b783356e2f58062 removed > > pv_init_ops, and later commit 054ac8ad5ebe4a69e1f0e842483821ddbe560121 > > removed the Xen-specific paravirt patch function. As a result, pvops Xen > > dumps are no longer recognized as Xen dumps, and virtual-to-physical > > translation fails. > > > > Use the value of xen_start_info to determine whether the kernel is > > running in Xen PV mode. This pointer is set during the initialization of > > a PV domain. Kudos to Juergen Gross, who suggested this check. > > > > Signed-off-by: Petr Tesarik <ptesarik@xxxxxxxx> > > Thank you, the patch looks good to me. > > Acked-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx> > > Lianbo, the patch needs some space adjustment to apply, here is a > modified patch: > https://github.com/k-hagio/crash/commit/a7d5cd4169a994b1faa1f646c149d1f54e9dfefd.patch > Looks good. Thanks. Acked-by: Lianbo Jiang <lijiang@xxxxxxxxxx> > Kazu > > > --- > > kernel.c | 34 ++++++++++++++++++++++++++++------ > > 1 file changed, 28 insertions(+), 6 deletions(-) > > > > diff --git a/kernel.c b/kernel.c > > index e123f76..36fdea2 100644 > > --- a/kernel.c > > +++ b/kernel.c > > @@ -95,6 +95,7 @@ static ulong __dump_audit(char *); > > static void dump_audit(void); > > static char *vmcoreinfo_read_string(const char *); > > static void check_vmcoreinfo(void); > > +static int is_pvops_xen(void); > > > > > > /* > > @@ -109,7 +110,6 @@ kernel_init() > > char *rqstruct; > > char *rq_timestamp_name = NULL; > > char *irq_desc_type_name; > > - ulong pv_init_ops; > > struct gnu_request req; > > > > if (pc->flags & KERNEL_DEBUG_QUERY) > > @@ -169,11 +169,7 @@ kernel_init() > > error(FATAL, "cannot malloc m2p page."); > > } > > > > - if (PVOPS() && symbol_exists("pv_init_ops") && > > - readmem(symbol_value("pv_init_ops"), KVADDR, &pv_init_ops, > > - sizeof(void *), "pv_init_ops", RETURN_ON_ERROR) && > > - ((p1 = value_symbol(pv_init_ops)) && > > - (STREQ(p1, "xen_patch") || STREQ(p1, "paravirt_patch_default")))) { > > + if (is_pvops_xen()) { > > kt->flags |= ARCH_XEN | ARCH_PVOPS_XEN; > > kt->xen_flags |= WRITABLE_PAGE_TABLES; > > if (machine_type("X86")) > > @@ -10709,6 +10705,32 @@ paravirt_init(void) > > } > > } > > > > +static int > > +is_pvops_xen(void) > > +{ > > + ulong addr; > > + char *sym; > > + > > + if (!PVOPS()) > > + return FALSE; > > + > > + if (symbol_exists("pv_init_ops") && > > + readmem(symbol_value("pv_init_ops"), KVADDR, &addr, > > + sizeof(void *), "pv_init_ops", RETURN_ON_ERROR) && > > + (sym = value_symbol(addr)) && > > + (STREQ(sym, "xen_patch") || > > + STREQ(sym, "paravirt_patch_default"))) > > + return TRUE; > > + > > + if (symbol_exists("xen_start_info") && > > + readmem(symbol_value("xen_start_info"), KVADDR, &addr, > > + sizeof(void *), "xen_start_info", RETURN_ON_ERROR) && > > + addr != 0) > > + return TRUE; > > + > > + return FALSE; > > +} > > + > > /* > > * Get the kernel's xtime timespec from its relevant location. > > */ > > > > > > -- > > Crash-utility mailing list > > Crash-utility@xxxxxxxxxx > > https://listman.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility