|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V3] xen/vm_event: Clean up control-register-write vm_events
On 05/20/2015 06:48 PM, Jan Beulich wrote:
>>>> On 20.05.15 at 17:24, <rcojocaru@xxxxxxxxxxxxxxx> wrote:
>> On 05/20/2015 05:53 PM, Jan Beulich wrote:
>>>>>> On 19.05.15 at 10:31, <rcojocaru@xxxxxxxxxxxxxxx> wrote:
>>>> --- a/xen/arch/x86/hvm/event.c
>>>> +++ b/xen/arch/x86/hvm/event.c
>>>> @@ -88,55 +88,29 @@ static int hvm_event_traps(uint8_t sync,
>> vm_event_request_t *req)
>>>> return 1;
>>>> }
>>>>
>>>> -static inline
>>>> -void hvm_event_cr(uint32_t reason, unsigned long value,
>>>> - unsigned long old, bool_t onchangeonly, bool_t
>>>> sync)
>>>> +void hvm_event_cr(unsigned short index, unsigned long value, unsigned
>>>> long old)
>>>
>>> What's the point of using "unsigned short" here?
>>
>> As opposed to an uint8_t? This would allow the hvm_event_cr() signature
>> to remain unmodified longer if more than 4 control register events are
>> added in the future, and it is the least wasteful of the
>> bigger-than-char-sized integers.
>
> No, opposed to "unsigned int".
Ack, will change it to unsigned int.
>>>> @@ -3201,6 +3204,8 @@ int hvm_set_cr0(unsigned long value)
>>>> goto gpf;
>>>> }
>>>>
>>>> + hvm_event_cr(VM_EVENT_X86_CR0, value, old_value);
>>>> +
>>>> if ( (value & X86_CR0_PG) && !(old_value & X86_CR0_PG) )
>>>> {
>>>> if ( v->arch.hvm_vcpu.guest_efer & EFER_LME )
>>>
>>> If the monitor's response isn't being checked (i.e. "deny" not [yet]
>>> being honored), what's the point of moving the generation of the
>>> event in this patch (which would be involved enough without these
>>> extra adjustments)?
>>
>> Consistency. Since the patch concerns itself with cleaning up the
>> control register events a bit, it didn't seem too far-fetched to assume
>> that having the control register write vm_events sent at the same place
>> as the MSR events fits the concept.
>>
>> But I am happy to do this in the DENY patch in the next iteration of the
>> series if so requested.
>
> In small patches I don't mind multiple things to be done together.
> But large patches should focus on one thing at a time.
Understood, will withhold the reordering of control register vm_events
in V4.
>>>> +/* Supported values for the vm_event_write_ctrlreg index. */
>>>> +#define VM_EVENT_X86_CR0 (1 << 0)
>>>> +#define VM_EVENT_X86_CR3 (1 << 1)
>>>> +#define VM_EVENT_X86_CR4 (1 << 2)
>>>> +#define VM_EVENT_X86_XCR0 (1 << 3)
>>>
>>> Why bit masks rather than an enumeration like thing?
>>
>> Ack, will change it to an enum. That would have been my first preference
>> too, but the header just seemed to be more #define-oriented and I tried
>> to follow suit.
>
> And I didn't say use an enum, I intentionally said enum like.
I see. They're bitmasks because it makes it easy to use them with the
X-bit wide (where X is the number of control register event indices)
flags write_ctrlreg_enabled, write_ctrlreg_sync and
write_ctrlreg_onchangeonly. It makes no difference for the .index field
of the actual event, you are right indeed that it would not make sense
for .index to consist of OR-ed bit masks.
I can change them to 0, 1, 2, and so on, and use individual single-bit
bitfields for write_ctrlreg_enabled & friends, but this way makes it
trivial to add a new control register vm_event: just use 1 << next
available position and widen the proper domain bitfields by one, and the
new vm_event is ready to use.
Thanks,
Razvan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |