Commit 12e9700d authored by Alex Bennée's avatar Alex Bennée Committed by Paolo Bonzini
Browse files

cpus: re-factor out handle_icount_deadline



In preparation for adding a MTTCG thread we re-factor out a bit of what
will be common code to handle the QEMU_CLOCK_VIRTUAL expiration.

Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
Reviewed-by: default avatarRichard Henderson <rth@twiddle.net>
Message-Id: <20161027151030.20863-18-alex.bennee@linaro.org>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent c93bbbef
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -1076,6 +1076,18 @@ static int64_t tcg_get_icount_limit(void)
    }
}

static void handle_icount_deadline(void)
{
    if (use_icount) {
        int64_t deadline =
            qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);

        if (deadline == 0) {
            qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
        }
    }
}

static int tcg_cpu_exec(CPUState *cpu)
{
    int ret;
@@ -1198,13 +1210,8 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
        /* Pairs with smp_wmb in qemu_cpu_kick.  */
        atomic_mb_set(&exit_request, 0);

        if (use_icount) {
            int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
        handle_icount_deadline();

            if (deadline == 0) {
                qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
            }
        }
        qemu_tcg_wait_io_event(QTAILQ_FIRST(&cpus));
        deal_with_unplugged_cpus();
    }