From 9eef395fccbf9432a3c3026fdbf7e38be1a7b8ff Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 20 Jul 2021 09:28:51 +0200 Subject: [PATCH] qemu: process: Ignore 'RESET' event during startup In cases when we are adding a 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 Reviewed-by: Michal Privoznik --- src/qemu/qemu_process.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 703af95e2c..3b4af61bf8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -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); } -- 2.47.2