Commit 228b607d authored by Marcus Comstedt's avatar Marcus Comstedt Committed by Michael Ellerman

KVM: PPC: Book3S HV: Fix regression on big endian hosts

VCPU_CR is the offset of arch.regs.ccr in kvm_vcpu.
arch/powerpc/include/asm/kvm_host.h defines arch.regs as a struct
pt_regs, and arch/powerpc/include/asm/ptrace.h defines the ccr field
of pt_regs as "unsigned long ccr".  Since unsigned long is 64 bits, a
64-bit load needs to be used to load it, unless an endianness specific
correction offset is added to access the desired subpart.  In this
case there is no reason to _not_ use a 64 bit load though.

Fixes: 6c85b7bc ("powerpc/kvm: Use UV_RETURN ucall to return to ultravisor")
Cc: stable@vger.kernel.org # v5.4+
Signed-off-by: default avatarMarcus Comstedt <marcus@mc.pp.se>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20191215094900.46740-1-marcus@mc.pp.se
parent 61e3acd8
...@@ -1117,7 +1117,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300) ...@@ -1117,7 +1117,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
ld r7, VCPU_GPR(R7)(r4) ld r7, VCPU_GPR(R7)(r4)
bne ret_to_ultra bne ret_to_ultra
lwz r0, VCPU_CR(r4) ld r0, VCPU_CR(r4)
mtcr r0 mtcr r0
ld r0, VCPU_GPR(R0)(r4) ld r0, VCPU_GPR(R0)(r4)
...@@ -1137,7 +1137,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300) ...@@ -1137,7 +1137,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
* R3 = UV_RETURN * R3 = UV_RETURN
*/ */
ret_to_ultra: ret_to_ultra:
lwz r0, VCPU_CR(r4) ld r0, VCPU_CR(r4)
mtcr r0 mtcr r0
ld r0, VCPU_GPR(R3)(r4) ld r0, VCPU_GPR(R3)(r4)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment