aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2006-10-10 01:14:12 -0400
committerPaul Mackerras <paulus@samba.org>2006-10-16 01:52:14 -0400
commite5267b4b376cfbdc4518abcc68d5a7fffb505638 (patch)
tree7f11392c3dae58cdc21f2afb807c95f8f72ad563 /arch
parent51018b0a3160d253283173c2f54f16746cee5852 (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')
-rw-r--r--arch/powerpc/platforms/cell/spu_base.c15
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);