[libvirt PATCH 1/2] conf: support stateless UEFI firmware
Andrea Bolognani
abologna at redhat.com
Fri Jul 29 13:47:53 UTC 2022
Apologies for this feedback coming very late - not just post-merge
but also extremely close to release.
On Fri, Jul 22, 2022 at 05:23:16PM +0100, Daniel P. Berrangé wrote:
> diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
> index 3ea094e64c..4199abfd1a 100644
> --- a/docs/formatdomain.rst
> +++ b/docs/formatdomain.rst
> @@ -242,7 +242,11 @@ harddisk, cdrom, network) determining where to obtain/find the boot image.
> firmwares may implement the Secure boot feature. Attribute ``secure`` can be
> used to tell the hypervisor that the firmware is capable of Secure Boot feature.
> It cannot be used to enable or disable the feature itself in the firmware.
> - :since:`Since 2.1.0`
> + :since:`Since 2.1.0`. If the loader is marked as read-only, then with UEFI it
> + is assumed that there will be a writable NVRAM available. In some cases,
> + however, it may be desirable for the loader to run without any NVRAM, discarding
> + any config changes on shutdown. The ``stateless`` flag can be used to control
> + this behaviour, when set to ``no`` NVRAM will never be created.
Isn't the actual behavior the opposite of what you're describing
here? That is, stateless=yes is what causes the NVRAM file to not be
created.
> +++ b/src/conf/domain_validate.c
> @@ -1672,6 +1672,32 @@ virDomainDefOSValidate(const virDomainDef *def,
> }
> }
>
> + if (loader->stateless == VIR_TRISTATE_BOOL_YES) {
> + if (loader->nvramTemplate) {
> + virReportError(VIR_ERR_XML_DETAIL, "%s",
> + _("NVRAM template is not permitted when loader is stateless"));
> + return -1;
> + }
> +
> + if (loader->nvram) {
> + virReportError(VIR_ERR_XML_DETAIL, "%s",
> + _("NVRAM is not permitted when loader is stateless"));
> + return -1;
> + }
> + } else if (loader->stateless == VIR_TRISTATE_BOOL_NO) {
> + if (def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) {
> + if (def->os.loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH) {
> + virReportError(VIR_ERR_XML_DETAIL, "%s",
> + _("Only pflash loader type permits NVRAM"));
> + return -1;
> + }
> + } else if (def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_EFI) {
> + virReportError(VIR_ERR_XML_DETAIL, "%s",
> + _("Only EFI firmware permits NVRAM"));
> + return -1;
> + }
These last two error messages could be improved IMO.
Consider the firmware-auto-bios-not-stateless test case, where the
input configuration looks like
<os firmware='bios'>
<type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
<loader stateless='no'/>
</os>
In this case, printing out
Only EFI firmware permits NVRAM
is a bit confusing, since the user has not directly mentioned NVRAM
anywhere. Something along the lines of
virReportError(VIR_ERR_XML_DETAIL,
_("Firmware type '%s' only supports stateless operations"),
virDomainOsDefFirmwareTypeToString(def->os.firmware));
would be more understandable and actionable, I think.
--
Andrea Bolognani / Red Hat / Virtualization
More information about the libvir-list
mailing list