qemu: Avoid duplicate FakeReboot for secure guest

For secure guest, FakeReboot kills original QEMU instance and
create new one. During this process, QEMU send SHUTDOWN event
with "host-signal" reason which can trigger another FakeReboot.

Check if a FakeReboot is ongoing and bypass "host-signal"
processing which originally comes from FakeReboot.

Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Zhenzhong Duan
2025-07-25 11:36:11 +01:00
committed by Daniel P. Berrangé
parent 312c3afa48
commit 194a36f4fe
+10
View File
@@ -1073,6 +1073,16 @@ qemuMonitorEmitShutdown(qemuMonitor *mon, virTristateBool guest,
* with it here. */
if (vm->def->sec &&
vm->def->sec->sectype == VIR_DOMAIN_LAUNCH_SECURITY_TDX) {
qemuDomainObjPrivate *priv = vm->privateData;
/* For secure guest, FakeReboot kills original QEMU instance and
* create new one. During this process, QEMU send SHUTDOWN event
* with "host-signal" reason which can trigger another FakeReboot.
* Check if a FakeReboot is ongoing and bypass "host-signal"
* processing which is originally come from FakeReboot. */
if (priv->fakeReboot && STREQ_NULLABLE(reason, "host-signal"))
return;
if ((STREQ_NULLABLE(reason, "guest-shutdown") &&
vm->def->onPoweroff == VIR_DOMAIN_LIFECYCLE_ACTION_RESTART) ||
(STREQ_NULLABLE(reason, "guest-reset") &&