]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Instantiate pflash via -machine when using blockdev
authorPeter Krempa <pkrempa@redhat.com>
Fri, 15 Nov 2019 11:27:42 +0000 (12:27 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 22 Nov 2019 07:32:25 +0000 (08:32 +0100)
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@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_process.c

index 904ef56a03cfe1aec47bd879313914755aaea977..14afb906cb081d3d56cb2f153aea65f89c68d3ba 100644 (file)
@@ -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;
index 7ae0492a6bc796c0ca3eeb30bcc152e48f91f0a4..59fd0c11ba164e879466dc7b5901254f0b648b86 100644 (file)
@@ -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.
      */