aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common
diff options
context:
space:
mode:
authorJulien Grall <julien.grall@linaro.org>2013-09-13 13:49:15 +0100
committerIan Campbell <ian.campbell@citrix.com>2013-09-17 15:28:08 +0100
commit7a35c108b35b7e008e5a2bf521b24515c5f8a910 (patch)
tree70104c96e614726f4d0f468358849e16239ad128 /xen/common
parent1fccdfce51ec3367515f73c59765611ed67e747b (diff)
downloadxen-7a35c108b35b7e008e5a2bf521b24515c5f8a910.tar.gz
xen-7a35c108b35b7e008e5a2bf521b24515c5f8a910.tar.bz2
xen-7a35c108b35b7e008e5a2bf521b24515c5f8a910.zip
xen/dts: Check the CPU ID is not greater than NR_CPUS
On some board CPU IDs are not contiguous (for instance the Versatile Express with big.LITTLE supports). If the CPU ID is greater than NR_CPUS Xen will hang without any message. This is because console driver is not yet initialized and hypervisor data abort uses printk. For the moment check the CPU ID and print an warning if an error occured. Signed-off-by: Julien Grall <julien.grall@linaro.org> Acked-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'xen/common')
-rw-r--r--xen/common/device_tree.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c
index 9d300ecb8f..d2262ce31f 100644
--- a/xen/common/device_tree.c
+++ b/xen/common/device_tree.c
@@ -445,6 +445,13 @@ static void __init process_cpu_node(const void *fdt, int node,
cpuid = dt_read_number((const __be32 *)prop->data, 1);
+ /* TODO: handle non-contiguous CPU ID */
+ if ( cpuid >= NR_CPUS )
+ {
+ dt_printk("fdt: node `%s': reg(0x%x) >= NR_CPUS(%d)\n",
+ name, cpuid, NR_CPUS);
+ return;
+ }
cpumask_set_cpu(cpuid, &cpu_possible_map);
}