|
@@ -3786,8 +3786,7 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
|
|
|
* hypercall generates UD from non zero cpl and real mode
|
|
|
* per HYPER-V spec
|
|
|
*/
|
|
|
- if (kvm_x86_ops->get_cpl(vcpu) != 0 ||
|
|
|
- !kvm_read_cr0_bits(vcpu, X86_CR0_PE)) {
|
|
|
+ if (kvm_x86_ops->get_cpl(vcpu) != 0 || !is_protmode(vcpu)) {
|
|
|
kvm_queue_exception(vcpu, UD_VECTOR);
|
|
|
return 0;
|
|
|
}
|
|
@@ -4751,7 +4750,7 @@ int kvm_load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector,
|
|
|
{
|
|
|
struct kvm_segment kvm_seg;
|
|
|
|
|
|
- if (is_vm86_segment(vcpu, seg) || !(kvm_read_cr0_bits(vcpu, X86_CR0_PE)))
|
|
|
+ if (is_vm86_segment(vcpu, seg) || !is_protmode(vcpu))
|
|
|
return kvm_load_realmode_segment(vcpu, selector, seg);
|
|
|
if (load_segment_descriptor_to_kvm_desct(vcpu, selector, &kvm_seg))
|
|
|
return 1;
|
|
@@ -5103,7 +5102,7 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
|
|
|
/* Older userspace won't unhalt the vcpu on reset. */
|
|
|
if (kvm_vcpu_is_bsp(vcpu) && kvm_rip_read(vcpu) == 0xfff0 &&
|
|
|
sregs->cs.selector == 0xf000 && sregs->cs.base == 0xffff0000 &&
|
|
|
- !(kvm_read_cr0_bits(vcpu, X86_CR0_PE)))
|
|
|
+ !is_protmode(vcpu))
|
|
|
vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;
|
|
|
|
|
|
vcpu_put(vcpu);
|