QMP: Introduce basic asynchronous events

Debug, shutdown, reset, powerdown and stop are all basic events,
as they are very simple they can be added in the same commit.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Luiz Capitulino 2009-11-26 22:59:04 -02:00 committed by Anthony Liguori
parent 0d1ea871b0
commit b1a15e7eaa
3 changed files with 29 additions and 2 deletions

View file

@ -342,6 +342,21 @@ void monitor_protocol_event(MonitorEvent event, QObject *data)
return; return;
switch (event) { switch (event) {
case EVENT_DEBUG:
event_name = "DEBUG";
break;
case EVENT_SHUTDOWN:
event_name = "SHUTDOWN";
break;
case EVENT_RESET:
event_name = "RESET";
break;
case EVENT_POWERDOWN:
event_name = "POWERDOWN";
break;
case EVENT_STOP:
event_name = "STOP";
break;
default: default:
abort(); abort();
break; break;

View file

@ -15,6 +15,11 @@ extern Monitor *cur_mon;
/* QMP events */ /* QMP events */
typedef enum MonitorEvent { typedef enum MonitorEvent {
EVENT_DEBUG,
EVENT_SHUTDOWN,
EVENT_RESET,
EVENT_POWERDOWN,
EVENT_STOP,
EVENT_MAX, EVENT_MAX,
} MonitorEvent; } MonitorEvent;

11
vl.c
View file

@ -4060,9 +4060,12 @@ static void main_loop(void)
#endif #endif
} while (vm_can_run()); } while (vm_can_run());
if (qemu_debug_requested()) if (qemu_debug_requested()) {
monitor_protocol_event(EVENT_DEBUG, NULL);
vm_stop(EXCP_DEBUG); vm_stop(EXCP_DEBUG);
}
if (qemu_shutdown_requested()) { if (qemu_shutdown_requested()) {
monitor_protocol_event(EVENT_SHUTDOWN, NULL);
if (no_shutdown) { if (no_shutdown) {
vm_stop(0); vm_stop(0);
no_shutdown = 0; no_shutdown = 0;
@ -4070,15 +4073,19 @@ static void main_loop(void)
break; break;
} }
if (qemu_reset_requested()) { if (qemu_reset_requested()) {
monitor_protocol_event(EVENT_RESET, NULL);
pause_all_vcpus(); pause_all_vcpus();
qemu_system_reset(); qemu_system_reset();
resume_all_vcpus(); resume_all_vcpus();
} }
if (qemu_powerdown_requested()) { if (qemu_powerdown_requested()) {
monitor_protocol_event(EVENT_POWERDOWN, NULL);
qemu_irq_raise(qemu_system_powerdown); qemu_irq_raise(qemu_system_powerdown);
} }
if ((r = qemu_vmstop_requested())) if ((r = qemu_vmstop_requested())) {
monitor_protocol_event(EVENT_STOP, NULL);
vm_stop(r); vm_stop(r);
}
} }
pause_all_vcpus(); pause_all_vcpus();
} }