diff options
-rw-r--r-- | arch/x86/include/asm/kvm_host.h | 6 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 7930c294182a..35f538bda3a9 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h | |||
@@ -337,6 +337,10 @@ struct kvm_pmu { | |||
337 | u64 reprogram_pmi; | 337 | u64 reprogram_pmi; |
338 | }; | 338 | }; |
339 | 339 | ||
340 | enum { | ||
341 | KVM_DEBUGREG_BP_ENABLED = 1, | ||
342 | }; | ||
343 | |||
340 | struct kvm_vcpu_arch { | 344 | struct kvm_vcpu_arch { |
341 | /* | 345 | /* |
342 | * rip and regs accesses must go through | 346 | * rip and regs accesses must go through |
@@ -463,7 +467,7 @@ struct kvm_vcpu_arch { | |||
463 | struct mtrr_state_type mtrr_state; | 467 | struct mtrr_state_type mtrr_state; |
464 | u32 pat; | 468 | u32 pat; |
465 | 469 | ||
466 | int switch_db_regs; | 470 | unsigned switch_db_regs; |
467 | unsigned long db[KVM_NR_DB_REGS]; | 471 | unsigned long db[KVM_NR_DB_REGS]; |
468 | unsigned long dr6; | 472 | unsigned long dr6; |
469 | unsigned long dr7; | 473 | unsigned long dr7; |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 622312176f28..85c74e7df2df 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -759,7 +759,9 @@ static void kvm_update_dr7(struct kvm_vcpu *vcpu) | |||
759 | else | 759 | else |
760 | dr7 = vcpu->arch.dr7; | 760 | dr7 = vcpu->arch.dr7; |
761 | kvm_x86_ops->set_dr7(vcpu, dr7); | 761 | kvm_x86_ops->set_dr7(vcpu, dr7); |
762 | vcpu->arch.switch_db_regs = (dr7 & DR7_BP_EN_MASK); | 762 | vcpu->arch.switch_db_regs &= ~KVM_DEBUGREG_BP_ENABLED; |
763 | if (dr7 & DR7_BP_EN_MASK) | ||
764 | vcpu->arch.switch_db_regs |= KVM_DEBUGREG_BP_ENABLED; | ||
763 | } | 765 | } |
764 | 766 | ||
765 | static int __kvm_set_dr(struct kvm_vcpu *vcpu, int dr, unsigned long val) | 767 | static int __kvm_set_dr(struct kvm_vcpu *vcpu, int dr, unsigned long val) |