KVM: SVM: Add support for CR8 write traps for an SEV-ES guest
[linux-2.6-microblaze.git] / arch / x86 / kvm / svm / svm.c
index 4b3d935..0f4b496 100644 (file)
@@ -2455,6 +2455,7 @@ static int cr_trap(struct vcpu_svm *svm)
        struct kvm_vcpu *vcpu = &svm->vcpu;
        unsigned long old_value, new_value;
        unsigned int cr;
+       int ret = 0;
 
        new_value = (unsigned long)svm->vmcb->control.exit_info_1;
 
@@ -2472,13 +2473,16 @@ static int cr_trap(struct vcpu_svm *svm)
 
                kvm_post_set_cr4(vcpu, old_value, new_value);
                break;
+       case 8:
+               ret = kvm_set_cr8(&svm->vcpu, new_value);
+               break;
        default:
                WARN(1, "unhandled CR%d write trap", cr);
                kvm_queue_exception(vcpu, UD_VECTOR);
                return 1;
        }
 
-       return kvm_complete_insn_gp(vcpu, 0);
+       return kvm_complete_insn_gp(vcpu, ret);
 }
 
 static int dr_interception(struct vcpu_svm *svm)
@@ -3030,6 +3034,7 @@ static int (*const svm_exit_handlers[])(struct vcpu_svm *svm) = {
        [SVM_EXIT_EFER_WRITE_TRAP]              = efer_trap,
        [SVM_EXIT_CR0_WRITE_TRAP]               = cr_trap,
        [SVM_EXIT_CR4_WRITE_TRAP]               = cr_trap,
+       [SVM_EXIT_CR8_WRITE_TRAP]               = cr_trap,
        [SVM_EXIT_INVPCID]                      = invpcid_interception,
        [SVM_EXIT_NPF]                          = npf_interception,
        [SVM_EXIT_RSM]                          = rsm_interception,