From 03c42a4510f3232cb85c673f7f02208d56169eca Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Tue, 4 Sep 2012 12:01:43 +0200 Subject: [PATCH] qemu: Fix reboot with guest agent When reboot using qemu guest agent was requested, qemu driver kept waiting for SHUTDOWN event from qemu. However, such event is never emitted during guest reboot and qemu driver would keep waiting forever. --- src/qemu/qemu_agent.c | 5 ++++- src/qemu/qemu_agent.h | 3 ++- src/qemu/qemu_process.c | 6 ++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c index 51e60d21e3..804c424ca0 100644 --- a/src/qemu/qemu_agent.c +++ b/src/qemu/qemu_agent.c @@ -1294,7 +1294,10 @@ int qemuAgentShutdown(qemuAgentPtr mon, if (!cmd) return -1; - mon->await_event = QEMU_AGENT_EVENT_SHUTDOWN; + if (mode == QEMU_AGENT_SHUTDOWN_REBOOT) + mon->await_event = QEMU_AGENT_EVENT_RESET; + else + mon->await_event = QEMU_AGENT_EVENT_SHUTDOWN; ret = qemuAgentCommand(mon, cmd, &reply, VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK); diff --git a/src/qemu/qemu_agent.h b/src/qemu/qemu_agent.h index 528fee12e4..18740ba6a5 100644 --- a/src/qemu/qemu_agent.h +++ b/src/qemu/qemu_agent.h @@ -55,7 +55,8 @@ void qemuAgentClose(qemuAgentPtr mon); typedef enum { QEMU_AGENT_EVENT_NONE = 0, QEMU_AGENT_EVENT_SHUTDOWN, - QEMU_AGENT_EVENT_SUSPEND + QEMU_AGENT_EVENT_SUSPEND, + QEMU_AGENT_EVENT_RESET, } qemuAgentEvent; void qemuAgentNotifyEvent(qemuAgentPtr mon, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 5c3b89ebe2..93653c6da8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -511,9 +511,15 @@ qemuProcessHandleReset(qemuMonitorPtr mon ATTRIBUTE_UNUSED, { struct qemud_driver *driver = qemu_driver; virDomainEventPtr event; + qemuDomainObjPrivatePtr priv; virDomainObjLock(vm); + event = virDomainEventRebootNewFromObj(vm); + priv = vm->privateData; + if (priv->agent) + qemuAgentNotifyEvent(priv->agent, QEMU_AGENT_EVENT_RESET); + virDomainObjUnlock(vm); if (event) { -- GitLab