Message ID | 1376687156-6737-14-git-send-email-julien.grall@linaro.org |
---|---|
State | Superseded, archived |
Headers | show |
On Fri, 2013-08-16 at 22:05 +0100, Julien Grall wrote: > 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>
diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 8a5bfc3..6bdab14 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -439,6 +439,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); }
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> --- xen/common/device_tree.c | 7 +++++++ 1 file changed, 7 insertions(+)