Loading arch/x86/kvm/x86.c +20 −5 Original line number Diff line number Diff line Loading @@ -2020,6 +2020,7 @@ int emulate_invlpg(struct kvm_vcpu *vcpu, gva_t address) int emulate_clts(struct kvm_vcpu *vcpu) { KVMTRACE_0D(CLTS, vcpu, handler); kvm_x86_ops->set_cr0(vcpu, vcpu->arch.cr0 & ~X86_CR0_TS); return X86EMUL_CONTINUE; } Loading Loading @@ -2600,27 +2601,41 @@ void realmode_lmsw(struct kvm_vcpu *vcpu, unsigned long msw, unsigned long realmode_get_cr(struct kvm_vcpu *vcpu, int cr) { unsigned long value; kvm_x86_ops->decache_cr4_guest_bits(vcpu); switch (cr) { case 0: return vcpu->arch.cr0; value = vcpu->arch.cr0; break; case 2: return vcpu->arch.cr2; value = vcpu->arch.cr2; break; case 3: return vcpu->arch.cr3; value = vcpu->arch.cr3; break; case 4: return vcpu->arch.cr4; value = vcpu->arch.cr4; break; case 8: return kvm_get_cr8(vcpu); value = kvm_get_cr8(vcpu); break; default: vcpu_printf(vcpu, "%s: unexpected cr %u\n", __func__, cr); return 0; } KVMTRACE_3D(CR_READ, vcpu, (u32)cr, (u32)value, (u32)((u64)value >> 32), handler); return value; } void realmode_set_cr(struct kvm_vcpu *vcpu, int cr, unsigned long val, unsigned long *rflags) { KVMTRACE_3D(CR_WRITE, vcpu, (u32)cr, (u32)val, (u32)((u64)val >> 32), handler); switch (cr) { case 0: kvm_set_cr0(vcpu, mk_cr_64(vcpu->arch.cr0, val)); Loading Loading
arch/x86/kvm/x86.c +20 −5 Original line number Diff line number Diff line Loading @@ -2020,6 +2020,7 @@ int emulate_invlpg(struct kvm_vcpu *vcpu, gva_t address) int emulate_clts(struct kvm_vcpu *vcpu) { KVMTRACE_0D(CLTS, vcpu, handler); kvm_x86_ops->set_cr0(vcpu, vcpu->arch.cr0 & ~X86_CR0_TS); return X86EMUL_CONTINUE; } Loading Loading @@ -2600,27 +2601,41 @@ void realmode_lmsw(struct kvm_vcpu *vcpu, unsigned long msw, unsigned long realmode_get_cr(struct kvm_vcpu *vcpu, int cr) { unsigned long value; kvm_x86_ops->decache_cr4_guest_bits(vcpu); switch (cr) { case 0: return vcpu->arch.cr0; value = vcpu->arch.cr0; break; case 2: return vcpu->arch.cr2; value = vcpu->arch.cr2; break; case 3: return vcpu->arch.cr3; value = vcpu->arch.cr3; break; case 4: return vcpu->arch.cr4; value = vcpu->arch.cr4; break; case 8: return kvm_get_cr8(vcpu); value = kvm_get_cr8(vcpu); break; default: vcpu_printf(vcpu, "%s: unexpected cr %u\n", __func__, cr); return 0; } KVMTRACE_3D(CR_READ, vcpu, (u32)cr, (u32)value, (u32)((u64)value >> 32), handler); return value; } void realmode_set_cr(struct kvm_vcpu *vcpu, int cr, unsigned long val, unsigned long *rflags) { KVMTRACE_3D(CR_WRITE, vcpu, (u32)cr, (u32)val, (u32)((u64)val >> 32), handler); switch (cr) { case 0: kvm_set_cr0(vcpu, mk_cr_64(vcpu->arch.cr0, val)); Loading