Re: [PATCH v6 01/23] xen: introduce CONFIG_HAS_SHARED_INFO for archs without a shared page

Oleksii Kurochko <[email protected]> Tue, 28 Jul 2026 17:29:56 +0200
Newsgroups gmane.comp.emulators.xen.devel
Message-ID <[email protected]>

On 7/21/26 4:50 PM, Jan Beulich wrote:
> On 20.07.2026 17:59, Oleksii Kurochko wrote:
>> --- a/xen/common/domctl.c
>> +++ b/xen/common/domctl.c
>> @@ -102,9 +102,14 @@ void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info)
>>   #ifdef CONFIG_MEM_PAGING
>>       info->paged_pages       = atomic_read(&d->paged_pages);
>>   #endif
>> -    info->shared_info_frame =
>> -        gfn_x(mfn_to_gfn(d, _mfn(virt_to_mfn(d->shared_info))));
>> -    BUG_ON(SHARED_M2P(info->shared_info_frame));
>> +    if ( IS_ENABLED(CONFIG_HAS_SHARED_INFO) )
>> +    {
>> +        info->shared_info_frame =
>> +            gfn_x(mfn_to_gfn(d, _mfn(virt_to_mfn(d->shared_info))));
>> +        BUG_ON(SHARED_M2P(info->shared_info_frame));
>> +    }
>> +    else
>> +        info->shared_info_frame = gfn_x(INVALID_GFN);
> 
> There's one issue left here: INVALID_GFN is a Xen internal concept. It could
> change value if we saw a need. Therefore you cannot use that value here, to
> supply it as hypercall output. It needs to be ~0, and imo the public header
> also wants amending to indicate the special meaning of this value.

I think I get your point. I will use ~0 here.

I don't see INVALID_GFN in public headers. If it exists then it isn't 
clear why it shouldn't be used here.

Don't we want to add something like:

/* Domain has no shared_info page? */
#define XEN_INVALID_SHARED_INFO_FRAME (~0ULL)
     uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */

in public/domctl.h.

> 
> And there's one further aspect to consider: Do we really want to retain the
> shared_info struct domain field when !HAS_SHARED_INFO? 

I think we could consider that.

> Making it conditional
> would require some adjustment here, but might be tidier overall. In
> particular doing so would eliminate the risk of new uses of the field
> appearing, with people not noticing that they'd break RISC-V.

Would you be okay with the following change:

+#ifdef CONFIG_HAS_SHARED_INFO
+    info->shared_info_frame =
+        gfn_x(mfn_to_gfn(d, _mfn(virt_to_mfn(d->shared_info))));
+    BUG_ON(SHARED_M2P(info->shared_info_frame));
+#else
+    info->shared_info_frame = ~0;
+#endif

~ Oleksii