From 86085c9a2fb803573e102002903e636306fb1cbf Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 15 Nov 2019 12:27:42 +0100 Subject: [PATCH] qemu: Instantiate pflash via -machine when using blockdev MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Daniel P. Berrangé --- 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 904ef56a03..14afb906cb 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: @@ -10263,7 +10269,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 7ae0492a6b..59fd0c11ba 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6291,6 +6291,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) @@ -8020,6 +8022,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. */