[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH 3/3] mttcg: Implement implicit ordering sema
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [RFC PATCH 3/3] mttcg: Implement implicit ordering semantics |
Date: |
Mon, 28 Aug 2017 10:57:25 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 |
On 08/27/2017 08:53 PM, Pranith Kumar wrote:
> diff --git a/tcg/aarch64/tcg-target.h b/tcg/aarch64/tcg-target.h
> index 55a46ac825..b41a248bee 100644
> --- a/tcg/aarch64/tcg-target.h
> +++ b/tcg/aarch64/tcg-target.h
> @@ -117,4 +117,6 @@ static inline void flush_icache_range(uintptr_t start,
> uintptr_t stop)
> __builtin___clear_cache((char *)start, (char *)stop);
> }
>
> +#define TCG_TARGET_DEFAULT_MO (0)
> +
> #endif /* AARCH64_TCG_TARGET_H */
Please add all of these in one patch, separate from the tcg-op.c changes.
We should also just make this mandatory and remove any related #ifdefs.
> +void tcg_gen_req_mo(TCGBar type)
static, until we find that we need it somewhere else.
> +#if defined(TCG_GUEST_DEFAULT_MO) && defined(TCG_TARGET_DEFAULT_MO)
> + TCGBar order_mismatch = type & (TCG_GUEST_DEFAULT_MO &
> ~TCG_TARGET_DEFAULT_MO);
> + if (order_mismatch) {
> + tcg_gen_mb(order_mismatch | TCG_BAR_SC);
> + }
> +#else
> + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC);
> +#endif
Hmm. How about
static void tcg_gen_reg_mo(TCGBar type)
{
#ifdef TCG_GUEST_DEFAULT_MO
type &= TCG_GUEST_DEFAULT_MO;
#endif
#ifdef TCG_TARGET_DEFAULT_MO
type &= ~TCG_TARGET_DEFAULT_MO;
#endif
if (type) {
tcg_gen_mb(type | TCG_BAR_SC);
}
}
Just because one of those is undefined doesn't mean we can't infer tighter
barriers from the others, including the initial value of TYPE.
> void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
> {
> + tcg_gen_req_mo(TCG_MO_LD_LD | TCG_MO_LD_ST);
> memop = tcg_canonicalize_memop(memop, 0, 0);
You're putting the barrier before the load, so that should be
TCG_MO_LD_LD | TCG_MO_ST_LD
i.e. TCG_MO_<any>_<current op>
If you were putting the barrier afterward (an equally reasonable option), you'd
reverse that and use what you have above.
r~