Re: [PATCH 2/2] tools/ocaml: Fill arch_config for ARM in domain_getinfo{,list}()

Julian Vetter <[email protected]> Thu, 30 Jul 2026 10:43:08 +0200
Newsgroups gmane.comp.emulators.xen.devel
Message-ID <1785400990.8631fc262581453bbf619ec5b2062170.19fb2311930000e099@vates.tech>

On 7/28/26 17:48, Andrew Cooper wrote:
> From: Julian Vetter <[email protected]>
> 
> Add the missing ARM logic, populating xen_arm_arch_domainconfig
> from the raw xc_domaininfo_t the same way the x86 branch does for
> xen_x86_arch_domainconfig.
> 
> Signed-off-by: Julian Vetter <[email protected]>
> Signed-off-by: Andrew Cooper <[email protected]>
> ---
> CC: Andrew Cooper <[email protected]>
> CC: Andrii Sultanov <[email protected]>
> CC: Guillaume Thouvenin <[email protected]>
> CC: Julian Vetter <[email protected]>
> CC: Oleksii Kurochko <[email protected]>
> ---
>   tools/ocaml/libs/xc/xenctrl_stubs.c | 16 ++++++++++++++--
>   1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c
> index 441e1d83cfec..fb983709066f 100644
> --- a/tools/ocaml/libs/xc/xenctrl_stubs.c
> +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
> @@ -444,9 +444,21 @@ static value alloc_domaininfo(xc_domaininfo_t * info)
>   
>   	Store_field(result, 15, tmp);
>   
> -#if defined(__i386__) || defined(__x86_64__)
> +#if defined(__arm__) || defined(__aarch64__)
>   
> -	tag = 1; /* tag x86 */
> +	tag = 0; /* tag ARM */
> +
> +        /* xen_arm_arch_domainconfig */
> +        arch_config = caml_alloc_tuple(3);
> +        Field(arch_config, 0) = Val_int(info->arch_config.gic_version);
> +        Field(arch_config, 1) = Val_int(info->arch_config.nr_spis);
> +
> +	tmp = caml_copy_int32(info->arch_config.clock_frequency);
> +        Field(arch_config, 2) = tmp;

Shouldn't the Field() be a `Store_field(arch_config, 2, tmp);`, because 
the `caml_copy_int32` makes an allocation on the minor heap to allow 
OCAML's GC to keep track of this pointer if ever the arch_config is 
promoted?

> +
> +#elif defined(__i386__) || defined(__x86_64__)
> +
> +        tag = 1; /* tag x86 */
>   
>   	/*
>   	 * emulation_flags: x86_arch_emulation_flags list;



-- 
Julian Vetter | Vates Hypervisor & Kernel Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech