summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2014-05-15 14:35:19 +0200
committerScott Wood <scottwood@freescale.com>2014-05-23 01:08:33 +0200
commit8cb59788b342903f2912ecef0df4aaadd12e5843 (patch)
treed63565a385f7a8fae62845b4182768169f3a6208
parentpowerpc/mpc85xx: Add BSC9132 QDS Support (diff)
downloadlinux-8cb59788b342903f2912ecef0df4aaadd12e5843.tar.xz
linux-8cb59788b342903f2912ecef0df4aaadd12e5843.zip
PPC: ePAPR: Fix hypercall on LE guest
We get an array of instructions from the hypervisor via device tree that we write into a buffer that gets executed whenever we want to make an ePAPR compliant hypercall. However, the hypervisor passes us these instructions in BE order which we have to manually convert to LE when we want to run them in LE mode. With this fixup in place, I can successfully run LE kernels with KVM PV enabled on PR KVM. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Scott Wood <scottwood@freescale.com>
-rw-r--r--arch/powerpc/kernel/epapr_paravirt.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/epapr_paravirt.c b/arch/powerpc/kernel/epapr_paravirt.c
index c47fed009163..2d7eeae5b4d0 100644
--- a/arch/powerpc/kernel/epapr_paravirt.c
+++ b/arch/powerpc/kernel/epapr_paravirt.c
@@ -48,9 +48,10 @@ static int __init early_init_dt_scan_epapr(unsigned long node,
return -1;
for (i = 0; i < (len / 4); i++) {
- patch_instruction(epapr_hypercall_start + i, insts[i]);
+ u32 inst = be32_to_cpu(insts[i]);
+ patch_instruction(epapr_hypercall_start + i, inst);
#if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
- patch_instruction(epapr_ev_idle_start + i, insts[i]);
+ patch_instruction(epapr_ev_idle_start + i, inst);
#endif
}