[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v2 07/11] tcg: cpus rm tcg_exec_all()
From: |
Sergey Fedorov |
Subject: |
Re: [Qemu-devel] [RFC v2 07/11] tcg: cpus rm tcg_exec_all() |
Date: |
Thu, 26 May 2016 14:03:56 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 |
On 05/04/16 18:32, Alex Bennée wrote:
> diff --git a/cpus.c b/cpus.c
> index e118fdf..46732a5 100644
> --- a/cpus.c
> +++ b/cpus.c
(snip)
> @@ -1109,7 +1108,7 @@ static void *qemu_dummy_cpu_thread_fn(void *arg)
> #endif
> }
>
> -static void tcg_exec_all(void);
> +static int tcg_cpu_exec(CPUState *cpu);
Why don't just move tcg_cpu_exec() here and avoid this forward
declaration. Such forward declarations of static functions are a bit
annoying :)
>
> static void *qemu_tcg_cpu_thread_fn(void *arg)
> {
> @@ -1140,8 +1139,35 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
> /* process any pending work */
> atomic_mb_set(&exit_request, 1);
>
> + cpu = first_cpu;
> +
> while (1) {
> - tcg_exec_all();
> + /* Account partial waits to QEMU_CLOCK_VIRTUAL. */
> + qemu_account_warp_timer();
> +
> + if (!cpu) {
> + cpu = first_cpu;
> + }
> +
> + for (; cpu != NULL && !exit_request; cpu = CPU_NEXT(cpu)) {
Maybe a "while" cycle would be a bit neater here, like:
while (cpu != NULL && !exit_request) {
/* ... */
cpu = CPU_NEXT(cpu);
}
> +
> + qemu_clock_enable(QEMU_CLOCK_VIRTUAL,
> + (cpu->singlestep_enabled & SSTEP_NOTIMER) ==
> 0);
> +
> + if (cpu_can_run(cpu)) {
> + int r = tcg_cpu_exec(cpu);
> + if (r == EXCP_DEBUG) {
> + cpu_handle_guest_debug(cpu);
> + break;
> + }
> + } else if (cpu->stop || cpu->stopped) {
> + break;
> + }
> +
> + } /* for cpu.. */
> +
> + /* Pairs with smp_wmb in qemu_cpu_kick. */
While at it, we could also fix this comment like this:
/* Pairs with atomic_mb_read() in cpu_exec(). */
> + atomic_mb_set(&exit_request, 0);
>
> if (use_icount) {
> int64_t deadline =
> qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
Kind regards,
Sergey
- Re: [Qemu-devel] [RFC v2 07/11] tcg: cpus rm tcg_exec_all(),
Sergey Fedorov <=