From: Paul Mackerras <paulus@samba.org>

We were using Linux's cpu numbering for cpu-related hypervisor calls (e.g. 
vpa registration, H_CONFER).  It happened to work most of the time because
Linux and the hypervisor usually, but not always, have the same numbering
for cpus.

Signed-off-by: Nathan Lynch <nathanl@austin.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/ppc64/kernel/smp.c |    4 ++--
 25-akpm/arch/ppc64/lib/locks.c  |    6 ++++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff -puN arch/ppc64/kernel/smp.c~ppc64-1-4-use-platform-numbering-of-cpus-for-hypervisor-calls arch/ppc64/kernel/smp.c
--- 25/arch/ppc64/kernel/smp.c~ppc64-1-4-use-platform-numbering-of-cpus-for-hypervisor-calls	2004-08-15 15:16:12.988616504 -0700
+++ 25-akpm/arch/ppc64/kernel/smp.c	2004-08-15 15:16:15.016308248 -0700
@@ -487,11 +487,11 @@ static void __init smp_space_timers(unsi
 #ifdef CONFIG_PPC_PSERIES
 void vpa_init(int cpu)
 {
-	unsigned long flags;
+	unsigned long flags, pcpu = get_hard_smp_processor_id(cpu);
 
 	/* Register the Virtual Processor Area (VPA) */
 	flags = 1UL << (63 - 18);
-	register_vpa(flags, cpu, __pa((unsigned long)&(paca[cpu].lppaca)));
+	register_vpa(flags, pcpu, __pa((unsigned long)&(paca[cpu].lppaca)));
 }
 
 static inline void smp_xics_do_message(int cpu, int msg)
diff -puN arch/ppc64/lib/locks.c~ppc64-1-4-use-platform-numbering-of-cpus-for-hypervisor-calls arch/ppc64/lib/locks.c
--- 25/arch/ppc64/lib/locks.c~ppc64-1-4-use-platform-numbering-of-cpus-for-hypervisor-calls	2004-08-15 15:16:12.989616352 -0700
+++ 25-akpm/arch/ppc64/lib/locks.c	2004-08-15 15:16:12.994615592 -0700
@@ -63,7 +63,8 @@ void __spin_yield(spinlock_t *lock)
 	HvCall2(HvCallBaseYieldProcessor, HvCall_YieldToProc,
 		((u64)holder_cpu << 32) | yield_count);
 #else
-	plpar_hcall_norets(H_CONFER, holder_cpu, yield_count);
+	plpar_hcall_norets(H_CONFER, get_hard_smp_processor_id(holder_cpu),
+			   yield_count);
 #endif
 }
 
@@ -179,7 +180,8 @@ void __rw_yield(rwlock_t *rw)
 	HvCall2(HvCallBaseYieldProcessor, HvCall_YieldToProc,
 		((u64)holder_cpu << 32) | yield_count);
 #else
-	plpar_hcall_norets(H_CONFER, holder_cpu, yield_count);
+	plpar_hcall_norets(H_CONFER, get_hard_smp_processor_id(holder_cpu),
+			   yield_count);
 #endif
 }
 
_