[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 15/16] tcg: Make tb_flush() thread safe
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 15/16] tcg: Make tb_flush() thread safe |
Date: |
Sat, 24 Sep 2016 07:51:48 -0400 (EDT) |
----- Original Message -----
> From: "Richard Henderson" <address@hidden>
> To: "Paolo Bonzini" <address@hidden>, address@hidden
> Cc: "serge fdrv" <address@hidden>, address@hidden, "alex bennee"
> <address@hidden>, "sergey fedorov"
> <address@hidden>
> Sent: Friday, September 23, 2016 8:06:09 PM
> Subject: Re: [Qemu-devel] [PATCH 15/16] tcg: Make tb_flush() thread safe
>
> On 09/23/2016 12:31 AM, Paolo Bonzini wrote:
> > + unsigned tb_flush_req = (unsigned) (uintptr_t) data;
>
> Extra cast?
>
> > - tcg_ctx.tb_ctx.tb_flush_count++;
> > + atomic_inc(&tcg_ctx.tb_ctx.tb_flush_count);
>
> Since this is the only place this value is incremented, and we're under a
> lock,
> it should be cheaper to use
>
> atomic_mb_set(&tcg_ctx.tb_ctx.tb_flush_count, tb_flush_req + 1);
atomic_set will do even. Though it's not really a fast path, which is
why I went for atomic_inc.
> > + uintptr_t tb_flush_req = (uintptr_t)
> > + atomic_read(&tcg_ctx.tb_ctx.tb_flush_count);
>
> Extra cast?
Yeah.
Paolo
> That said, it's correct as-is so,
>
> Reviewed-by: Richard Henderson <address@hidden>
>
>
> r~
>
- Re: [Qemu-devel] [PATCH 10/16] docs: include formal model for TCG exclusive sections, (continued)
[Qemu-devel] [PATCH 14/16] cpus-common: Introduce async_safe_run_on_cpu(), Paolo Bonzini, 2016/09/23
[Qemu-devel] [PATCH 16/16] cpus-common: lock-free fast path for cpu_exec_start/end, Paolo Bonzini, 2016/09/23