[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5] hvm/svm: Implement Debug events
>>> On 23.03.18 at 09:31, <aisaila@xxxxxxxxxxxxxxx> wrote: > @@ -2656,9 +2663,28 @@ void svm_vmexit_handler(struct cpu_user_regs *regs) > HVMTRACE_0D(SMI); > break; > > + case VMEXIT_ICEBP: > case VMEXIT_EXCEPTION_DB: > if ( !v->domain->debugger_attached ) > - hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC); > + { > + int rc; > + unsigned int trap_type = exit_reason == VMEXIT_ICEBP ? > + X86_EVENTTYPE_PRI_SW_EXCEPTION : X86_EVENTTYPE_HW_EXCEPTION; > + > + inst_len = 0; > + > + if ( trap_type == X86_EVENTTYPE_PRI_SW_EXCEPTION ) > + inst_len = __get_instruction_length(v, INSTR_ICEBP); It'll be the SVM maintainers to judge, but I think the code structure I've previously suggested would make things more clear: if ( exit_reason != VMEXIT_ICEBP ) { trap_type == X86_EVENTTYPE_HW_EXCEPTION; inst_len = 0; } else { trap_type == X86_EVENTTYPE_PRI_SW_EXCEPTION; inst_len = __get_instruction_length(v, INSTR_ICEBP); } Perhaps even with likely() added. > @@ -407,6 +408,20 @@ void hvm_migrate_pirqs(struct vcpu *v); > > void hvm_inject_event(const struct x86_event *event); > > +static inline void hvm_inject_exception( > + unsigned int vector, unsigned int type, > + unsigned int insn_len, int error_code) > +{ > + struct x86_event event = { > + .vector = vector, > + .type = type, > + .insn_len = insn_len, > + .error_code = error_code, > + }; > + > + hvm_inject_event(&event); > +} > + > static inline void hvm_inject_hw_exception(unsigned int vector, int errcode) One more note here: I wonder whether hvm_inject_hw_exception() shouldn't become a wrapper now around the new function you introduce. But of course this could also be done as cleanup later. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |