|
@@ -95,12 +95,8 @@ module_param(enable_apicv_reg_vid, bool, S_IRUGO);
|
|
|
static bool __read_mostly nested = 0;
|
|
|
module_param(nested, bool, S_IRUGO);
|
|
|
|
|
|
-#define KVM_GUEST_CR0_MASK_UNRESTRICTED_GUEST \
|
|
|
- (X86_CR0_WP | X86_CR0_NE | X86_CR0_NW | X86_CR0_CD)
|
|
|
-#define KVM_GUEST_CR0_MASK \
|
|
|
- (KVM_GUEST_CR0_MASK_UNRESTRICTED_GUEST | X86_CR0_PG | X86_CR0_PE)
|
|
|
-#define KVM_VM_CR0_ALWAYS_ON_UNRESTRICTED_GUEST \
|
|
|
- (X86_CR0_WP | X86_CR0_NE)
|
|
|
+#define KVM_GUEST_CR0_MASK (X86_CR0_NW | X86_CR0_CD)
|
|
|
+#define KVM_VM_CR0_ALWAYS_ON_UNRESTRICTED_GUEST (X86_CR0_WP | X86_CR0_NE)
|
|
|
#define KVM_VM_CR0_ALWAYS_ON \
|
|
|
(KVM_VM_CR0_ALWAYS_ON_UNRESTRICTED_GUEST | X86_CR0_PG | X86_CR0_PE)
|
|
|
#define KVM_CR4_GUEST_OWNED_BITS \
|
|
@@ -3137,11 +3133,11 @@ static void vmx_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
|
|
|
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
|
|
unsigned long hw_cr0;
|
|
|
|
|
|
+ hw_cr0 = (cr0 & ~KVM_GUEST_CR0_MASK);
|
|
|
if (enable_unrestricted_guest)
|
|
|
- hw_cr0 = (cr0 & ~KVM_GUEST_CR0_MASK_UNRESTRICTED_GUEST)
|
|
|
- | KVM_VM_CR0_ALWAYS_ON_UNRESTRICTED_GUEST;
|
|
|
+ hw_cr0 |= KVM_VM_CR0_ALWAYS_ON_UNRESTRICTED_GUEST;
|
|
|
else {
|
|
|
- hw_cr0 = (cr0 & ~KVM_GUEST_CR0_MASK) | KVM_VM_CR0_ALWAYS_ON;
|
|
|
+ hw_cr0 |= KVM_VM_CR0_ALWAYS_ON;
|
|
|
|
|
|
if (vmx->rmode.vm86_active && (cr0 & X86_CR0_PE))
|
|
|
enter_pmode(vcpu);
|