Nikola, Looks good -- patches are queued for crash-7.2.1: https://github.com/crash-utility/crash/commit/e4499a9de664826b0db2f650684959c2f3f9998c Thanks, Dave ----- Original Message ----- > Since Xen commit 666aca08175b ("sched: use the auto-generated list of > schedulers") crash cannot open Xen vmcores, because symbol 'schedulers' > does not exits. Xen 4.7 implemented schedulers as its own section. > > xen/arch/x86/xen.lds.S > __start_schedulers_array = .; > *(.data.schedulers) > __end_schedulers_array = .; > > Crash must not look up for "schedulers" symbol and fails, if symbol is > not found. It must check if __start_schedulers_array exits, and if it > does, use it and get size of the section. Otherwise, crash fallback to > looking up "schedulers" symbol. That way, crash can open vmcore before > and after Xen 4.7. > > Signed-off-by: Nikola Pajkovsky <npajkovsky@xxxxxxx> > --- > xen_hyper.c | 25 +++++++++++++++++++++++-- > 1 file changed, 23 insertions(+), 2 deletions(-) > > diff --git a/xen_hyper.c b/xen_hyper.c > index 479aa1acfd43..2a42e44b1f70 100644 > --- a/xen_hyper.c > +++ b/xen_hyper.c > @@ -437,6 +437,16 @@ xen_hyper_misc_init(void) > */ > #define XEN_HYPER_SCHEDULER_NAME 1024 > > +static int section_size(char *start_section, char *end_section) > +{ > + ulong sp_start, sp_end; > + > + sp_start = symbol_value(start_section); > + sp_end = symbol_value(end_section); > + > + return (sp_end - sp_start) / sizeof(long); > +} > + > static void > xen_hyper_schedule_init(void) > { > @@ -448,6 +458,7 @@ xen_hyper_schedule_init(void) > char *buf; > char opt_name_buf[XEN_HYPER_OPT_SCHED_SIZE]; > int i, cpuid, flag; > + char *sp_name; > > /* get scheduler information */ > if((xhscht->scheduler_struct = > @@ -469,9 +480,19 @@ xen_hyper_schedule_init(void) > XEN_HYPER_OPT_SCHED_SIZE, "opt_sched,", RETURN_ON_ERROR)) { > error(FATAL, "cannot read opt_sched,.\n"); > } > - nr_schedulers = get_array_length("schedulers", 0, 0); > + > + /* symbol exists since Xen 4.7 */ > + if (symbol_exists("__start_schedulers_array")) { > + sp_name = "__start_schedulers_array"; > + nr_schedulers = section_size("__start_schedulers_array", > + "__end_schedulers_array"); > + } else { > + sp_name = "schedulers"; > + nr_schedulers = get_array_length("schedulers", 0, 0); > + } > + > schedulers_buf = (long *)GETBUF(nr_schedulers * sizeof(long)); > - schedulers = symbol_value("schedulers"); > + schedulers = symbol_value(sp_name); > addr = schedulers; > while (xhscht->name == NULL) { > if (!readmem(addr, KVADDR, schedulers_buf, > -- > 2.13.6 > > -- > 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