Newer Xen versions (at least 4.2) clear cpu_online_map during crash.
In this case it is not possible to check which CPUs were available.
cpu_present_map contains such information but it has different meaning.
However, we do not have a choice and we must use cpu_present_map instead
of cpu_online_map.
Signed-off-by: Daniel Kiper <daniel.kiper(a)oracle.com>
diff -Npru crash-6.1.0.orig/xen_hyper.c crash-6.1.0/xen_hyper.c
--- crash-6.1.0.orig/xen_hyper.c 2012-11-13 15:08:41.000000000 +0100
+++ crash-6.1.0/xen_hyper.c 2012-11-13 15:09:03.000000000 +0100
@@ -1912,11 +1912,10 @@ xen_hyper_get_cpu_info(void)
if((xht->cpumask = malloc(XEN_HYPER_SIZE(cpumask_t))) == NULL) {
error(FATAL, "cannot malloc cpumask space.\n");
}
- /* kakuma: It may be better to use cpu_present_map. */
- addr = symbol_value("cpu_online_map");
+ addr = symbol_value("cpu_present_map");
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");
+ XEN_HYPER_SIZE(cpumask_t), "cpu_present_map", RETURN_ON_ERROR)) {
+ error(FATAL, "cannot read cpu_present_map.\n");
}
if (xht->cpu_idxs) {
free(xht->cpu_idxs);