tcg: enable MTTCG by default for ARM on x86 hosts

This enables the multi-threaded system emulation by default for ARMv7
and ARMv8 guests using the x86_64 TCG backend. This is because on the
guest side:

- The ARM translate.c/translate-64.c have been converted to
- use MTTCG safe atomic primitives
- emit the appropriate barrier ops
- The ARM machine has been updated to
- hold the BQL when modifying shared cross-vCPU state
- defer powerctl changes to async safe work

All the host backends support the barrier and atomic primitives but
need to provide same-or-better support for normal load/store
operations.

Backports commit ca759f9e387db87e1719911f019bc60c74be9ed8 from qemu
This commit is contained in:
Alex Bennée 2018-03-02 10:29:33 -05:00 committed by Lioncash
parent ff0ff28939
commit caba238b5a
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7
3 changed files with 20 additions and 0 deletions

6
qemu/configure vendored
View file

@ -1320,6 +1320,7 @@ mkdir -p $target_dir
echo "# Automatically generated by configure - do not modify" > $config_target_mak
bflt="no"
mttcg="no"
TARGET_ARCH="$target_name"
TARGET_BASE_ARCH=""
@ -1334,12 +1335,14 @@ case "$target_name" in
;;
arm|armeb)
TARGET_ARCH=arm
mttcg="yes"
bflt="yes"
;;
aarch64|aarch64eb)
TARGET_BASE_ARCH=arm
TARGET_ARCH=aarch64
bflt="yes"
mttcg="yes"
;;
cris)
;;
@ -1437,6 +1440,9 @@ if test "$target_bigendian" = "yes" ; then
fi
if test "$target_softmmu" = "yes" ; then
echo "CONFIG_SOFTMMU=y" >> $config_target_mak
if test "$mttcg" = "yes" ; then
echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
fi
fi
# generate QEMU_CFLAGS/LDFLAGS for targets

View file

@ -33,6 +33,9 @@
#define TARGET_IS_BIENDIAN 1
/* ARM processors have a weak memory model */
#define TCG_GUEST_DEFAULT_MO (0)
#define CPUArchState struct CPUARMState
#include "qemu-common.h"

View file

@ -165,4 +165,15 @@ static inline void flush_icache_range(uintptr_t start, uintptr_t stop)
{
}
/* This defines the natural memory order supported by this
* architecture before guarantees made by various barrier
* instructions.
*
* The x86 has a pretty strong memory ordering which only really
* allows for some stores to be re-ordered after loads.
*/
#include "tcg-mo.h"
#define TCG_TARGET_DEFAULT_MO (TCG_MO_ALL & ~TCG_MO_ST_LD)
#endif