MIPS: KVM: Generalise fpu_inuse for other state
authorJames Hogan <james.hogan@imgtec.com>
Tue, 14 Jun 2016 08:40:10 +0000 (09:40 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 14 Jun 2016 09:02:48 +0000 (11:02 +0200)
Rename fpu_inuse and the related definitions to aux_inuse so it can be
used for lazy context management of other auxiliary processor state too,
such as VZ guest timer, watchpoints and performance counters.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/mips/include/asm/kvm_host.h
arch/mips/kvm/emulate.c
arch/mips/kvm/mips.c

index d0432b5f23434c59707587f982c682c47a0678f6..e6273850bab69d3f39e0946ca54c3be533690e9f 100644 (file)
@@ -323,8 +323,8 @@ struct kvm_mips_tlb {
        long tlb_lo[2];
 };
 
-#define KVM_MIPS_FPU_FPU       0x1
-#define KVM_MIPS_FPU_MSA       0x2
+#define KVM_MIPS_AUX_FPU       0x1
+#define KVM_MIPS_AUX_MSA       0x2
 
 #define KVM_MIPS_GUEST_TLB_SIZE        64
 struct kvm_vcpu_arch {
@@ -346,8 +346,8 @@ struct kvm_vcpu_arch {
 
        /* FPU State */
        struct mips_fpu_struct fpu;
-       /* Which FPU state is loaded (KVM_MIPS_FPU_*) */
-       unsigned int fpu_inuse;
+       /* Which auxiliary state is loaded (KVM_MIPS_AUX_*) */
+       unsigned int aux_inuse;
 
        /* COP0 State */
        struct mips_coproc *cop0;
index 5b89c08034052a951b30f311dd916a1998cda229..8647bd97b934ad62f20bda0682ba126577569be9 100644 (file)
@@ -1154,7 +1154,7 @@ enum emulation_result kvm_mips_emulate_CP0(u32 inst, u32 *opc, u32 cause,
                                 * it first.
                                 */
                                if (change & ST0_CU1 && !(val & ST0_FR) &&
-                                   vcpu->arch.fpu_inuse & KVM_MIPS_FPU_MSA)
+                                   vcpu->arch.aux_inuse & KVM_MIPS_AUX_MSA)
                                        kvm_lose_fpu(vcpu);
 
                                /*
@@ -1165,7 +1165,7 @@ enum emulation_result kvm_mips_emulate_CP0(u32 inst, u32 *opc, u32 cause,
                                 * the near future.
                                 */
                                if (change & ST0_CU1 &&
-                                   vcpu->arch.fpu_inuse & KVM_MIPS_FPU_FPU)
+                                   vcpu->arch.aux_inuse & KVM_MIPS_AUX_FPU)
                                        change_c0_status(ST0_CU1, val);
 
                                preempt_enable();
@@ -1200,7 +1200,7 @@ enum emulation_result kvm_mips_emulate_CP0(u32 inst, u32 *opc, u32 cause,
                                 * context is already loaded.
                                 */
                                if (change & MIPS_CONF5_FRE &&
-                                   vcpu->arch.fpu_inuse & KVM_MIPS_FPU_FPU)
+                                   vcpu->arch.aux_inuse & KVM_MIPS_AUX_FPU)
                                        change_c0_config5(MIPS_CONF5_FRE, val);
 
                                /*
@@ -1210,7 +1210,7 @@ enum emulation_result kvm_mips_emulate_CP0(u32 inst, u32 *opc, u32 cause,
                                 * quickly enabled again in the near future.
                                 */
                                if (change & MIPS_CONF5_MSAEN &&
-                                   vcpu->arch.fpu_inuse & KVM_MIPS_FPU_MSA)
+                                   vcpu->arch.aux_inuse & KVM_MIPS_AUX_MSA)
                                        change_c0_config5(MIPS_CONF5_MSAEN,
                                                          val);
 
index 6e753761b5d6e526d0352e02986f1c9306c55fa3..9093262ff3cec41af1f0c7dd0e8c5e4795b074a6 100644 (file)
@@ -1447,7 +1447,7 @@ void kvm_own_fpu(struct kvm_vcpu *vcpu)
         * not to clobber the status register directly via the commpage.
         */
        if (cpu_has_msa && sr & ST0_CU1 && !(sr & ST0_FR) &&
-           vcpu->arch.fpu_inuse & KVM_MIPS_FPU_MSA)
+           vcpu->arch.aux_inuse & KVM_MIPS_AUX_MSA)
                kvm_lose_fpu(vcpu);
 
        /*
@@ -1462,9 +1462,9 @@ void kvm_own_fpu(struct kvm_vcpu *vcpu)
        enable_fpu_hazard();
 
        /* If guest FPU state not active, restore it now */
