Commit 99435906 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

simplify main loop functions



Provide a clean example of how to use the main loop in the tools.

Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent be08e65e
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -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;
+0 −1
Original line number Diff line number Diff line
@@ -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);
+41 −38
Original line number Diff line number Diff line
@@ -1428,27 +1428,9 @@ void qemu_system_vmstop_request(RunState state)

qemu_irq qemu_system_powerdown;

static void main_loop(void)
static bool main_loop_should_exit(void)
{
    bool nonblocking;
    int last_io __attribute__ ((unused)) = 0;
#ifdef CONFIG_PROFILER
    int64_t ti;
#endif
    RunState r;

    qemu_main_loop_start();

    for (;;) {
        nonblocking = !kvm_enabled() && last_io > 0;
#ifdef CONFIG_PROFILER
        ti = profile_getclock();
#endif
        last_io = main_loop_wait(nonblocking);
#ifdef CONFIG_PROFILER
        dev_time += profile_getclock() - ti;
#endif

    if (qemu_debug_requested()) {
        vm_stop(RUN_STATE_DEBUG);
    }
@@ -1457,8 +1439,9 @@ static void main_loop(void)
        monitor_protocol_event(QEVENT_SHUTDOWN, NULL);
        if (no_shutdown) {
            vm_stop(RUN_STATE_SHUTDOWN);
            } else
                break;
        } else {
            return true;
        }
    }
    if (qemu_reset_requested()) {
        pause_all_vcpus();
@@ -1477,9 +1460,26 @@ static void main_loop(void)
    if (qemu_vmstop_requested(&r)) {
        vm_stop(r);
    }
    return false;
}
    bdrv_close_all();
    pause_all_vcpus();

static void main_loop(void)
{
    bool nonblocking;
    int last_io = 0;
#ifdef CONFIG_PROFILER
    int64_t ti;
#endif
    do {
        nonblocking = !kvm_enabled() && last_io > 0;
#ifdef CONFIG_PROFILER
        ti = profile_getclock();
#endif
        last_io = main_loop_wait(nonblocking);
#ifdef CONFIG_PROFILER
        dev_time += profile_getclock() - ti;
#endif
    } 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();