On 03/12/2019 18:24, Tamas K Lengyel wrote:
> On Tue, Dec 3, 2019 at 1:22 PM Tamas K Lengyel <ta...@tklengyel.com> wrote:
>> On Tue, Dec 3, 2019 at 1:18 PM Andrew Cooper <andrew.coop...@citrix.com> 
>> wrote:
>>> On 03/12/2019 18:09, Tamas K Lengyel wrote:
>>>> On Tue, Dec 3, 2019 at 1:05 PM Tamas K Lengyel <ta...@tklengyel.com> wrote:
>>>>>> diff --git a/xen/include/public/vm_event.h 
>>>>>> b/xen/include/public/vm_event.h
>>>>>> index 959083d8c4..76676ff4c0 100644
>>>>>> --- a/xen/include/public/vm_event.h
>>>>>> +++ b/xen/include/public/vm_event.h
>>>>>> @@ -281,6 +281,7 @@ struct vm_event_debug {
>>>>>>      uint32_t insn_length;
>>>>>>      uint8_t type;        /* HVMOP_TRAP_* */
>>>>>>      uint8_t _pad[3];
>>>>>> +    uint64_t pending_dbg;
>>>>> This is just a nitpick but I would prefer if we had the _pad field as
>>>>> the last element in the struct and keep all 64-bit members up in the
>>>>> front.
>>>> Also, since pending_dbg uses unsigned int in Xen, do we need uint64_t
>>>> for it here? Seems to me a uint32_t would suffice.
>>> Its %dr6 (but not quite, due to complexity with exception priorities,
>>> interrupt shadows, and backwards compatibility of the RTM bit with
>>> inverted polarity).  All other registers have 64 bit fields in the
>>> interface.
>>>
>>> The only interesting bits in it fall within the first 32 which is why it
>>> is handled in a shorter way within Xen.  Like %cr0, I don't expect
>>> anything interesting to appear in the upper 32 bits.
>>>
>> Perhaps it would be better to call it dr6 in the interface then to
>> make it more clear that this is a register value?
>>
> Which then begs the question, why not just use dr6 that's already
> present in the vm_event_regs_x86 struct?

Because it (specifically) isn't exactly %dr6.  The ABI it follows is
strictly like the VT-x's pending_dbg VMCS field.

All bits have positive polarity, and are specific to the debug exception
in question.

%dr6 accumulates some debug bits or-wise (and until the guest #DB
handler decides to clear them), some debug bits overwrite-wise, and some
bits with inverted polarity.

Providing %dr6 alone, either before or after merging pending_dbg, is
insufficient to disambiguate the debug exception.

pending_dbg is strictly "the new exception(s) to add into the %dr6 mix".

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to