accel/tcg: Remove check_tcg_memory_orders_compatible
We now issue host memory barriers to match the guest memory order. Continue to disable MTTCG only if the guest has not been ported. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
f86e8f3d13
commit
97e1576957
@ -64,37 +64,23 @@ DECLARE_INSTANCE_CHECKER(TCGState, TCG_STATE,
|
|||||||
* they can set the appropriate CONFIG flags in ${target}-softmmu.mak
|
* they can set the appropriate CONFIG flags in ${target}-softmmu.mak
|
||||||
*
|
*
|
||||||
* Once a guest architecture has been converted to the new primitives
|
* Once a guest architecture has been converted to the new primitives
|
||||||
* there are two remaining limitations to check.
|
* there is one remaining limitation to check:
|
||||||
*
|
* - The guest can't be oversized (e.g. 64 bit guest on 32 bit host)
|
||||||
* - The guest can't be oversized (e.g. 64 bit guest on 32 bit host)
|
|
||||||
* - The host must have a stronger memory order than the guest
|
|
||||||
*
|
|
||||||
* It may be possible in future to support strong guests on weak hosts
|
|
||||||
* but that will require tagging all load/stores in a guest with their
|
|
||||||
* implicit memory order requirements which would likely slow things
|
|
||||||
* down a lot.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool check_tcg_memory_orders_compatible(void)
|
|
||||||
{
|
|
||||||
#if defined(TCG_GUEST_DEFAULT_MO) && defined(TCG_TARGET_DEFAULT_MO)
|
|
||||||
return (TCG_GUEST_DEFAULT_MO & ~TCG_TARGET_DEFAULT_MO) == 0;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool default_mttcg_enabled(void)
|
static bool default_mttcg_enabled(void)
|
||||||
{
|
{
|
||||||
if (icount_enabled() || TCG_OVERSIZED_GUEST) {
|
if (icount_enabled() || TCG_OVERSIZED_GUEST) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
|
||||||
#ifdef TARGET_SUPPORTS_MTTCG
|
|
||||||
return check_tcg_memory_orders_compatible();
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#ifdef TARGET_SUPPORTS_MTTCG
|
||||||
|
# ifndef TCG_GUEST_DEFAULT_MO
|
||||||
|
# error "TARGET_SUPPORTS_MTTCG without TCG_GUEST_DEFAULT_MO"
|
||||||
|
# endif
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcg_accel_instance_init(Object *obj)
|
static void tcg_accel_instance_init(Object *obj)
|
||||||
@ -162,11 +148,6 @@ static void tcg_set_thread(Object *obj, const char *value, Error **errp)
|
|||||||
warn_report("Guest not yet converted to MTTCG - "
|
warn_report("Guest not yet converted to MTTCG - "
|
||||||
"you may get unexpected results");
|
"you may get unexpected results");
|
||||||
#endif
|
#endif
|
||||||
if (!check_tcg_memory_orders_compatible()) {
|
|
||||||
warn_report("Guest expects a stronger memory ordering "
|
|
||||||
"than the host provides");
|
|
||||||
error_printf("This may cause strange/hard to debug errors\n");
|
|
||||||
}
|
|
||||||
s->mttcg_enabled = true;
|
s->mttcg_enabled = true;
|
||||||
}
|
}
|
||||||
} else if (strcmp(value, "single") == 0) {
|
} else if (strcmp(value, "single") == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user