aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2016-09-05 23:43:45 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2016-09-06 00:54:45 -0400
commitf8e33475b0da98c4bffc91017a3fbbfb443a7bdb (patch)
treeb781bd8b167912f3aa1a44c5319ae6035ec2952a
parentd81d8258218228d3137055afe8acf981c3ebed46 (diff)
powerpc/xics/opal: Fix processor numbers in OPAL ICP
When using the OPAL ICP backend we incorrectly pass Linux CPU numbers rather than HW CPU numbers to OPAL. Fixes: d74361881f0d ("powerpc/xics: Add ICP OPAL backend") Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r--arch/powerpc/sysdev/xics/icp-opal.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/powerpc/sysdev/xics/icp-opal.c b/arch/powerpc/sysdev/xics/icp-opal.c
index 57d72f10a97f..9114243fa1b5 100644
--- a/arch/powerpc/sysdev/xics/icp-opal.c
+++ b/arch/powerpc/sysdev/xics/icp-opal.c
@@ -23,10 +23,10 @@
23 23
24static void icp_opal_teardown_cpu(void) 24static void icp_opal_teardown_cpu(void)
25{ 25{
26 int cpu = smp_processor_id(); 26 int hw_cpu = hard_smp_processor_id();
27 27
28 /* Clear any pending IPI */ 28 /* Clear any pending IPI */
29 opal_int_set_mfrr(cpu, 0xff); 29 opal_int_set_mfrr(hw_cpu, 0xff);
30} 30}
31 31
32static void icp_opal_flush_ipi(void) 32static void icp_opal_flush_ipi(void)
@@ -101,14 +101,16 @@ static void icp_opal_eoi(struct irq_data *d)
101 101
102static void icp_opal_cause_ipi(int cpu, unsigned long data) 102static void icp_opal_cause_ipi(int cpu, unsigned long data)
103{ 103{
104 opal_int_set_mfrr(cpu, IPI_PRIORITY); 104 int hw_cpu = get_hard_smp_processor_id(cpu);
105
106 opal_int_set_mfrr(hw_cpu, IPI_PRIORITY);
105} 107}
106 108
107static irqreturn_t icp_opal_ipi_action(int irq, void *dev_id) 109static irqreturn_t icp_opal_ipi_action(int irq, void *dev_id)
108{ 110{
109 int cpu = smp_processor_id(); 111 int hw_cpu = hard_smp_processor_id();
110 112
111 opal_int_set_mfrr(cpu, 0xff); 113 opal_int_set_mfrr(hw_cpu, 0xff);
112 114
113 return smp_ipi_demux(); 115 return smp_ipi_demux();
114} 116}