simplify main loop functions
Provide a clean example of how to use the main loop in the tools. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
be08e65e01
commit
99435906cc
5
cpus.c
5
cpus.c
@ -626,11 +626,6 @@ void qemu_init_cpu_loop(void)
|
||||
qemu_thread_get_self(&io_thread);
|
||||
}
|
||||
|
||||
void qemu_main_loop_start(void)
|
||||
{
|
||||
resume_all_vcpus();
|
||||
}
|
||||
|
||||
void run_on_cpu(CPUState *env, void (*func)(void *data), void *data)
|
||||
{
|
||||
struct qemu_work_item wi;
|
||||
|
1
cpus.h
1
cpus.h
@ -3,7 +3,6 @@
|
||||
|
||||
/* cpus.c */
|
||||
void qemu_init_cpu_loop(void);
|
||||
void qemu_main_loop_start(void);
|
||||
void resume_all_vcpus(void);
|
||||
void pause_all_vcpus(void);
|
||||
void cpu_stop_current(void);
|
||||
|
79
vl.c
79
vl.c
@ -1428,18 +1428,49 @@ void qemu_system_vmstop_request(RunState state)
|
||||
|
||||
qemu_irq qemu_system_powerdown;
|
||||
|
||||
static bool main_loop_should_exit(void)
|
||||
{
|
||||
RunState r;
|
||||
if (qemu_debug_requested()) {
|
||||
vm_stop(RUN_STATE_DEBUG);
|
||||
}
|
||||
if (qemu_shutdown_requested()) {
|
||||
qemu_kill_report();
|
||||
monitor_protocol_event(QEVENT_SHUTDOWN, NULL);
|
||||
if (no_shutdown) {
|
||||
vm_stop(RUN_STATE_SHUTDOWN);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (qemu_reset_requested()) {
|
||||
pause_all_vcpus();
|
||||
cpu_synchronize_all_states();
|
||||
qemu_system_reset(VMRESET_REPORT);
|
||||
resume_all_vcpus();
|
||||
if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
|
||||
runstate_check(RUN_STATE_SHUTDOWN)) {
|
||||
runstate_set(RUN_STATE_PAUSED);
|
||||
}
|
||||
}
|
||||
if (qemu_powerdown_requested()) {
|
||||
monitor_protocol_event(QEVENT_POWERDOWN, NULL);
|
||||
qemu_irq_raise(qemu_system_powerdown);
|
||||
}
|
||||
if (qemu_vmstop_requested(&r)) {
|
||||
vm_stop(r);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static void main_loop(void)
|
||||
{
|
||||
bool nonblocking;
|
||||
int last_io __attribute__ ((unused)) = 0;
|
||||
int last_io = 0;
|
||||
#ifdef CONFIG_PROFILER
|
||||
int64_t ti;
|
||||
#endif
|
||||
RunState r;
|
||||
|
||||
qemu_main_loop_start();
|
||||
|
||||
for (;;) {
|
||||
do {
|
||||
nonblocking = !kvm_enabled() && last_io > 0;
|
||||
#ifdef CONFIG_PROFILER
|
||||
ti = profile_getclock();
|
||||
@ -1448,38 +1479,7 @@ static void main_loop(void)
|
||||
#ifdef CONFIG_PROFILER
|
||||
dev_time += profile_getclock() - ti;
|
||||
#endif
|
||||
|
||||
if (qemu_debug_requested()) {
|
||||
vm_stop(RUN_STATE_DEBUG);
|
||||
}
|
||||
if (qemu_shutdown_requested()) {
|
||||
qemu_kill_report();
|
||||
monitor_protocol_event(QEVENT_SHUTDOWN, NULL);
|
||||
if (no_shutdown) {
|
||||
vm_stop(RUN_STATE_SHUTDOWN);
|
||||
} else
|
||||
break;
|
||||
}
|
||||
if (qemu_reset_requested()) {
|
||||
pause_all_vcpus();
|
||||
cpu_synchronize_all_states();
|
||||
qemu_system_reset(VMRESET_REPORT);
|
||||
resume_all_vcpus();
|
||||
if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
|
||||
runstate_check(RUN_STATE_SHUTDOWN)) {
|
||||
runstate_set(RUN_STATE_PAUSED);
|
||||
}
|
||||
}
|
||||
if (qemu_powerdown_requested()) {
|
||||
monitor_protocol_event(QEVENT_POWERDOWN, NULL);
|
||||
qemu_irq_raise(qemu_system_powerdown);
|
||||
}
|
||||
if (qemu_vmstop_requested(&r)) {
|
||||
vm_stop(r);
|
||||
}
|
||||
}
|
||||
bdrv_close_all();
|
||||
pause_all_vcpus();
|
||||
} while (!main_loop_should_exit());
|
||||
}
|
||||
|
||||
static void version(void)
|
||||
@ -3445,7 +3445,10 @@ int main(int argc, char **argv, char **envp)
|
||||
|
||||
os_setup_post();
|
||||
|
||||
resume_all_vcpus();
|
||||
main_loop();
|
||||
bdrv_close_all();
|
||||
pause_all_vcpus();
|
||||
net_cleanup();
|
||||
res_free();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user