MIPS: KVM/locore.S: Only preserve callee saved registers
authorJames Hogan <james.hogan@imgtec.com>
Fri, 6 May 2016 13:36:21 +0000 (14:36 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 13 May 2016 12:02:19 +0000 (14:02 +0200)
Update __kvm_mips_vcpu_run() to only save and restore callee saved
registers. It is always called using the standard ABIs, so the caller
will preserve any other registers that need preserving.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/13208/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kvm/locore.S

index 308706493fd5f0950df9b11d5a62c6610a0809d1..3ea522e4954b0c15d38791dffb1cbb0e0cfb9fec 100644 (file)
 FEXPORT(__kvm_mips_vcpu_run)
        /* k0/k1 not being used in host kernel context */
        INT_ADDIU k1, sp, -PT_SIZE
-       LONG_S  $0, PT_R0(k1)
-       LONG_S  $1, PT_R1(k1)
-       LONG_S  $2, PT_R2(k1)
-       LONG_S  $3, PT_R3(k1)
-
-       LONG_S  $4, PT_R4(k1)
-       LONG_S  $5, PT_R5(k1)
-       LONG_S  $6, PT_R6(k1)
-       LONG_S  $7, PT_R7(k1)
-
-       LONG_S  $8,  PT_R8(k1)
-       LONG_S  $9,  PT_R9(k1)
-       LONG_S  $10, PT_R10(k1)
-       LONG_S  $11, PT_R11(k1)
-       LONG_S  $12, PT_R12(k1)
-       LONG_S  $13, PT_R13(k1)
-       LONG_S  $14, PT_R14(k1)
-       LONG_S  $15, PT_R15(k1)
        LONG_S  $16, PT_R16(k1)
        LONG_S  $17, PT_R17(k1)
-
        LONG_S  $18, PT_R18(k1)
        LONG_S  $19, PT_R19(k1)
        LONG_S  $20, PT_R20(k1)
        LONG_S  $21, PT_R21(k1)
        LONG_S  $22, PT_R22(k1)
        LONG_S  $23, PT_R23(k1)
-       LONG_S  $24, PT_R24(k1)
-       LONG_S  $25, PT_R25(k1)
-
-       /*
-        * XXXKYMA k0/k1 not saved, not being used if we got here through
-        * an ioctl()
-        */
 
        LONG_S  $28, PT_R28(k1)
        LONG_S  $29, PT_R29(k1)
@@ -545,10 +519,6 @@ __kvm_mips_return_to_host:
        LONG_L  k0, PT_HOST_USERLOCAL(k1)
        mtc0    k0, CP0_DDATA_LO
 
-       /* Load context saved on the host stack */
-       LONG_L  $0, PT_R0(k1)
-       LONG_L  $1, PT_R1(k1)
-
        /*
         * r2/v0 is the return code, shift it down by 2 (arithmetic)
         * to recover the err code
@@ -556,19 +526,7 @@ __kvm_mips_return_to_host:
        INT_SRA k0, v0, 2
        move    $2, k0
 
-       LONG_L  $3, PT_R3(k1)
-       LONG_L  $4, PT_R4(k1)
-       LONG_L  $5, PT_R5(k1)
-       LONG_L  $6, PT_R6(k1)
-       LONG_L  $7, PT_R7(k1)
-       LONG_L  $8, PT_R8(k1)
-       LONG_L  $9, PT_R9(k1)
-       LONG_L  $10, PT_R10(k1)
-       LONG_L  $11, PT_R11(k1)
-       LONG_L  $12, PT_R12(k1)
-       LONG_L  $13, PT_R13(k1)
-       LONG_L  $14, PT_R14(k1)
-       LONG_L  $15, PT_R15(k1)
+       /* Load context saved on the host stack */
        LONG_L  $16, PT_R16(k1)
        LONG_L  $17, PT_R17(k1)
        LONG_L  $18, PT_R18(k1)
@@ -577,10 +535,6 @@ __kvm_mips_return_to_host:
        LONG_L  $21, PT_R21(k1)
        LONG_L  $22, PT_R22(k1)
        LONG_L  $23, PT_R23(k1)
-       LONG_L  $24, PT_R24(k1)
-       LONG_L  $25, PT_R25(k1)
-
-       /* Host k0/k1 were not saved */
 
        LONG_L  $28, PT_R28(k1)
        LONG_L  $29, PT_R29(k1)