PPC: ePAPR: Fix hypercall on LE guest
authorAlexander Graf <agraf@suse.de>
Thu, 15 May 2014 12:35:19 +0000 (14:35 +0200)
committerScott Wood <scottwood@freescale.com>
Thu, 22 May 2014 23:08:33 +0000 (18:08 -0500)
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>
arch/powerpc/kernel/epapr_paravirt.c

index c47fed009163b2610bc8005875b7f989bca84293..2d7eeae5b4d04d35560a47f4b68a6fac9db68f84 100644 (file)
@@ -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
        }