From: Ken Hofsass <hofsass@xxxxxxxxxx> Enables determining whether a debug/break event is associated with a guest process of interest. Signed-off-by: Ken Hofsass <hofsass@xxxxxxxxxx> Signed-off-by: Peter Shier <pshier@xxxxxxxxxx> Reviewed-by: Jim Mattson <jmattson@xxxxxxxxxx> --- arch/x86/include/uapi/asm/kvm.h | 1 + arch/x86/kvm/vmx.c | 2 ++ arch/x86/kvm/x86.c | 1 + include/uapi/linux/kvm.h | 1 + 4 files changed, 5 insertions(+) diff --git a/arch/x86/include/uapi/asm/kvm.h b/arch/x86/include/uapi/asm/kvm.h index c535c2fdea136..7aa39142a1b88 100644 --- a/arch/x86/include/uapi/asm/kvm.h +++ b/arch/x86/include/uapi/asm/kvm.h @@ -254,6 +254,7 @@ struct kvm_debug_exit_arch { __u64 pc; __u64 dr6; __u64 dr7; + __u64 cr3; }; #define KVM_GUESTDBG_USE_SW_BP 0x00010000 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 1689f433f3a08..a87ddef4c79bc 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -6751,6 +6751,7 @@ static int handle_exception(struct kvm_vcpu *vcpu) rip = kvm_rip_read(vcpu); kvm_run->debug.arch.pc = vmcs_readl(GUEST_CS_BASE) + rip; kvm_run->debug.arch.exception = ex_no; + kvm_run->debug.arch.cr3 = kvm_read_cr3(vcpu); break; default: kvm_run->exit_reason = KVM_EXIT_EXCEPTION; @@ -6969,6 +6970,7 @@ static int handle_dr(struct kvm_vcpu *vcpu) vcpu->run->debug.arch.dr6 = vcpu->arch.dr6; vcpu->run->debug.arch.dr7 = dr7; vcpu->run->debug.arch.pc = kvm_get_linear_rip(vcpu); + vcpu->run->debug.arch.cr3 = kvm_read_cr3(vcpu); vcpu->run->debug.arch.exception = DB_VECTOR; vcpu->run->exit_reason = KVM_EXIT_DEBUG; return 0; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 0046aa70205aa..dd4d1ae37b794 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -2891,6 +2891,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) case KVM_CAP_SPLIT_IRQCHIP: case KVM_CAP_IMMEDIATE_EXIT: case KVM_CAP_GET_MSR_FEATURES: + case KVM_CAP_DEBUG_EVENT_PG_BASE_ADDR: r = 1; break; case KVM_CAP_SYNC_REGS: diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index b6270a3b38e9f..1eab59739dcdc 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -949,6 +949,7 @@ struct kvm_ppc_resize_hpt { #define KVM_CAP_GET_MSR_FEATURES 153 #define KVM_CAP_HYPERV_EVENTFD 154 #define KVM_CAP_HYPERV_TLBFLUSH 155 +#define KVM_CAP_DEBUG_EVENT_PG_BASE_ADDR 156 #ifdef KVM_CAP_IRQ_ROUTING -- 2.18.0.233.g985f88cf7e-goog