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: 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/13209/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
1300fcd5e1
commit
f1b711c638
|
@ -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)
|
||||||
/* 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)
|
||||||
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)
|
||||||
/* 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)
|
||||||
* 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)
|
||||||
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)
|
||||||
#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:
|
||||||
|
|
||||||
/* 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:
|
||||||
/* 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)
|
||||||
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 */
|
||||||
|
|
Loading…
Reference in New Issue