-       if (!(vcpu->arch.fpu_inuse & KVM_MIPS_FPU_FPU)) {
+       if (!(vcpu->arch.aux_inuse & KVM_MIPS_AUX_FPU)) {
                __kvm_restore_fpu(&vcpu->arch);
-               vcpu->arch.fpu_inuse |= KVM_MIPS_FPU_FPU;
+               vcpu->arch.aux_inuse |= KVM_MIPS_AUX_FPU;
        }
 
        preempt_enable();
@@ -1491,8 +1491,8 @@ void kvm_own_msa(struct kvm_vcpu *vcpu)
                 * interacts with MSA state, so play it safe and save it first.
                 */
                if (!(sr & ST0_FR) &&
-                   (vcpu->arch.fpu_inuse & (KVM_MIPS_FPU_FPU |
-                               KVM_MIPS_FPU_MSA)) == KVM_MIPS_FPU_FPU)
+                   (vcpu->arch.aux_inuse & (KVM_MIPS_AUX_FPU |
+                               KVM_MIPS_AUX_MSA)) == KVM_MIPS_AUX_FPU)
                        kvm_lose_fpu(vcpu);
 
                change_c0_status(ST0_CU1 | ST0_FR, sr);
@@ -1506,20 +1506,20 @@ void kvm_own_msa(struct kvm_vcpu *vcpu)
        set_c0_config5(MIPS_CONF5_MSAEN);
        enable_fpu_hazard();
 
-       switch (vcpu->arch.fpu_inuse & (KVM_MIPS_FPU_FPU | KVM_MIPS_FPU_MSA)) {
-       case KVM_MIPS_FPU_FPU:
+       switch (vcpu->arch.aux_inuse & (KVM_MIPS_AUX_FPU | KVM_MIPS_AUX_MSA)) {
+       case KVM_MIPS_AUX_FPU:
                /*
                 * Guest FPU state already loaded, only restore upper MSA state
                 */
                __kvm_restore_msa_upper(&vcpu->arch);
-               vcpu->arch.fpu_inuse |= KVM_MIPS_FPU_MSA;
+               vcpu->arch.aux_inuse |= KVM_MIPS_AUX_MSA;
                break;
        case 0:
                /* Neither FPU or MSA already active, restore full MSA state */
                __kvm_restore_msa(&vcpu->arch);
-               vcpu->arch.fpu_inuse |= KVM_MIPS_FPU_MSA;
+               vcpu->arch.aux_inuse |= KVM_MIPS_AUX_MSA;
                if (kvm_mips_guest_has_fpu(&vcpu->arch))
-                       vcpu->arch.fpu_inuse |= KVM_MIPS_FPU_FPU;
+                       vcpu->arch.aux_inuse |= KVM_MIPS_AUX_FPU;
                break;
        default:
                break;
@@ -1533,13 +1533,13 @@ void kvm_own_msa(struct kvm_vcpu *vcpu)
 void kvm_drop_fpu(struct kvm_vcpu *vcpu)
 {
        preempt_disable();
-       if (cpu_has_msa && vcpu->arch.fpu_inuse & KVM_MIPS_FPU_MSA) {
+       if (cpu_has_msa && vcpu->arch.aux_inuse & KVM_MIPS_AUX_MSA) {
                disable_msa();
-               vcpu->arch.fpu_inuse &= ~KVM_MIPS_FPU_MSA;
+               vcpu->arch.aux_inuse &= ~KVM_MIPS_AUX_MSA;
        }
-       if (vcpu->arch.fpu_inuse & KVM_MIPS_FPU_FPU) {
+       if (vcpu->arch.aux_inuse & KVM_MIPS_AUX_FPU) {
                clear_c0_status(ST0_CU1 | ST0_FR);
-               vcpu->arch.fpu_inuse &= ~KVM_MIPS_FPU_FPU;
+               vcpu->arch.aux_inuse &= ~KVM_MIPS_AUX_FPU;
        }
        preempt_enable();
 }
@@ -1555,7 +1555,7 @@ void kvm_lose_fpu(struct kvm_vcpu *vcpu)
         */
 
        preempt_disable();
-       if (cpu_has_msa && vcpu->arch.fpu_inuse & KVM_MIPS_FPU_MSA) {
+       if (cpu_has_msa && vcpu->arch.aux_inuse & KVM_MIPS_AUX_MSA) {
                set_c0_config5(MIPS_CONF5_MSAEN);
                enable_fpu_hazard();
 
@@ -1563,17 +1563,17 @@ void kvm_lose_fpu(struct kvm_vcpu *vcpu)
 
                /* Disable MSA & FPU */
                disable_msa();
-               if (vcpu->arch.fpu_inuse & KVM_MIPS_FPU_FPU) {
+               if (vcpu->arch.aux_inuse & KVM_MIPS_AUX_FPU) {
                        clear_c0_status(ST0_CU1 | ST0_FR);
                        disable_fpu_hazard();
                }
-               vcpu->arch.fpu_inuse &= ~(KVM_MIPS_FPU_FPU | KVM_MIPS_FPU_MSA);
-       } else if (vcpu->arch.fpu_inuse & KVM_MIPS_FPU_FPU) {
+               vcpu->arch.aux_inuse &= ~(KVM_MIPS_AUX_FPU | KVM_MIPS_AUX_MSA);
+       } else if (vcpu->arch.aux_inuse & KVM_MIPS_AUX_FPU) {
                set_c0_status(ST0_CU1);
                enable_fpu_hazard();
 
                __kvm_save_fpu(&vcpu->arch);
-               vcpu->arch.fpu_inuse &= ~KVM_MIPS_FPU_FPU;
+               vcpu->arch.aux_inuse &= ~KVM_MIPS_AUX_FPU;
 
                /* Disable FPU */
                clear_c0_status(ST0_CU1 | ST0_FR);