|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/2] tools/libxl: Switch Arm guest type to PVH
On Wed, Aug 22, 2018 at 06:48:05PM +0100, Julien Grall wrote:
> Hi Roger,
>
> On 22/08/18 16:18, Roger Pau Monné wrote:
> > On Wed, Aug 22, 2018 at 04:00:45PM +0100, Julien Grall wrote:
> > > -void libxl__arch_domain_build_info_setdefault(libxl_domain_build_info
> > > *b_info)
> > > +void libxl__arch_domain_build_info_setdefault(libxl__gc *gc,
> > > + libxl_domain_build_info
> > > *b_info)
> > > {
> > > /* ACPI is disabled by default */
> > > libxl_defbool_setdefault(&b_info->acpi, false);
> > > +
> > > + /*
> > > + * Arm guest are now considered as PVH by the toolstack. To allow
> > > + * compatibility with previous toolstack, PV guest are automatically
> > > + * converted to PVH.
> > > + */
> > > + if (b_info->type != LIBXL_DOMAIN_TYPE_PV)
> > > + return;
> > > +
> > > + LOG(WARN, "Converting PV guest to PVH");
> > > + LOG(WARN, "ARM guest are now PVH. Please update your toolstack.");
> >
> > "Please update your configuration file.". Updating the toolstack won't
> > make this message go away AFAICT :).
>
> In the case of libvirt, you don't have PVH support. So you would need to
> update your toolstack here.
>
> How about "Please fix your configuration file/toolstack"?
I would use "fix your configuration or update your toolstack", but I'm
fine with the above.
> >
> > > +
> > > + b_info->type = LIBXL_DOMAIN_TYPE_PVH;
> > > +
> > > + /*
> > > + * They only field in u.pv that matters on Arm are: kernel, cmdline,
> > > + * ramdisk.
> > > + */
> > > +
> > > + if (!b_info->kernel && b_info->u.pv.kernel)
> > > + b_info->kernel = b_info->u.pv.kernel;
> > > +
> > > + if (!b_info->ramdisk && b_info->u.pv.ramdisk)
> > > + b_info->ramdisk = b_info->u.pv.ramdisk;
> > > +
> > > + if (!b_info->cmdline && b_info->u.pv.cmdline)
> > > + b_info->cmdline = b_info->u.pv.cmdline;
> > > +
> > > + /* Reset b_info->u.pvh to default values */
> > > + memset(&b_info->u.pvh, 0, sizeof(b_info->u.pvh));
> >
> > I'm afraid that's not correct. The default values for u.pvh are set
> > by libxl__domain_build_info_setdefault.
>
> I thought that this should be covered by the switch right after the call of
> libxl__arch_domain_build_info_setdefault. Did I miss anything?
Oh right, libxl__arch_domain_build_info_setdefault is called by
libxl__domain_build_info_setdefault.
> What I wanted to do here is resetting the union to 0 so you don't get data
> mangled by the pv fields.
Another possible option I think would be to mark those fields as
deprecated in the IDL, and libxl__domain_build_info_copy_deprecated
will take care of copying them to the new place. In fact I think all
guest types should be using the top level kernel, ramdisk and cmdline
fields.
I'm not specially comfortable with changing the guest type in the
middle of libxl__domain_build_info_setdefault, but I also don't have a
much better suggestion apart from using the deprecation helper.
From what you say above I assume bootloader or bootloader arguments
are not used by ARM?
> >
> > > }
> > > /*
> > > diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> > > index d4fa06daea..a6431c5d3f 100644
> > > --- a/tools/libxl/libxl_create.c
> > > +++ b/tools/libxl/libxl_create.c
> > > @@ -215,7 +215,7 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
> > > if (!b_info->event_channels)
> > > b_info->event_channels = 1023;
> > > - libxl__arch_domain_build_info_setdefault(b_info);
> > > + libxl__arch_domain_build_info_setdefault(gc, b_info);
> > > libxl_defbool_setdefault(&b_info->dm_restrict, false);
> > > switch (b_info->type) {
> > > diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c
> > > index 81523a568f..8b6759c089 100644
> > > --- a/tools/libxl/libxl_x86.c
> > > +++ b/tools/libxl/libxl_x86.c
> > > @@ -613,7 +613,8 @@ int
> > > libxl__arch_domain_finalise_hw_description(libxl__gc *gc,
> > > return rc;
> > > }
> > > -void libxl__arch_domain_build_info_setdefault(libxl_domain_build_info
> > > *b_info)
> > > +void libxl__arch_domain_build_info_setdefault(libxl__gc *gc,
> > > + libxl_domain_build_info
> > > *b_info)
> > > {
> > > libxl_defbool_setdefault(&b_info->acpi, true);
> > > }
> > > diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
> > > index 971ec1bc56..0bda28152b 100644
> > > --- a/tools/xl/xl_parse.c
> > > +++ b/tools/xl/xl_parse.c
> > > @@ -1286,7 +1286,11 @@ void parse_config_data(const char *config_source,
> > > }
> > > if (c_info->type == LIBXL_DOMAIN_TYPE_INVALID)
> > > +#if defined(__arm__) || defined(__aarch64__)
> >
> > I think #ifdef CONFIG_ARM should DTRT and it's cleaner IMO.
>
> CONFIG_ARM is not defined in the tools C source. So that's the only way to
> know if you are on Arm. This follows what is done in libxc.
>
> I would be happy to introduce CONFIG_ARM/CONFIG_X86 if people thinks this
> would be useful in other places.
The tools makefile already uses CONFIG_ARM/X86, so I think it would
make sense to have this for the code as well. In any case, I don't
feel this should be done just for this patch, so I'm fine as-is.
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |