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