]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: process: Ignore 'RESET' event during startup
authorPeter Krempa <pkrempa@redhat.com>
Tue, 20 Jul 2021 07:28:51 +0000 (09:28 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 25 Aug 2021 13:32:45 +0000 (15:32 +0200)
In cases when we are adding a <transient/> disk with sharing backend
(and thus hotplugging it) we need to re-initialize ACPI tables so that
the VM boots from the correct device.

This has a side-effect of emitting the RESET event and forwarding it to
the clients which is not correct.

Fix this by ignoring RESET events during startup of the VM.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_process.c

index 703af95e2ce8b975fb74f10c31d5be0d92055020..3b4af61bf88b1f3e751bfa732e043a005d932931 100644 (file)
@@ -429,12 +429,24 @@ qemuProcessHandleReset(qemuMonitor *mon G_GNUC_UNUSED,
                        void *opaque)
 {
     virQEMUDriver *driver = opaque;
-    virObjectEvent *event;
+    virObjectEvent *event = NULL;
     qemuDomainObjPrivate *priv;
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
+    virDomainState state;
+    int reason;
 
     virObjectLock(vm);
 
+    state = virDomainObjGetState(vm, &reason);
+
+    /* ignore reset events on VM startup. Libvirt in certain instances does a
+     * reset during startup so that the ACPI tables are re-generated */
+    if (state == VIR_DOMAIN_PAUSED &&
+        reason == VIR_DOMAIN_PAUSED_STARTING_UP) {
+        VIR_DEBUG("ignoring reset event during startup");
+        goto unlock;
+    }
+
     event = virDomainEventRebootNewFromObj(vm);
     priv = vm->privateData;
     if (priv->agent)
@@ -443,6 +455,7 @@ qemuProcessHandleReset(qemuMonitor *mon G_GNUC_UNUSED,
     if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0)
         VIR_WARN("Failed to save status on vm %s", vm->def->name);
 
+ unlock:
     virObjectUnlock(vm);
     virObjectEventStateQueue(driver->domainEventState, event);
 }