diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2013-04-22 22:14:51 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-04-24 00:22:30 -0400 |
commit | 51e0eaf98d48dc6fc385d1aee9e208afe3ce0cf1 (patch) | |
tree | 79257ef6913b428f833ec91d5d242f3fe60aaed8 | |
parent | 973e2abd15326114ff9a099d6dfe0ef6be6fc7e6 (diff) |
powerpc/cell: Only iterate over online nodes in cbe_init_pm_irq()
None of the cell platforms support CPU hotplug, so we should iterate
only over online nodes when setting PMU interrupts.
This also fixes a warning during boot when NODES_SHIFT is large enough:
WARNING: at /scratch/michael/src/kmk/linus/kernel/irq/irqdomain.c:766
...
NIP [c0000000000db278] .irq_linear_revmap+0x30/0x58
LR [c0000000000dc2a0] .irq_create_mapping+0x38/0x1a8
Call Trace:
[c0000003fc9c3af0] [c0000000000dc2a0] .irq_create_mapping+0x38/0x1a8 (unreliable)
[c0000003fc9c3b80] [c000000000655c1c] .__machine_initcall_cell_cbe_init_pm_irq+0x84/0x158
[c0000003fc9c3c20] [c00000000000afb4] .do_one_initcall+0x5c/0x1e0
[c0000003fc9c3cd0] [c000000000644580] .kernel_init_freeable+0x238/0x328
[c0000003fc9c3db0] [c00000000000b784] .kernel_init+0x1c/0x120
[c0000003fc9c3e30] [c000000000009fb8] .ret_from_kernel_thread+0x64/0xac
This is caused by us overflowing our linear revmap because we're
requesting too many interrupts.
Reported-by: Dennis Schridde <devurandom@gmx.net>
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/platforms/cell/pmu.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/cell/pmu.c b/arch/powerpc/platforms/cell/pmu.c index 59c1a1694104..348a27b12512 100644 --- a/arch/powerpc/platforms/cell/pmu.c +++ b/arch/powerpc/platforms/cell/pmu.c | |||
@@ -382,7 +382,7 @@ static int __init cbe_init_pm_irq(void) | |||
382 | unsigned int irq; | 382 | unsigned int irq; |
383 | int rc, node; | 383 | int rc, node; |
384 | 384 | ||
385 | for_each_node(node) { | 385 | for_each_online_node(node) { |
386 | irq = irq_create_mapping(NULL, IIC_IRQ_IOEX_PMI | | 386 | irq = irq_create_mapping(NULL, IIC_IRQ_IOEX_PMI | |
387 | (node << IIC_IRQ_NODE_SHIFT)); | 387 | (node << IIC_IRQ_NODE_SHIFT)); |
388 | if (irq == NO_IRQ) { | 388 | if (irq == NO_IRQ) { |