|
@@ -157,9 +157,11 @@ FEXPORT(__kvm_mips_vcpu_run)
|
|
|
|
|
|
FEXPORT(__kvm_mips_load_asid)
|
|
|
/* Set the ASID for the Guest Kernel */
|
|
|
- INT_SLL t0, t0, 1 /* with kseg0 @ 0x40000000, kernel */
|
|
|
- /* addresses shift to 0x80000000 */
|
|
|
- bltz t0, 1f /* If kernel */
|
|
|
+ PTR_L t0, VCPU_COP0(k1)
|
|
|
+ LONG_L t0, COP0_STATUS(t0)
|
|
|
+ andi t0, KSU_USER | ST0_ERL | ST0_EXL
|
|
|
+ xori t0, KSU_USER
|
|
|
+ bnez t0, 1f /* If kernel */
|
|
|
INT_ADDIU t1, k1, VCPU_GUEST_KERNEL_ASID /* (BD) */
|
|
|
INT_ADDIU t1, k1, VCPU_GUEST_USER_ASID /* else user */
|
|
|
1:
|
|
@@ -474,9 +476,11 @@ __kvm_mips_return_to_guest:
|
|
|
mtc0 t0, CP0_EPC
|
|
|
|
|
|
/* Set the ASID for the Guest Kernel */
|
|
|
- INT_SLL t0, t0, 1 /* with kseg0 @ 0x40000000, kernel */
|
|
|
- /* addresses shift to 0x80000000 */
|
|
|
- bltz t0, 1f /* If kernel */
|
|
|
+ PTR_L t0, VCPU_COP0(k1)
|
|
|
+ LONG_L t0, COP0_STATUS(t0)
|
|
|
+ andi t0, KSU_USER | ST0_ERL | ST0_EXL
|
|
|
+ xori t0, KSU_USER
|
|
|
+ bnez t0, 1f /* If kernel */
|
|
|
INT_ADDIU t1, k1, VCPU_GUEST_KERNEL_ASID /* (BD) */
|
|
|
INT_ADDIU t1, k1, VCPU_GUEST_USER_ASID /* else user */
|
|
|
1:
|