diff options
-rw-r--r-- | arch/x86/kvm/svm.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 1821c2078199..9184e32778ab 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -796,6 +796,11 @@ static void svm_get_segment(struct kvm_vcpu *vcpu, | |||
796 | var->db = (s->attrib >> SVM_SELECTOR_DB_SHIFT) & 1; | 796 | var->db = (s->attrib >> SVM_SELECTOR_DB_SHIFT) & 1; |
797 | var->g = (s->attrib >> SVM_SELECTOR_G_SHIFT) & 1; | 797 | var->g = (s->attrib >> SVM_SELECTOR_G_SHIFT) & 1; |
798 | 798 | ||
799 | /* AMD's VMCB does not have an explicit unusable field, so emulate it | ||
800 | * for cross vendor migration purposes by "not present" | ||
801 | */ | ||
802 | var->unusable = !var->present || (var->type == 0); | ||
803 | |||
799 | switch (seg) { | 804 | switch (seg) { |
800 | case VCPU_SREG_CS: | 805 | case VCPU_SREG_CS: |
801 | /* | 806 | /* |
@@ -827,8 +832,6 @@ static void svm_get_segment(struct kvm_vcpu *vcpu, | |||
827 | var->type |= 0x1; | 832 | var->type |= 0x1; |
828 | break; | 833 | break; |
829 | } | 834 | } |
830 | |||
831 | var->unusable = !var->present; | ||
832 | } | 835 | } |
833 | 836 | ||
834 | static int svm_get_cpl(struct kvm_vcpu *vcpu) | 837 | static int svm_get_cpl(struct kvm_vcpu *vcpu) |