|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 08/12] libxl: Q35 support (new option device_model_machine)
On Tue, Mar 13, 2018 at 04:33:53AM +1000, Alexey Gerasimenko wrote:
> Provide a new domain config option to select the emulated machine type,
> device_model_machine. It has following possible values:
> - "i440" - i440 emulation (default)
> - "q35" - emulate a Q35 machine. By default, the storage interface is AHCI.
I would rather name this machine_chipset or device_model_chipset.
>
> Note that omitting device_model_machine parameter means i440 system
> by default, so the default behavior doesn't change for existing domain
> config files.
>
> Setting device_model_machine to "q35" sends '-machine q35,accel=xen'
> argument to QEMU. Unlike i440, there no separate machine type
> to enable/disable Xen platform device, it is controlled via a machine
But I assume the xen_platform_pci option still works as expected?
> property only. See 'libxl: Xen Platform device support for Q35' patch for
> a detailed description.
>
> Signed-off-by: Alexey Gerasimenko <x1917x@xxxxxxxxx>
> ---
> tools/libxl/libxl_dm.c | 16 ++++++++++------
> tools/libxl/libxl_types.idl | 7 +++++++
> tools/xl/xl_parse.c | 14 ++++++++++++++
> 3 files changed, 31 insertions(+), 6 deletions(-)
>
> diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
> index a3cddce8b7..7b531050c7 100644
> --- a/tools/libxl/libxl_dm.c
> +++ b/tools/libxl/libxl_dm.c
> @@ -1443,13 +1443,17 @@ static int
> libxl__build_device_model_args_new(libxl__gc *gc,
> flexarray_append(dm_args, b_info->extra_pv[i]);
> break;
> case LIBXL_DOMAIN_TYPE_HVM:
> - if (!libxl_defbool_val(b_info->u.hvm.xen_platform_pci)) {
> - /* Switching here to the machine "pc" which does not add
> - * the xen-platform device instead of the default "xenfv"
> machine.
> - */
> - machinearg = libxl__strdup(gc, "pc,accel=xen");
> + if (b_info->device_model_machine == LIBXL_DEVICE_MODEL_MACHINE_Q35) {
> + machinearg = libxl__sprintf(gc, "q35,accel=xen");
> } else {
> - machinearg = libxl__strdup(gc, "xenfv");
> + if (!libxl_defbool_val(b_info->u.hvm.xen_platform_pci)) {
> + /* Switching here to the machine "pc" which does not add
> + * the xen-platform device instead of the default "xenfv"
> machine.
> + */
> + machinearg = libxl__strdup(gc, "pc,accel=xen");
> + } else {
> + machinearg = libxl__strdup(gc, "xenfv");
> + }
> }
> if (b_info->u.hvm.mmio_hole_memkb) {
> uint64_t max_ram_below_4g = (1ULL << 32) -
> diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
> index 35038120ca..f3ef3cbdde 100644
> --- a/tools/libxl/libxl_types.idl
> +++ b/tools/libxl/libxl_types.idl
> @@ -101,6 +101,12 @@ libxl_device_model_version =
> Enumeration("device_model_version", [
> (2, "QEMU_XEN"), # Upstream based qemu-xen device model
> ])
>
> +libxl_device_model_machine = Enumeration("device_model_machine", [
> + (0, "UNKNOWN"),
Shouldn't this be named DEFAULT?
> + (1, "I440"),
> + (2, "Q35"),
> + ])
> +
> libxl_console_type = Enumeration("console_type", [
> (0, "UNKNOWN"),
> (1, "SERIAL"),
> @@ -491,6 +497,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
> ("device_model_ssid_label", string),
> # device_model_user is not ready for use yet
> ("device_model_user", string),
> + ("device_model_machine", libxl_device_model_machine),
>
> # extra parameters pass directly to qemu, NULL terminated
> ("extra", libxl_string_list),
> diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
> index f6842540ca..a7506a426b 100644
> --- a/tools/xl/xl_parse.c
> +++ b/tools/xl/xl_parse.c
> @@ -2110,6 +2110,20 @@ skip_usbdev:
> xlu_cfg_replace_string(config, "device_model_user",
> &b_info->device_model_user, 0);
>
> + if (!xlu_cfg_get_string (config, "device_model_machine", &buf, 0)) {
> + if (!strcmp(buf, "i440")) {
> + b_info->device_model_machine = LIBXL_DEVICE_MODEL_MACHINE_I440;
> + } else if (!strcmp(buf, "q35")) {
> + b_info->device_model_machine = LIBXL_DEVICE_MODEL_MACHINE_Q35;
> + } else {
> + fprintf(stderr,
> + "Unknown device_model_machine \"%s\" specified\n", buf);
> + exit(1);
> + }
> + } else {
> + b_info->device_model_machine = LIBXL_DEVICE_MODEL_MACHINE_UNKNOWN;
That seems to be it's usage. I'm not sure you should explicitly set it
in the default case (DEFAULT == 0 already).
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 |