[libvirt] [PATCH 6/6] qemu: Instantiate pflash via -machine when using blockdev

Peter Krempa pkrempa at redhat.com
Fri Nov 15 15:51:52 UTC 2019


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 at 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




More information about the libvir-list mailing list