diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2006-10-10 01:14:12 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-10-16 01:52:14 -0400 |
commit | e5267b4b376cfbdc4518abcc68d5a7fffb505638 (patch) | |
tree | 7f11392c3dae58cdc21f2afb807c95f8f72ad563 /arch/powerpc | |
parent | 51018b0a3160d253283173c2f54f16746cee5852 (diff) |
[POWERPC] Don't crash on cell with 2 BEs when !CONFIG_NUMA
The SPU code will crash if CONFIG_NUMA is not set and SPUs are found on
a non-0 node. This workaround will ignore those SPEs and just print an
message in the kernel log.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/platforms/cell/spu_base.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index ccfd0c4db874..d0fb959e3ef1 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -781,6 +781,17 @@ static int __init create_spu(struct device_node *spe) | |||
781 | if (!spu) | 781 | if (!spu) |
782 | goto out; | 782 | goto out; |
783 | 783 | ||
784 | spu->node = find_spu_node_id(spe); | ||
785 | if (spu->node >= MAX_NUMNODES) { | ||
786 | printk(KERN_WARNING "SPE %s on node %d ignored," | ||
787 | " node number too big\n", spe->full_name, spu->node); | ||
788 | printk(KERN_WARNING "Check if CONFIG_NUMA is enabled.\n"); | ||
789 | return -ENODEV; | ||
790 | } | ||
791 | spu->nid = of_node_to_nid(spe); | ||
792 | if (spu->nid == -1) | ||
793 | spu->nid = 0; | ||
794 | |||
784 | ret = spu_map_device(spu, spe); | 795 | ret = spu_map_device(spu, spe); |
785 | /* try old method */ | 796 | /* try old method */ |
786 | if (ret) | 797 | if (ret) |
@@ -788,10 +799,6 @@ static int __init create_spu(struct device_node *spe) | |||
788 | if (ret) | 799 | if (ret) |
789 | goto out_free; | 800 | goto out_free; |
790 | 801 | ||
791 | spu->node = find_spu_node_id(spe); | ||
792 | spu->nid = of_node_to_nid(spe); | ||
793 | if (spu->nid == -1) | ||
794 | spu->nid = 0; | ||
795 | ret = spu_map_interrupts(spu, spe); | 802 | ret = spu_map_interrupts(spu, spe); |
796 | if (ret) | 803 | if (ret) |
797 | ret = spu_map_interrupts_old(spu, spe); | 804 | ret = spu_map_interrupts_old(spu, spe); |