Commit f1b711c6 authored by James Hogan's avatar James Hogan Committed by Ralf Baechle

MIPS: KVM/locore.S: Relax noat

Now that the at register ($1) is no longer saved by
__kvm_mips_vcpu_run(), relax the noat assembler directive so that it
only applies around code where at is restored before entering guest, and
saved after exiting guest.
Signed-off-by: default avatarJames 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/13209/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 1300fcd5
...@@ -48,7 +48,6 @@ ...@@ -48,7 +48,6 @@
* a1: vcpu * a1: vcpu
*/ */
.set noreorder .set noreorder
.set noat
FEXPORT(__kvm_mips_vcpu_run) FEXPORT(__kvm_mips_vcpu_run)
/* k0/k1 not being used in host kernel context */ /* k0/k1 not being used in host kernel context */
...@@ -145,6 +144,7 @@ FEXPORT(__kvm_mips_load_asid) ...@@ -145,6 +144,7 @@ FEXPORT(__kvm_mips_load_asid)
/* Disable RDHWR access */ /* Disable RDHWR access */
mtc0 zero, CP0_HWRENA mtc0 zero, CP0_HWRENA
.set noat
/* Now load up the Guest Context from VCPU */ /* Now load up the Guest Context from VCPU */
LONG_L $1, VCPU_R1(k1) LONG_L $1, VCPU_R1(k1)
LONG_L $2, VCPU_R2(k1) LONG_L $2, VCPU_R2(k1)
...@@ -256,6 +256,8 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra) ...@@ -256,6 +256,8 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra)
LONG_S $30, VCPU_R30(k1) LONG_S $30, VCPU_R30(k1)
LONG_S $31, VCPU_R31(k1) LONG_S $31, VCPU_R31(k1)
.set at
/* We need to save hi/lo and restore them on the way out */ /* We need to save hi/lo and restore them on the way out */
mfhi t0 mfhi t0
LONG_S t0, VCPU_HI(k1) LONG_S t0, VCPU_HI(k1)
...@@ -307,9 +309,7 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra) ...@@ -307,9 +309,7 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra)
/* load up the host EBASE */ /* load up the host EBASE */
mfc0 v0, CP0_STATUS mfc0 v0, CP0_STATUS
.set at
or k0, v0, ST0_BEV or k0, v0, ST0_BEV
.set noat
mtc0 k0, CP0_STATUS mtc0 k0, CP0_STATUS
ehb ehb
...@@ -321,7 +321,6 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra) ...@@ -321,7 +321,6 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra)
* If FPU is enabled, save FCR31 and clear it so that later ctc1's don't * If FPU is enabled, save FCR31 and clear it so that later ctc1's don't
* trigger FPE for pending exceptions. * trigger FPE for pending exceptions.
*/ */
.set at
and v1, v0, ST0_CU1 and v1, v0, ST0_CU1
beqz v1, 1f beqz v1, 1f
nop nop
...@@ -331,7 +330,6 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra) ...@@ -331,7 +330,6 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra)
sw t0, VCPU_FCR31(k1) sw t0, VCPU_FCR31(k1)
ctc1 zero,fcr31 ctc1 zero,fcr31
.set pop .set pop
.set noat
1: 1:
#ifdef CONFIG_CPU_HAS_MSA #ifdef CONFIG_CPU_HAS_MSA
...@@ -354,10 +352,8 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra) ...@@ -354,10 +352,8 @@ NESTED (MIPSX(GuestException), CALLFRAME_SIZ, ra)
#endif #endif
/* Now that the new EBASE has been loaded, unset BEV and KSU_USER */ /* Now that the new EBASE has been loaded, unset BEV and KSU_USER */
.set at
and v0, v0, ~(ST0_EXL | KSU_USER | ST0_IE) and v0, v0, ~(ST0_EXL | KSU_USER | ST0_IE)
or v0, v0, ST0_CU0 or v0, v0, ST0_CU0
.set noat
mtc0 v0, CP0_STATUS mtc0 v0, CP0_STATUS
ehb ehb
...@@ -424,18 +420,14 @@ __kvm_mips_return_to_guest: ...@@ -424,18 +420,14 @@ __kvm_mips_return_to_guest:
/* Switch EBASE back to the one used by KVM */ /* Switch EBASE back to the one used by KVM */
mfc0 v1, CP0_STATUS mfc0 v1, CP0_STATUS
.set at
or k0, v1, ST0_BEV or k0, v1, ST0_BEV
.set noat
mtc0 k0, CP0_STATUS mtc0 k0, CP0_STATUS
ehb ehb
mtc0 t0, CP0_EBASE mtc0 t0, CP0_EBASE
/* Setup status register for running guest in UM */ /* Setup status register for running guest in UM */
.set at
or v1, v1, (ST0_EXL | KSU_USER | ST0_IE) or v1, v1, (ST0_EXL | KSU_USER | ST0_IE)
and v1, v1, ~(ST0_CU0 | ST0_MX) and v1, v1, ~(ST0_CU0 | ST0_MX)
.set noat
mtc0 v1, CP0_STATUS mtc0 v1, CP0_STATUS
ehb ehb
...@@ -464,6 +456,7 @@ __kvm_mips_return_to_guest: ...@@ -464,6 +456,7 @@ __kvm_mips_return_to_guest:
/* Disable RDHWR access */ /* Disable RDHWR access */
mtc0 zero, CP0_HWRENA mtc0 zero, CP0_HWRENA
.set noat
/* load the guest context from VCPU and return */ /* load the guest context from VCPU and return */
LONG_L $0, VCPU_R0(k1) LONG_L $0, VCPU_R0(k1)
LONG_L $1, VCPU_R1(k1) LONG_L $1, VCPU_R1(k1)
...@@ -509,6 +502,7 @@ FEXPORT(__kvm_mips_skip_guest_restore) ...@@ -509,6 +502,7 @@ FEXPORT(__kvm_mips_skip_guest_restore)
LONG_L k1, VCPU_R27(k1) LONG_L k1, VCPU_R27(k1)
eret eret
.set at
__kvm_mips_return_to_host: __kvm_mips_return_to_host:
/* EBASE is already pointing to Linux */ /* EBASE is already pointing to Linux */
......
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