70 lines
2.9 KiB
Diff
70 lines
2.9 KiB
Diff
|
From 1824bb0b44b47af95f50afd626776acfba91174d Mon Sep 17 00:00:00 2001
|
||
|
Message-Id: <1824bb0b44b47af95f50afd626776acfba91174d@dist-git>
|
||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||
|
Date: Wed, 7 Oct 2020 13:20:04 +0200
|
||
|
Subject: [PATCH] qemuFirmwareFillDomain: Fill NVRAM template on migration too
|
||
|
|
||
|
In 8e1804f9f66 I've tried to fix the following use case: domain
|
||
|
is started with path to UEFI only and relies on libvirt to figure
|
||
|
out corresponding NVRAM template to create a per-domain copy
|
||
|
from. The fix consisted of having a check tailored exactly for
|
||
|
this use case and if it's hit then using FW autoselection to
|
||
|
figure it out. Unfortunately, the NVRAM template is not saved in
|
||
|
the inactive XML (well, the domain might be transient anyway).
|
||
|
Then, as a part of that check we see whether the per-domain copy
|
||
|
doesn't exist already and if it does then no template is looked
|
||
|
up hence no template will appear in the live XML.
|
||
|
|
||
|
This works, until the domain is migrated. At the destination, the
|
||
|
per-domain copy will not exist so we need to know the template to
|
||
|
create the per-domain copy from. But we don't even get to the
|
||
|
check because we are not starting a fresh new domain and thus the
|
||
|
qemuFirmwareFillDomain() function quits early.
|
||
|
|
||
|
The solution is to switch order of these two checks. That is
|
||
|
evaluate the check for the old style before checking flags.
|
||
|
|
||
|
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1852910
|
||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||
|
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||
|
(cherry picked from commit c43622f06e295edcb9cedf33583f0bd18fb04b10)
|
||
|
|
||
|
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1880418
|
||
|
|
||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||
|
Message-Id: <9b91110a238eba22f4b876e7b15a25d5113ee91e.1602069592.git.mprivozn@redhat.com>
|
||
|
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||
|
---
|
||
|
src/qemu/qemu_firmware.c | 8 +++++---
|
||
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||
|
index 68e2c6b40f..c84d03f0a8 100644
|
||
|
--- a/src/qemu/qemu_firmware.c
|
||
|
+++ b/src/qemu/qemu_firmware.c
|
||
|
@@ -1241,9 +1241,6 @@ qemuFirmwareFillDomain(virQEMUDriverPtr driver,
|
||
|
size_t i;
|
||
|
int ret = -1;
|
||
|
|
||
|
- if (!(flags & VIR_QEMU_PROCESS_START_NEW))
|
||
|
- return 0;
|
||
|
-
|
||
|
/* Fill in FW paths if either os.firmware is enabled, or
|
||
|
* loader path was provided with no nvram varstore. */
|
||
|
if (def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) {
|
||
|
@@ -1259,6 +1256,11 @@ qemuFirmwareFillDomain(virQEMUDriverPtr driver,
|
||
|
/* ... then we want to consult JSON FW descriptors first,
|
||
|
* but we don't want to fail if we haven't found a match. */
|
||
|
needResult = false;
|
||
|
+ } else {
|
||
|
+ /* Domain has FW autoselection enabled => do nothing if
|
||
|
+ * we are not starting it from scratch. */
|
||
|
+ if (!(flags & VIR_QEMU_PROCESS_START_NEW))
|
||
|
+ return 0;
|
||
|
}
|
||
|
|
||
|
if ((nfirmwares = qemuFirmwareFetchParsedConfigs(driver->privileged,
|
||
|
--
|
||
|
2.28.0
|
||
|
|