Install the convertor function which enables the internals that will use
-blockdev to make qemu open the firmware image and stop using -drive.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_command.c | 14 ++++++++++----
src/qemu/qemu_process.c | 6 ++++++
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index ca864eaa6b..43e76a4e5c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -9425,7 +9425,8 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
static void
qemuBuldDomainLoaderPflashCommandLine(virCommandPtr cmd,
- virDomainLoaderDefPtr loader)
+ virDomainLoaderDefPtr loader,
+ virQEMUCapsPtr qemuCaps)
{
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
int unit = 0;
@@ -9437,6 +9438,10 @@ qemuBuldDomainLoaderPflashCommandLine(virCommandPtr cmd,
NULL);
}
+ /* with blockdev we instantiate the pflash when formatting -machine */
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV))
+ return;
+
virBufferAddLit(&buf, "file=");
virQEMUBuildBufferEscapeComma(&buf, loader->path);
virBufferAsprintf(&buf, ",if=pflash,format=raw,unit=%d", unit);
@@ -9464,7 +9469,8 @@ qemuBuldDomainLoaderPflashCommandLine(virCommandPtr cmd,
static void
qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
- virDomainDefPtr def)
+ virDomainDefPtr def,
+ virQEMUCapsPtr qemuCaps)
{
virDomainLoaderDefPtr loader = def->os.loader;
@@ -9478,7 +9484,7 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
break;
case VIR_DOMAIN_LOADER_TYPE_PFLASH:
- qemuBuldDomainLoaderPflashCommandLine(cmd, loader);
+ qemuBuldDomainLoaderPflashCommandLine(cmd, loader, qemuCaps);
break;
case VIR_DOMAIN_LOADER_TYPE_NONE:
@@ -10265,7 +10271,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
if (qemuBuildCpuCommandLine(cmd, driver, def, qemuCaps) < 0)
return NULL;
- qemuBuildDomainLoaderCommandLine(cmd, def);
+ qemuBuildDomainLoaderCommandLine(cmd, def, qemuCaps);
if (!migrateURI && !snapshot && qemuDomainAlignMemorySizes(def) <
0)
return NULL;
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 246934c634..2743af60a0 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -6293,6 +6293,8 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver,
VIR_DEBUG("Prepare bios/uefi paths");
if (qemuFirmwareFillDomain(driver, vm, flags) < 0)
goto cleanup;
+ if (qemuDomainInitializePflashStorageSource(vm) < 0)
+ goto cleanup;
VIR_DEBUG("Preparing external devices");
if (qemuExtDevicesPrepareDomain(driver, vm) < 0)
@@ -8024,6 +8026,10 @@ qemuProcessReconnect(void *opaque)
if (qemuDomainPerfRestart(obj) < 0)
goto error;
+ /* recreate the pflash storage sources */
+ if (qemuDomainInitializePflashStorageSource(obj) < 0)
+ goto error;
+
/* XXX: Need to change as long as lock is introduced for
* qemu_driver->sharedDevices.
*/
--
2.23.0