diff options
author | Anton Blanchard <anton@samba.org> | 2014-03-10 20:54:06 -0400 |
---|---|---|
committer | Anton Blanchard <anton@samba.org> | 2014-04-22 20:05:26 -0400 |
commit | 2751b628c97e66e61f482935ca59148751972941 (patch) | |
tree | 86ef576395f448da30512daea224c1f1bf258807 /arch/powerpc/platforms/powernv | |
parent | d51959d70ffc55d1c829e881a6121e6fbbfb29af (diff) |
powerpc: Fix SMP issues with ppc64le ABIv2
There is no need to put a function descriptor in
__secondary_hold_spinloop. Use ppc_function_entry to get the
instruction address and put it in __secondary_hold_spinloop instead.
Also fix an issue where we assumed cur_cpu_spec held a function
descriptor.
Signed-off-by: Anton Blanchard <anton@samba.org>
Diffstat (limited to 'arch/powerpc/platforms/powernv')
-rw-r--r-- | arch/powerpc/platforms/powernv/smp.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/powernv/smp.c b/arch/powerpc/platforms/powernv/smp.c index 908672bdcea6..b370b86263a6 100644 --- a/arch/powerpc/platforms/powernv/smp.c +++ b/arch/powerpc/platforms/powernv/smp.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <asm/cputhreads.h> | 30 | #include <asm/cputhreads.h> |
31 | #include <asm/xics.h> | 31 | #include <asm/xics.h> |
32 | #include <asm/opal.h> | 32 | #include <asm/opal.h> |
33 | #include <asm/code-patching.h> | ||
33 | 34 | ||
34 | #include "powernv.h" | 35 | #include "powernv.h" |
35 | 36 | ||
@@ -49,8 +50,8 @@ static void pnv_smp_setup_cpu(int cpu) | |||
49 | int pnv_smp_kick_cpu(int nr) | 50 | int pnv_smp_kick_cpu(int nr) |
50 | { | 51 | { |
51 | unsigned int pcpu = get_hard_smp_processor_id(nr); | 52 | unsigned int pcpu = get_hard_smp_processor_id(nr); |
52 | unsigned long start_here = __pa(*((unsigned long *) | 53 | unsigned long start_here = |
53 | generic_secondary_smp_init)); | 54 | __pa(ppc_function_entry(generic_secondary_smp_init)); |
54 | long rc; | 55 | long rc; |
55 | 56 | ||
56 | BUG_ON(nr < 0 || nr >= NR_CPUS); | 57 | BUG_ON(nr < 0 || nr >= NR_CPUS); |