|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 10/11] arm/libxl: Emulated PCI device tree node in libxl
Hi Stefano,
> On 7 Oct 2021, at 1:26 am, Stefano Stabellini <sstabellini@xxxxxxxxxx> wrote:
>
> On Wed, 6 Oct 2021, Julien Grall wrote:
>> Hi Rahul,
>>
>> On 06/10/2021 19:40, Rahul Singh wrote:
>>> diff --git a/tools/libs/light/libxl_types.idl
>>> b/tools/libs/light/libxl_types.idl
>>> index 3f9fff653a..78b1ddf0b8 100644
>>> --- a/tools/libs/light/libxl_types.idl
>>> +++ b/tools/libs/light/libxl_types.idl
>>> @@ -644,6 +644,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
>>> ("arch_arm", Struct(None, [("gic_version", libxl_gic_version),
>>> ("vuart", libxl_vuart_type),
>>> + ("vpci", libxl_defbool),
>>
>> I have posted some comments regarding the field in v4. To summarize, AFAICT,
>> this option is meant to be only set by libxl but you still let the toolstack
>> (e.g. xl, libvirt) to set it.
>>
>> If you still want to expose to the toolstack, then I think the option should
>> be outside of arch_arm. Otherwise, this should be moved in an internal
>> structure (Ian, do you have any suggestion?).
>
>
> First let me premise that the patch is much better already and Rahul
> addessed my request well. However, Julien's point about not wanting to
> make a potentially breaking ABI change in libxl is a good one. FYI we
> had a few libvirt breakages due to this kind of changes in the past and
> I would certainly be happier if we didn't cause another one. And in
> general, it is better to avoid changes to the libxl ABI if we can.
>
> I think in this case we can: I looked at the patch and
> b_info.arch_arm.vpci is only used within tools/libs/light/libxl_arm.c.
> Also, we don't need b_info.arch_arm.vpci if we can access
> d_config->num_pcidevs given that the check is just based on
> d_config->num_pcidevs.
>
> So the only issue is how to check on d_config->num_pcidevs in
> libxl__prepare_dtb. libxl__prepare_dtb takes libxl_domain_build_info as
> parameter but with container_of we can retrieve libxl_domain_config and
> from there check on num_pcidevs.
>
> Something like the appended (untested). It doesn't need any libxl struct
> changes but it requires the introduction of container_of (which is a
> simple macro). Alternatively, it would be just as simple to change
> libxl__arch_domain_init_hw_description and libxl__prepare_dtb to take a
> libxl_domain_config *d_config parameter instead of a
> libxl_domain_build_info *info parameter.
Thanks for sharing the ideas to remove the arch_arm.vpci field.
I am ok with any options, but I feel second option is simple and better to
avoid
introduction of container_of(). I tested the second option and is working fine.
If everyone agree that we don’t need vpci option I will send the patch for
review
In next version.
Regards,
Rahul
>
> Ian, any thoughts?
>
>
> diff --git a/tools/libs/light/libxl_arm.c b/tools/libs/light/libxl_arm.c
> index 2be208b99b..ee1176519c 100644
> --- a/tools/libs/light/libxl_arm.c
> +++ b/tools/libs/light/libxl_arm.c
> @@ -102,10 +102,8 @@ int libxl__arch_domain_prepare_config(libxl__gc *gc,
> }
>
> /* Enable VPCI support. */
> - if (d_config->num_pcidevs) {
> + if (d_config->num_pcidevs)
> config->flags |= XEN_DOMCTL_CDF_vpci;
> - libxl_defbool_set(&d_config->b_info.arch_arm.vpci, true);
> - }
>
> return 0;
> }
> @@ -976,6 +974,7 @@ static int libxl__prepare_dtb(libxl__gc *gc,
> libxl_domain_build_info *info,
>
> const libxl_version_info *vers;
> const struct arch_info *ainfo;
> + libxl_domain_config *d_config = container_of(info, libxl_domain_config,
> b_info);
>
> vers = libxl_get_version_info(CTX);
> if (vers == NULL) return ERROR_FAIL;
> @@ -1076,7 +1075,7 @@ next_resize:
> if (info->tee == LIBXL_TEE_TYPE_OPTEE)
> FDT( make_optee_node(gc, fdt) );
>
> - if (libxl_defbool_val(info->arch_arm.vpci))
> + if (d_config->num_pcidevs)
> FDT( make_vpci_node(gc, fdt, ainfo, dom) );
>
> if (pfdt)
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |