aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2004-08-22 22:29:56 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-08-22 22:29:56 -0700
commit04aff4bab0954141401ee3a60e8036c2f3377de9 (patch)
tree3c9e3533403f14a1fcd40ba812c4135ab5efa027 /arch
parent1092beac4e840cd4a11fe0c2eecb1103404a8b86 (diff)
downloadhistory-04aff4bab0954141401ee3a60e8036c2f3377de9.tar.gz
[PATCH] ppc64: use platform numbering of cpus for hypervisor calls.
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> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/ppc64/kernel/smp.c4
-rw-r--r--arch/ppc64/lib/locks.c6
2 files changed, 6 insertions, 4 deletions
diff --git a/arch/ppc64/kernel/smp.c b/arch/ppc64/kernel/smp.c
index 99bb6ab11d9e14..514b0ef6c6c523 100644
--- a/arch/ppc64/kernel/smp.c
+++ b/arch/ppc64/kernel/smp.c
@@ -487,11 +487,11 @@ static void __init smp_space_timers(unsigned int max_cpus)
#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 --git a/arch/ppc64/lib/locks.c b/arch/ppc64/lib/locks.c
index 58e973cc8f57a2..703118d6a1ef4c 100644
--- a/arch/ppc64/lib/locks.c
+++ b/arch/ppc64/lib/locks.c
@@ -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
}