diff options
author | Anton Blanchard <anton@samba.org> | 2007-09-30 17:45:55 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-10-01 21:48:14 -0400 |
commit | e48395f1753cab0fde6c03f1db833cece9ef2ba0 (patch) | |
tree | 19d2002053bcb685f43534b41c751416f1bcf7ad /arch | |
parent | 75723957673bfa10c98b735259f891cc79cf0450 (diff) |
[POWERPC] Fix xics set_affinity code
On a POWER6 machine running 2.6.23-rc8 I sometimes see the following error:
xics_set_affinity: No online cpus in the mask 00000000,00000000,00000000,00000001 for irq 20
In a desperate attempt to get a changelog entry in 2.6.23, I took a look
into it.
It turns out we are passing a real and not a virtual irq into
get_irq_server. This works for the case where hwirq < NR_IRQS and we
set virq = hwirq. In my case however hwirq = 590082 and we try and
access irq_desc[590082], slightly past the end at 512 entries.
Lucky we ship lots of memory with our machines.
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/platforms/pseries/xics.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 5bd90a7eb763..f0b5ff17d860 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
@@ -419,7 +419,7 @@ static void xics_set_affinity(unsigned int virq, cpumask_t cpumask) | |||
419 | * For the moment only implement delivery to all cpus or one cpu. | 419 | * For the moment only implement delivery to all cpus or one cpu. |
420 | * Get current irq_server for the given irq | 420 | * Get current irq_server for the given irq |
421 | */ | 421 | */ |
422 | irq_server = get_irq_server(irq, 1); | 422 | irq_server = get_irq_server(virq, 1); |
423 | if (irq_server == -1) { | 423 | if (irq_server == -1) { |
424 | char cpulist[128]; | 424 | char cpulist[128]; |
425 | cpumask_scnprintf(cpulist, sizeof(cpulist), cpumask); | 425 | cpumask_scnprintf(cpulist, sizeof(cpulist), cpumask); |