[libvirt] [PATCH v2 4/5] qemu: Enforce ACPI, UEFI requirements

John Ferlan jferlan at redhat.com
Wed Mar 29 23:50:46 UTC 2017



On 03/29/2017 10:08 AM, Andrea Bolognani wrote:
> Depending on the architecture, requirements for ACPI and UEFI can
> be different; more specifically, while on x86 UEFI requires ACPI,
> on aarch64 it's the other way around.
> 
> Enforce these requirements when validating the domain, and make
> the error message more accurate by mentioning that they're not
> necessarily applicable to all architectures.
> 
> Several aarch64 test cases had to be tweaked because they would
> have failed the validation step otherwise.
> ---
>  src/qemu/qemu_command.c                              | 20 ++++----------------
>  src/qemu/qemu_domain.c                               | 20 ++++++++++++++++++++
>  .../qemuxml2argv-aarch64-aavmf-virtio-mmio.args      |  1 +
>  .../qemuxml2argv-aarch64-aavmf-virtio-mmio.xml       |  1 -
>  .../qemuxml2argv-aarch64-cpu-passthrough.args        |  1 +
>  .../qemuxml2argv-aarch64-cpu-passthrough.xml         |  1 -
>  .../qemuxml2argv-aarch64-video-virtio-gpu-pci.args   |  1 +
>  .../qemuxml2argv-aarch64-video-virtio-gpu-pci.xml    |  3 ---
>  ...xml2argv-aarch64-virt-2.6-virtio-pci-default.args |  1 +
>  ...uxml2argv-aarch64-virt-2.6-virtio-pci-default.xml |  1 -
>  .../qemuxml2argv-aarch64-virt-default-nic.args       |  1 +
>  .../qemuxml2argv-aarch64-virt-default-nic.xml        |  3 ---
>  .../qemuxml2argv-aarch64-virt-virtio.args            |  1 +
>  .../qemuxml2argv-aarch64-virt-virtio.xml             |  1 -
>  .../qemuxml2argv-aarch64-virtio-pci-default.args     |  1 +
>  .../qemuxml2argv-aarch64-virtio-pci-default.xml      |  1 -
>  ...xml2argv-aarch64-virtio-pci-manual-addresses.args |  1 +
>  ...uxml2argv-aarch64-virtio-pci-manual-addresses.xml |  1 -
>  .../qemuxml2argv-balloon-mmio-deflate.args           |  1 +
>  .../qemuxml2argv-balloon-mmio-deflate.xml            |  1 -
>  .../qemuxml2xmlout-aarch64-aavmf-virtio-mmio.xml     |  1 -
>  .../qemuxml2xmlout-aarch64-video-virtio-gpu-pci.xml  |  1 -
>  .../qemuxml2xmlout-aarch64-virtio-pci-default.xml    |  1 -
>  ...ml2xmlout-aarch64-virtio-pci-manual-addresses.xml |  1 -
>  24 files changed, 33 insertions(+), 33 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 64d2d71..5cf383a 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -9324,18 +9324,16 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
>  }
>  
>  
> -static int
> +static void
>  qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
> -                                 virDomainDefPtr def,
> -                                 virQEMUCapsPtr qemuCaps)
> +                                 virDomainDefPtr def)
>  {
> -    int ret = -1;
>      virDomainLoaderDefPtr loader = def->os.loader;
>      virBuffer buf = VIR_BUFFER_INITIALIZER;
>      int unit = 0;
>  
>      if (!loader)
> -        return 0;
> +        return;
>  
>      switch ((virDomainLoader) loader->type) {
>      case VIR_DOMAIN_LOADER_TYPE_ROM:
> @@ -9344,12 +9342,6 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
>          break;
>  
>      case VIR_DOMAIN_LOADER_TYPE_PFLASH:
> -        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_ACPI) &&
> -            def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) {
> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                           _("ACPI must be enabled in order to use UEFI"));
> -            goto cleanup;
> -        }
>  
>          if (loader->secure == VIR_TRISTATE_BOOL_YES) {
>              virCommandAddArgList(cmd,
> @@ -9387,10 +9379,7 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
>          break;
>      }
>  
> -    ret = 0;
> - cleanup:
>      virBufferFreeAndReset(&buf);
> -    return ret;
>  }
>  
>  
> @@ -9827,8 +9816,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
>      if (qemuBuildCpuCommandLine(cmd, driver, def, qemuCaps) < 0)
>          goto error;
>  
> -    if (qemuBuildDomainLoaderCommandLine(cmd, def, qemuCaps) < 0)
> -        goto error;
> +    qemuBuildDomainLoaderCommandLine(cmd, def);
>  
>      if (!migrateURI && !snapshot && qemuDomainAlignMemorySizes(def) < 0)
>          goto error;
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 458bb5f..e41e8e4 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -2884,6 +2884,26 @@ qemuDomainDefValidate(const virDomainDef *def,
>          goto cleanup;
>      }
>  
> +    /* On x86, UEFI requires ACPI */
> +    if (def->os.loader &&
> +        def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH &&
> +        ARCH_IS_X86(def->os.arch) &&
> +        def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) {
> +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                       _("UEFI requires ACPI on this architecture"));
> +        goto cleanup;
> +    }
> +
> +    /* On aarch64, ACPI requires UEFI */
> +    if (def->features[VIR_DOMAIN_FEATURE_ACPI] == VIR_TRISTATE_SWITCH_ON &&
> +        def->os.arch == VIR_ARCH_AARCH64 &&
> +        (!def->os.loader ||
> +         def->os.loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH)) {
> +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                       _("ACPI requires UEFI on this architecture"));
> +        return -1;

goto cleanup;

> +    }
> +

So as I said in my last response to v1 - are you sure there couldn't be
a guest running that now disappears because of this check?

IOW should this move to post parse processing...

ACK - if you're positive this won't affect the running guest causing it
to disappear.

John


>      if (def->os.loader &&
>          def->os.loader->secure == VIR_TRISTATE_BOOL_YES) {
>          /* These are the QEMU implementation limitations. But we




More information about the libvir-list mailing list