From: Paul Mackerras 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 Signed-off-by: Paul Mackerras Signed-off-by: Andrew Morton --- 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 } _