|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 07/11] xen: move domain_use_host_layout() to common code
On 01.04.2026 16:38, Oleksii Kurochko wrote:
>
>
> On 4/1/26 7:58 AM, Jan Beulich wrote:
>> On 31.03.2026 18:32, Oleksii Kurochko wrote:
>>> On 3/31/26 5:53 PM, Jan Beulich wrote:
>>>> On 31.03.2026 17:20, Oleksii Kurochko wrote:
>>>>> On 3/30/26 5:13 PM, Jan Beulich wrote:
>>>>>> On 23.03.2026 17:29, Oleksii Kurochko wrote:
>>>>>>> domain_use_host_layout() is not really architecture-specific, so move it
>>>>>>> from the Arm header to the common header xen/domain.h and provide a
>>>>>>> common
>>>>>>> implementation in xen/common/domain.c. domain_use_host_layout()
>>>>>>> potentially
>>>>>>> is needed for x86 [1].
>>>>>> No matter that this may indeed be true, ...
>>>>>>
>>>>>>> Turn the macro into a function to avoid header dependency issues.
>>>>>> ... this introduces unreachable code on x86, i.e. a Misra rule 2.1
>>>>>> violation.
>>>>> Do we have some deviation tag for such cases when the code temporary
>>>>> isn't used?
>>>> I'm sorry, but it'll take me about as long as you to find out.
>>> Sure, I will take a look. I just thought that maybe you have a solution
>>> already just in your head.
>> Well, I do: Don't make this an out-of-line function.
>>
>>> I wonder
>>>> about "temporary" though: Do you have a clear understanding as to when
>>>> that will change?
>>> No, I don't. As Stefano mentioned they will need this function one day.
>>> Another option we could use ifndef x86 or ifdef DOM0_LESS and then when
>>> someone will really need it on x86, this ifdef will be dropped. I don't
>>> know if it is better solution.
>>>
>>> It seems like the best one solution will still make a try to make
>>> declare this function as macro.
>> Or an inline function. There's nothing ...
>>
>>>>>>> @@ -2544,6 +2544,12 @@ void thaw_domains(void)
>>>>>>>
>>>>>>> #endif /* CONFIG_SYSTEM_SUSPEND */
>>>>>>>
>>>>>>> +bool domain_use_host_layout(struct domain *d)
>>>>>>> +{
>>>>>>> + return is_domain_direct_mapped(d) ||
>>>>>>> + (paging_mode_translate(d) && is_hardware_domain(d));
>>>>>>> +}
>>>>>> The placement of paging_mode_translate() doesn't match ...
>>>>>>
>>>>>>> --- a/xen/include/xen/domain.h
>>>>>>> +++ b/xen/include/xen/domain.h
>>>>>>> @@ -62,6 +62,22 @@ void domid_free(domid_t domid);
>>>>>>> #define is_domain_direct_mapped(d) ((d)->cdf & CDF_directmap)
>>>>>>> #define is_domain_using_staticmem(d) ((d)->cdf & CDF_staticmem)
>>>>>>>
>>>>>>> +/*
>>>>>>> + * Is the auto-translated domain using the host memory layout?
>>>>>>> + *
>>>>>>> + * domain_use_host_layout() is always False for PV guests.
>>>>>> ... the description of the function.
>>>>> But why the placement should be different?
>>>> If you focus on auto-translated, then imo paging_mode_translate()
>>>> better would guard everything.
>>> Then it make sense to do in the following way:
>>> bool domain_use_host_layout(struct domain *d)
>>> {
>>> - return is_domain_direct_mapped(d) ||
>>> - (paging_mode_translate(d) && is_hardware_domain(d));
>>> + return paging_mode_translate(d) &&
>>> + (is_domain_direct_mapped(d) || is_hardware_domain(d));
>>> }
>> ... in here which clearly speaks against doing so. And yes, this is what I
>> was asking for (with the function parameter also suitably constified).
>
> I expect that with an inline function in xen/domain.h compiler will want
> have paging_mode_translate() be explicitly defined, so an inclusion of
> xen/paging.h will be needed, but likely I am wrong that it will be
> needed it the case of inline function.
I don't think you're wrong with that. What I don't understand is why it
needs to be xen/domain.h where the function would be placed. If need be
you could make an entirely new header, where (presumably) you're not
going to have any include recursion concerns.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |