79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
64 lines
2.6 KiB
Diff
64 lines
2.6 KiB
Diff
From 44943efe8465f60315d3fb54a935d1ea190ee4fb Mon Sep 17 00:00:00 2001
|
|
From: Michal Privoznik <mprivozn@redhat.com>
|
|
Date: Tue, 8 Sep 2020 17:42:09 +0200
|
|
Subject: [PATCH 026/108] 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)
|
|
---
|
|
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 bd251c05fc..0d2439bba1 100644
|
|
--- a/src/qemu/qemu_firmware.c
|
|
+++ b/src/qemu/qemu_firmware.c
|
|
@@ -1229,9 +1229,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) {
|
|
@@ -1247,6 +1244,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.33.0
|
|
|