On 20/08/2018 10:06, Wei Liu wrote:
> On Sun, Aug 19, 2018 at 05:48:17PM +0100, Andrew Cooper wrote:
>> On 17/08/2018 16:12, Wei Liu wrote:
>>> Since it is defined in common header file, introduce CONFIG_HVM to
>>> Arm to avoid breakage.
>>>
>>> Signed-off-by: Wei Liu <wei.l...@citrix.com>
>>> ---
>>>  xen/arch/arm/Kconfig    | 3 +++
>>>  xen/include/xen/sched.h | 6 ++++++
>>>  2 files changed, 9 insertions(+)
>>>
>>> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
>>> index 586bc62..c0e969e 100644
>>> --- a/xen/arch/arm/Kconfig
>>> +++ b/xen/arch/arm/Kconfig
>>> @@ -52,6 +52,9 @@ config HAS_ITS
>>>          prompt "GICv3 ITS MSI controller support" if EXPERT = "y"
>>>          depends on GICV3 && !NEW_VGIC
>>>  
>>> +config HVM
>>> +        def_bool y
>>> +
>>>  config NEW_VGIC
>>>     bool
>>>     prompt "Use new VGIC implementation"
>>> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
>>> index 51ceebe..8fc3423 100644
>>> --- a/xen/include/xen/sched.h
>>> +++ b/xen/include/xen/sched.h
>>> @@ -879,8 +879,14 @@ void watchdog_domain_destroy(struct domain *d);
>>>  
>>>  #define is_pv_domain(d) ((d)->guest_type == guest_type_pv)
>>>  #define is_pv_vcpu(v)   (is_pv_domain((v)->domain))
>>> +
>>> +#if CONFIG_HVM
>>>  #define is_hvm_domain(d) ((d)->guest_type == guest_type_hvm)
>>> +#else
>>> +#define is_hvm_domain(d) (0)
>>> +#endif
>>>  #define is_hvm_vcpu(v)   (is_hvm_domain(v->domain))
>> The need for the following patch is caused by a bug here, in that you
>> don't evaluate d.
> I know. I didn't classified that as a bug though.

I'm afraid that the x86 maintainership will disagree with you there.

>
>> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
>> index 51ceebe..fdd18a7 100644
>> --- a/xen/include/xen/sched.h
>> +++ b/xen/include/xen/sched.h
>> @@ -879,8 +879,17 @@ void watchdog_domain_destroy(struct domain *d);
>>
>>  #define is_pv_domain(d) ((d)->guest_type == guest_type_pv)
>>  #define is_pv_vcpu(v)   (is_pv_domain((v)->domain))
>> -#define is_hvm_domain(d) ((d)->guest_type == guest_type_hvm)
>> -#define is_hvm_vcpu(v)   (is_hvm_domain(v->domain))
>> +
>> +static inline bool is_hvm_domain(const struct domain *d)
>> +{
>> +    return IS_ENABLED(CONFIG_HVM) ? d->guest_type == guest_type_hvm : false;
>> +}
>> +
>> +static inline bool is_hvm_vcpu(const struct vcpu *v)
>> +{
>> +    return is_hvm_domain(v->domain);
>> +}
>> +
> This should work too. I'm not too fuss whether is_hvm_* are macros or
> functions.

static inlines are superior to macros in a lot of ways.  If in doubt,
use a static inline (if you can.  we've got some header file tangles
which occasionally make it very hard to use static inlines).

>
>>  #define is_pinned_vcpu(v) ((v)->domain->is_pinned || \
>>                             cpumask_weight((v)->cpu_hard_affinity) == 1)
>>  #ifdef CONFIG_HAS_PASSTHROUGH
>>
>> seems to compile, and should DTRT including all appropriate parameter
>> evaluation.
> I will test if DCE works properly with static inline functions.

It does (/should).

~Andrew

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

Reply via email to