----- "Michael Holzheu" <holzheu@xxxxxxxxxxxxxxxxxx> wrote: > Hi Dave, > > I tested my patch and it worked. But it only worked by chance. I read > the address using readmem(cpu_mask_size) in combination with ULONG(), > which is nonsense. > > So the correct (and tested) version would be something like: > > static ulong > get_cpu_map_addr_from_mask(const char *type) > { > char cpu_mask_symbol[32]; > ulong cpu_map_addr; > > sprintf(cpu_mask_symbol, "cpu_%s_mask", type); > > if (!symbol_exists(cpu_mask_symbol)) > return 0; > > get_symbol_data(cpu_mask_symbol, sizeof(ulong), &cpu_map_addr); > return cpu_map_addr; > } OK good -- I'll probably just fold the above into cpu_map_addr(). Also, this change, although it doesn't break things, doesn't make sense because this instance of "cpu_online_map" is a symbol in the xen hypervisor binary, i.e., not the one in the vmlinux code: --- crash-4.0-8.9.orig/xen_hyper.c +++ crash-4.0-8.9/xen_hyper.c @@ -1815,7 +1815,7 @@ xen_hyper_get_cpu_info(void) error(FATAL, "cannot malloc cpumask space.\n"); } /* kakuma: It may be better to use cpu_present_map. */ - addr = symbol_value("cpu_online_map"); + addr = cpu_map_addr("online"); if (!readmem(addr, KVADDR, xht->cpumask, XEN_HYPER_SIZE(cpumask_t), "cpu_online_map", RETURN_ON_ERROR)) { error(FATAL, "cannot read cpu_online_map.\n"); Thanks, Dave -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility