aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries/smp.c
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2014-03-10 20:54:06 -0400
committerAnton Blanchard <anton@samba.org>2014-04-22 20:05:26 -0400
commit2751b628c97e66e61f482935ca59148751972941 (patch)
tree86ef576395f448da30512daea224c1f1bf258807 /arch/powerpc/platforms/pseries/smp.c
parentd51959d70ffc55d1c829e881a6121e6fbbfb29af (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/pseries/smp.c')
-rw-r--r--arch/powerpc/platforms/pseries/smp.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c
index 24f58cb0a543..a3555b10c1a5 100644
--- a/arch/powerpc/platforms/pseries/smp.c
+++ b/arch/powerpc/platforms/pseries/smp.c
@@ -44,6 +44,7 @@
44#include <asm/xics.h> 44#include <asm/xics.h>
45#include <asm/dbell.h> 45#include <asm/dbell.h>
46#include <asm/plpar_wrappers.h> 46#include <asm/plpar_wrappers.h>
47#include <asm/code-patching.h>
47 48
48#include "pseries.h" 49#include "pseries.h"
49#include "offline_states.h" 50#include "offline_states.h"
@@ -96,8 +97,8 @@ int smp_query_cpu_stopped(unsigned int pcpu)
96static inline int smp_startup_cpu(unsigned int lcpu) 97static inline int smp_startup_cpu(unsigned int lcpu)
97{ 98{
98 int status; 99 int status;
99 unsigned long start_here = __pa((u32)*((unsigned long *) 100 unsigned long start_here =
100 generic_secondary_smp_init)); 101 __pa(ppc_function_entry(generic_secondary_smp_init));
101 unsigned int pcpu; 102 unsigned int pcpu;
102 int start_cpu; 103 int start_cpu;
103 104