[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Single step in HVM domU on Intel machine may see wrong DB6
>>> On 26.02.14 at 06:15, "Zhang, Yang Z" <yang.z.zhang@xxxxxxxxx> wrote: > @@ -2690,9 +2688,13 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs) > __vmread(EXIT_QUALIFICATION, &exit_qualification); > HVMTRACE_1D(TRAP_DEBUG, exit_qualification); > write_debugreg(6, exit_qualification | 0xffff0ff0); > - if ( !v->domain->debugger_attached || cpu_has_monitor_trap_flag ) > - goto exit_and_crash; > - domain_pause_for_debugger(); > + if ( v->domain->debugger_attached ) > + domain_pause_for_debugger(); > + else > + { > + __restore_debug_registers(v); > + hvm_inject_hw_exception(TRAP_debug, > HVM_DELIVER_NO_ERROR_CODE); > + } I suppose you need to set DR6.BS after restoring the reigsters? Also, the change looks rather simple - is that really correct for both cpu_has_monitor_trap_flag and !cpu_has_monitor_trap_flag cases? > BTW: I also think we should clear the CPU_BASED_MOV_DR_EXITING bit in > __restore_debug_registers(). After restore the debug register, we should not > trap any DR access unless the VCPU is scheduled out again. Not sure whether I > am wrong. > > diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c > index b128e81..56a3140 100644 > --- a/xen/arch/x86/hvm/vmx/vmx.c > +++ b/xen/arch/x86/hvm/vmx/vmx.c > @@ -394,6 +394,8 @@ static void __restore_debug_registers(struct vcpu *v) > write_debugreg(3, v->arch.debugreg[3]); > write_debugreg(6, v->arch.debugreg[6]); > /* DR7 is loaded from the VMCS. */ > + v->arch.hvm_vmx.exec_control &= ~CPU_BASED_MOV_DR_EXITING; > + vmx_update_cpu_exec_control(v); > } > > /* That's being done by at least one of its callers (vmx_dr_access()) already, and I think it was purposefully not done in other cases. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |