|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 8/9] x86/vm_event: Add HVM debug exception vm_events
>>> On 03.06.16 at 15:29, <tamas@xxxxxxxxxxxxx> wrote:
> On Jun 3, 2016 04:49, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:
>>
>> >>> On 03.06.16 at 00:52, <tamas@xxxxxxxxxxxxx> wrote:
>> > --- a/xen/arch/x86/hvm/vmx/vmx.c
>> > +++ b/xen/arch/x86/hvm/vmx/vmx.c
>> > @@ -3377,10 +3377,33 @@ 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;
>>
>> It's insn_len further down - please try to be consistent.
>>
>> > + int rc;
>> > + 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);
>> > +
>> > + rc = hvm_monitor_debug(regs->eip,
>> > + HVM_MONITOR_DEBUG_EXCEPTION,
>> > + trap_type, insn_length);
>> > + if ( !rc )
>> > + {
>> > + vmx_propagate_intr(intr_info);
>> > + break;
>> > + }
>> > + else if ( rc > 0 )
>> > + break;
>>
>> So you've removed the odd / hard to understand return value
>> adjustment from hvm_monitor_debug(), but this isn't any better:
>> What does the return value being positive really mean? And btw.,
>> no point using "else" after an unconditional "break" in the previous
>> if().
>
> As the commit message explains in the other patch rc is 1 when the vCPU is
> paused. This means a synchronous event where we are waiting for the
> vm_event response thus work here is done.
The commit message of _another_ patch doesn't help at all a future
reader to understand what's going on here.
>> > + }
>> > else
>> > + {
>> > domain_pause_for_debugger();
>> > - break;
>> > + break;
>> > + }
>> > +
>> > + goto exit_and_crash;
>>
>> There was no such goto before, i.e. you introduce this. I'm rather
>> hesitant to see such getting added without a good reason, and
>> that good reason should be stated in a comment. Also it looks like
>> the change would be easier to grok if you didn't alter the code
>> down here, but instead inverted the earlier if:
>>
>> if ( unlikely(rc < 0) )
>> /* ... */
>> goto exit_and_crash;
>> if ( !rc )
>> vmx_propagate_intr(intr_info);
>>
>> Which imo would get us closer to code being at least half way
>> self-explanatory.
>
> I agree it may be more intuitive that way but adding the goto the way I did
> is whats consistent with the already established handling of int3 events. I
> either go for consistency or reworking more code at other spots too.
Well, as always I'll leave it to the maintainers to decide, but I think
my suggestion would make this code better readable, and doesn't
require immediate re-work elsewhere.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |