[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 8/8] x86/vm_event: Add HVM debug exception vm_events
>>> On 30.05.16 at 00:37, <tamas@xxxxxxxxxxxxx> wrote: > @@ -117,7 +133,11 @@ int hvm_monitor_breakpoint(unsigned long rip, > > req.vcpu_id = curr->vcpu_id; > > - return vm_event_monitor_traps(curr, 1, &req); > + rc = vm_event_monitor_traps(curr, sync, &req); > + if ( type == HVM_MONITOR_DEBUG_EXCEPTION && rc == 1 && !sync ) > + rc = 0; > + > + return rc; > } To someone like me, not intimately familiar with the code, this added logic looks pretty arbitrary. Please add a comment indicating why under these special circumstances rc needs to be altered here, which then will hopefully also clarify why that can't be done right in vm_event_monitor_traps(). > --- a/xen/arch/x86/hvm/vmx/vmx.c > +++ b/xen/arch/x86/hvm/vmx/vmx.c > @@ -3377,9 +3377,25 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs) > HVMTRACE_1D(TRAP_DEBUG, exit_qualification); > write_debugreg(6, exit_qualification | DR_STATUS_RESERVED_ONE); > if ( !v->domain->debugger_attached ) > - vmx_propagate_intr(intr_info); > + { > + unsigned long insn_length = 0; > + int handled; The variable name suggests it wants to be bool_t, but ... > + unsigned long trap_type = MASK_EXTR(intr_info, > + > INTR_INFO_INTR_TYPE_MASK); > + > + if( trap_type >= X86_EVENTTYPE_SW_INTERRUPT ) > + __vmread(VM_EXIT_INSTRUCTION_LEN, &insn_length); > + > + handled = hvm_monitor_debug(regs->eip, > + HVM_MONITOR_DEBUG_EXCEPTION, > + trap_type, insn_length); > + if ( handled <= 0 ) ... it clearly can't. Please use a better name (could by just "rc" or "ret"). (Otoh I see that code you modify further down uses that same naming for a similar purpose variable. Let's see what the VMX maintainers say.) > + vmx_propagate_intr(intr_info); > + > + } > else > domain_pause_for_debugger(); > + > break; > case TRAP_int3: If anywhere, this added blank line wants to go after the break. > @@ -3393,8 +3409,9 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs) > } > else { > int handled = > - hvm_monitor_breakpoint(regs->eip, > - HVM_MONITOR_SOFTWARE_BREAKPOINT); > + hvm_monitor_debug(regs->eip, > + HVM_MONITOR_SOFTWARE_BREAKPOINT, > + X86_EVENTTYPE_SW_EXCEPTION, 1); Please let's not add further mistakes like this, assuming INT3 can't have any prefixes. It can, even if they're useless. > @@ -3721,8 +3738,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs) > vmx_update_cpu_exec_control(v); > if ( v->arch.hvm_vcpu.single_step ) > { > - hvm_monitor_breakpoint(regs->eip, > - HVM_MONITOR_SINGLESTEP_BREAKPOINT); > + hvm_monitor_debug(regs->eip, HVM_MONITOR_SINGLESTEP_BREAKPOINT, > 0, 0); How come the 3rd argument is literal zero here? Also you're creating a long line here. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |