Loading arch/x86/kvm/svm.c +16 −3 Original line number Diff line number Diff line Loading @@ -1332,6 +1332,21 @@ static void svm_vcpu_put(struct kvm_vcpu *vcpu) wrmsrl(host_save_user_msrs[i], svm->host_user_msrs[i]); } static void svm_update_cpl(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); int cpl; if (!is_protmode(vcpu)) cpl = 0; else if (svm->vmcb->save.rflags & X86_EFLAGS_VM) cpl = 3; else cpl = svm->vmcb->save.cs.selector & 0x3; svm->vmcb->save.cpl = cpl; } static unsigned long svm_get_rflags(struct kvm_vcpu *vcpu) { return to_svm(vcpu)->vmcb->save.rflags; Loading Loading @@ -1607,9 +1622,7 @@ static void svm_set_segment(struct kvm_vcpu *vcpu, s->attrib |= (var->g & 1) << SVM_SELECTOR_G_SHIFT; } if (seg == VCPU_SREG_CS) svm->vmcb->save.cpl = (svm->vmcb->save.cs.attrib >> SVM_SELECTOR_DPL_SHIFT) & 3; svm_update_cpl(vcpu); mark_dirty(svm->vmcb, VMCB_SEG); } Loading Loading
arch/x86/kvm/svm.c +16 −3 Original line number Diff line number Diff line Loading @@ -1332,6 +1332,21 @@ static void svm_vcpu_put(struct kvm_vcpu *vcpu) wrmsrl(host_save_user_msrs[i], svm->host_user_msrs[i]); } static void svm_update_cpl(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); int cpl; if (!is_protmode(vcpu)) cpl = 0; else if (svm->vmcb->save.rflags & X86_EFLAGS_VM) cpl = 3; else cpl = svm->vmcb->save.cs.selector & 0x3; svm->vmcb->save.cpl = cpl; } static unsigned long svm_get_rflags(struct kvm_vcpu *vcpu) { return to_svm(vcpu)->vmcb->save.rflags; Loading Loading @@ -1607,9 +1622,7 @@ static void svm_set_segment(struct kvm_vcpu *vcpu, s->attrib |= (var->g & 1) << SVM_SELECTOR_G_SHIFT; } if (seg == VCPU_SREG_CS) svm->vmcb->save.cpl = (svm->vmcb->save.cs.attrib >> SVM_SELECTOR_DPL_SHIFT) & 3; svm_update_cpl(vcpu); mark_dirty(svm->vmcb, VMCB_SEG); } Loading