* [PATCH v1 01/18] tests/docker: bump fedora to 32
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 02/18] Makefile: dtc: update, build the libfdt target Alex Bennée
` (17 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Alex Bennée, richard.henderson, f4bug,
Philippe Mathieu-Daudé, cota, aurelien
We should be keeping this up to date as Fedora goes out of support
quite quickly.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/docker/dockerfiles/fedora.docker | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/docker/dockerfiles/fedora.docker b/tests/docker/dockerfiles/fedora.docker
index 92b6e11c8a8..798ddd2c3e0 100644
--- a/tests/docker/dockerfiles/fedora.docker
+++ b/tests/docker/dockerfiles/fedora.docker
@@ -1,4 +1,4 @@
-FROM fedora:30
+FROM fedora:32
# Please keep this list sorted alphabetically
ENV PACKAGES \
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 02/18] Makefile: dtc: update, build the libfdt target
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
2020-06-12 19:02 ` [PATCH v1 01/18] tests/docker: bump fedora to 32 Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 03/18] Makefile: remove old compatibility gunks Alex Bennée
` (16 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Philippe Mathieu-Daudé, richard.henderson,
f4bug, Alex Bennée, cota, Claudio Fontana, aurelien
From: Claudio Fontana <cfontana@suse.de>
dtc submodule update, now call the libfdt target from the new
dtc Makefile, which has been changed to not require bison, flex, etc.
This removes warnings during the build.
scripts/ symlink and tests directory creation are not necessary,
and neither is calling the clean rule explicitly.
Signed-off-by: Claudio Fontana <cfontana@suse.de>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200518160319.18861-2-cfontana@suse.de>
---
configure | 1 -
Makefile | 10 +++++-----
dtc | 2 +-
3 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/configure b/configure
index 597e909b537..af5d7aa57a1 100755
--- a/configure
+++ b/configure
@@ -4301,7 +4301,6 @@ EOF
mkdir -p dtc
if [ "$pwd_is_source_path" != "y" ] ; then
symlink "$source_path/dtc/Makefile" "dtc/Makefile"
- symlink "$source_path/dtc/scripts" "dtc/scripts"
fi
fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
diff --git a/Makefile b/Makefile
index d1af126ea19..9385c2e653b 100644
--- a/Makefile
+++ b/Makefile
@@ -526,13 +526,14 @@ $(SOFTMMU_FUZZ_RULES): $(edk2-decompressed)
$(TARGET_DIRS_RULES):
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $(dir $@) V="$(V)" TARGET_DIR="$(dir $@)" $(notdir $@),)
-DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
+# LIBFDT_lib="": avoid breaking existing trees with objects requiring -fPIC
+DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_lib=""
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
-DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
+DTC_CPPFLAGS=-I$(SRC_PATH)/dtc/libfdt
.PHONY: dtc/all
-dtc/all: .git-submodule-status dtc/libfdt dtc/tests
- $(call quiet-command,$(MAKE) $(DTC_MAKE_ARGS) CPPFLAGS="$(DTC_CPPFLAGS)" CFLAGS="$(DTC_CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)" ARFLAGS="$(ARFLAGS)" CC="$(CC)" AR="$(AR)" LD="$(LD)" $(SUBDIR_MAKEFLAGS) libfdt/libfdt.a,)
+dtc/all: .git-submodule-status dtc/libfdt
+ $(call quiet-command,$(MAKE) $(DTC_MAKE_ARGS) CPPFLAGS="$(DTC_CPPFLAGS)" CFLAGS="$(DTC_CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)" ARFLAGS="$(ARFLAGS)" CC="$(CC)" AR="$(AR)" LD="$(LD)" $(SUBDIR_MAKEFLAGS) libfdt,)
dtc/%: .git-submodule-status
@mkdir -p $@
@@ -820,7 +821,6 @@ distclean: clean
rm -rf $$d || exit 1 ; \
done
rm -Rf .sdk
- if test -f dtc/version_gen.h; then $(MAKE) $(DTC_MAKE_ARGS) clean; fi
KEYMAPS=da en-gb et fr fr-ch is lt no pt-br sv \
ar de en-us fi fr-be hr it lv nl pl ru th \
diff --git a/dtc b/dtc
index 88f18909db7..85e5d839847 160000
--- a/dtc
+++ b/dtc
@@ -1 +1 @@
-Subproject commit 88f18909db731a627456f26d779445f84e449536
+Subproject commit 85e5d839847af54efab170f2b1331b2a6421e647
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 03/18] Makefile: remove old compatibility gunks
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
2020-06-12 19:02 ` [PATCH v1 01/18] tests/docker: bump fedora to 32 Alex Bennée
2020-06-12 19:02 ` [PATCH v1 02/18] Makefile: dtc: update, build the libfdt target Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 04/18] configure: add --enable-tsan flag + fiber annotations for coroutine-ucontext Alex Bennée
` (15 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Philippe Mathieu-Daudé, richard.henderson,
f4bug, Markus Armbruster, Alex Bennée, cota, Claudio Fontana,
aurelien
From: Claudio Fontana <cfontana@suse.de>
Signed-off-by: Claudio Fontana <cfontana@suse.de>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200518160319.18861-3-cfontana@suse.de>
---
Makefile | 6 ------
1 file changed, 6 deletions(-)
diff --git a/Makefile b/Makefile
index 9385c2e653b..57b83521b18 100644
--- a/Makefile
+++ b/Makefile
@@ -562,12 +562,6 @@ slirp/all: .git-submodule-status
CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" \
CFLAGS="$(QEMU_CFLAGS) $(CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)")
-# Compatibility gunk to keep make working across the rename of targets
-# for recursion, to be removed some time after 4.1.
-subdir-dtc: dtc/all
-subdir-capstone: capstone/all
-subdir-slirp: slirp/all
-
$(filter %/all, $(TARGET_DIRS_RULES)): libqemuutil.a $(common-obj-y) \
$(qom-obj-y)
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 04/18] configure: add --enable-tsan flag + fiber annotations for coroutine-ucontext
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (2 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 03/18] Makefile: remove old compatibility gunks Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 05/18] cpu: convert queued work to a QSIMPLEQ Alex Bennée
` (14 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, Kevin Wolf, berrange, Robert Foley, Alex Bennée,
richard.henderson, f4bug, cota, Stefan Hajnoczi, Lingfeng Yang,
aurelien
From: Lingfeng Yang <lfy@google.com>
We tried running QEMU under tsan in 2016, but tsan's lack of support for
longjmp-based fibers was a blocker:
https://groups.google.com/forum/#!topic/thread-sanitizer/se0YuzfWazw
Fortunately, thread sanitizer gained fiber support in early 2019:
https://reviews.llvm.org/D54889
This patch brings tsan support upstream by importing the patch that annotated
QEMU's coroutines as tsan fibers in Android's QEMU fork:
https://android-review.googlesource.com/c/platform/external/qemu/+/844675
Tested with '--enable-tsan --cc=clang-9 --cxx=clang++-9 --disable-werror'
configure flags.
Signed-off-by: Lingfeng Yang <lfy@google.com>
Signed-off-by: Emilio G. Cota <cota@braap.org>
[cota: minor modifications + configure changes]
Signed-off-by: Robert Foley <robert.foley@linaro.org>
[RF: configure changes, coroutine fix + minor modifications]
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-2-robert.foley@linaro.org>
---
configure | 47 +++++++++++++++++++++++++++-
util/coroutine-ucontext.c | 66 +++++++++++++++++++++++++++++++++------
2 files changed, 103 insertions(+), 10 deletions(-)
diff --git a/configure b/configure
index af5d7aa57a1..860f4c63647 100755
--- a/configure
+++ b/configure
@@ -395,6 +395,7 @@ gprof="no"
debug_tcg="no"
debug="no"
sanitizers="no"
+tsan="no"
fortify_source=""
strip_opt="yes"
tcg_interpreter="no"
@@ -1150,6 +1151,10 @@ for opt do
;;
--disable-sanitizers) sanitizers="no"
;;
+ --enable-tsan) tsan="yes"
+ ;;
+ --disable-tsan) tsan="no"
+ ;;
--enable-sparse) sparse="yes"
;;
--disable-sparse) sparse="no"
@@ -1754,6 +1759,7 @@ Advanced options (experts only):
--with-pkgversion=VERS use specified string as sub-version of the package
--enable-debug enable common debug build options
--enable-sanitizers enable default sanitizers
+ --enable-tsan enable thread sanitizer
--disable-strip disable stripping binaries
--disable-werror disable compilation abort on warning
--disable-stack-protector disable compiler-provided stack protection
@@ -6195,6 +6201,30 @@ if test "$fuzzing" = "yes" ; then
fi
fi
+# Thread sanitizer is, for now, much noisier than the other sanitizers;
+# keep it separate until that is not the case.
+if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
+ error_exit "TSAN is not supported with other sanitiziers."
+fi
+have_tsan=no
+have_tsan_iface_fiber=no
+if test "$tsan" = "yes" ; then
+ write_c_skeleton
+ if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
+ have_tsan=yes
+ fi
+ cat > $TMPC << EOF
+#include <sanitizer/tsan_interface.h>
+int main(void) {
+ __tsan_create_fiber(0);
+ return 0;
+}
+EOF
+ if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
+ have_tsan_iface_fiber=yes
+ fi
+fi
+
##########################################
# check for libpmem
@@ -6296,6 +6326,16 @@ if test "$have_asan" = "yes"; then
"Without code annotation, the report may be inferior."
fi
fi
+if test "$have_tsan" = "yes" ; then
+ if test "$have_tsan_iface_fiber" = "yes" ; then
+ QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
+ QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
+ else
+ error_exit "Cannot enable TSAN due to missing fiber annotation interface."
+ fi
+elif test "$tsan" = "yes" ; then
+ error_exit "Cannot enable TSAN due to missing sanitize thread interface."
+fi
if test "$have_ubsan" = "yes"; then
QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
@@ -6331,7 +6371,8 @@ if test "$werror" = "yes"; then
QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
fi
-if test "$solaris" = "no" ; then
+# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
+if test "$solaris" = "no" && test "$tsan" = "no"; then
if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
fi
@@ -7385,6 +7426,10 @@ if test "$have_asan_iface_fiber" = "yes" ; then
echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
fi
+if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
+ echo "CONFIG_TSAN=y" >> $config_host_mak
+fi
+
if test "$has_environ" = "yes" ; then
echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
fi
diff --git a/util/coroutine-ucontext.c b/util/coroutine-ucontext.c
index bd593e61bc0..613f4c118e4 100644
--- a/util/coroutine-ucontext.c
+++ b/util/coroutine-ucontext.c
@@ -37,12 +37,19 @@
#endif
#endif
+#ifdef CONFIG_TSAN
+#include <sanitizer/tsan_interface.h>
+#endif
+
typedef struct {
Coroutine base;
void *stack;
size_t stack_size;
sigjmp_buf env;
+ void *tsan_co_fiber;
+ void *tsan_caller_fiber;
+
#ifdef CONFIG_VALGRIND_H
unsigned int valgrind_stack_id;
#endif
@@ -65,7 +72,18 @@ union cc_arg {
int i[2];
};
-static void finish_switch_fiber(void *fake_stack_save)
+/* QEMU_ALWAYS_INLINE only does so if __OPTIMIZE__, so we cannot use it. */
+static inline __attribute__((always_inline))
+void on_new_fiber(CoroutineUContext *co)
+{
+#ifdef CONFIG_TSAN
+ co->tsan_co_fiber = __tsan_create_fiber(0); /* flags: sync on switch */
+ co->tsan_caller_fiber = __tsan_get_current_fiber();
+#endif
+}
+
+static inline __attribute__((always_inline))
+void finish_switch_fiber(void *fake_stack_save)
{
#ifdef CONFIG_ASAN
const void *bottom_old;
@@ -78,13 +96,30 @@ static void finish_switch_fiber(void *fake_stack_save)
leader.stack_size = size_old;
}
#endif
+#ifdef CONFIG_TSAN
+ if (fake_stack_save) {
+ __tsan_release(fake_stack_save);
+ __tsan_switch_to_fiber(fake_stack_save, 0); /* 0=synchronize */
+ }
+#endif
}
-static void start_switch_fiber(void **fake_stack_save,
- const void *bottom, size_t size)
+static inline __attribute__((always_inline)) void start_switch_fiber(
+ CoroutineAction action, void **fake_stack_save,
+ const void *bottom, size_t size, void *new_fiber)
{
#ifdef CONFIG_ASAN
- __sanitizer_start_switch_fiber(fake_stack_save, bottom, size);
+ __sanitizer_start_switch_fiber(
+ action == COROUTINE_TERMINATE ? NULL : fake_stack_save,
+ bottom, size);
+#endif
+#ifdef CONFIG_TSAN
+ void *curr_fiber =
+ __tsan_get_current_fiber();
+ __tsan_acquire(curr_fiber);
+
+ *fake_stack_save = curr_fiber;
+ __tsan_switch_to_fiber(new_fiber, 0); /* 0=synchronize */
#endif
}
@@ -104,8 +139,12 @@ static void coroutine_trampoline(int i0, int i1)
/* Initialize longjmp environment and switch back the caller */
if (!sigsetjmp(self->env, 0)) {
- start_switch_fiber(&fake_stack_save,
- leader.stack, leader.stack_size);
+ start_switch_fiber(
+ COROUTINE_YIELD,
+ &fake_stack_save,
+ leader.stack,
+ leader.stack_size,
+ self->tsan_caller_fiber);
siglongjmp(*(sigjmp_buf *)co->entry_arg, 1);
}
@@ -154,12 +193,16 @@ Coroutine *qemu_coroutine_new(void)
arg.p = co;
+ on_new_fiber(co);
makecontext(&uc, (void (*)(void))coroutine_trampoline,
2, arg.i[0], arg.i[1]);
/* swapcontext() in, siglongjmp() back out */
if (!sigsetjmp(old_env, 0)) {
- start_switch_fiber(&fake_stack_save, co->stack, co->stack_size);
+ start_switch_fiber(
+ COROUTINE_YIELD,
+ &fake_stack_save,
+ co->stack, co->stack_size, co->tsan_co_fiber);
swapcontext(&old_uc, &uc);
}
@@ -216,8 +259,8 @@ qemu_coroutine_switch(Coroutine *from_, Coroutine *to_,
ret = sigsetjmp(from->env, 0);
if (ret == 0) {
- start_switch_fiber(action == COROUTINE_TERMINATE ?
- NULL : &fake_stack_save, to->stack, to->stack_size);
+ start_switch_fiber(action, &fake_stack_save,
+ to->stack, to->stack_size, to->tsan_co_fiber);
siglongjmp(to->env, action);
}
@@ -231,6 +274,11 @@ Coroutine *qemu_coroutine_self(void)
if (!current) {
current = &leader.base;
}
+#ifdef CONFIG_TSAN
+ if (!leader.tsan_co_fiber) {
+ leader.tsan_co_fiber = __tsan_get_current_fiber();
+ }
+#endif
return current;
}
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 05/18] cpu: convert queued work to a QSIMPLEQ
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (3 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 04/18] configure: add --enable-tsan flag + fiber annotations for coroutine-ucontext Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 06/18] thread: add qemu_spin_destroy Alex Bennée
` (13 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, Eduardo Habkost, Philippe Mathieu-Daudé, cota,
Paolo Bonzini, aurelien, Richard Henderson
From: "Emilio G. Cota" <cota@braap.org>
We convert queued work to a QSIMPLEQ, instead of
open-coding it.
While at it, make sure that all accesses to the list are
performed while holding the list's lock.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-3-robert.foley@linaro.org>
---
include/hw/core/cpu.h | 6 +++---
cpus-common.c | 25 ++++++++-----------------
cpus.c | 14 ++++++++++++--
hw/core/cpu.c | 1 +
4 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 497600c49ef..b3f4b793182 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -331,8 +331,8 @@ struct qemu_work_item;
* @opaque: User data.
* @mem_io_pc: Host Program Counter at which the memory was accessed.
* @kvm_fd: vCPU file descriptor for KVM.
- * @work_mutex: Lock to prevent multiple access to queued_work_*.
- * @queued_work_first: First asynchronous work pending.
+ * @work_mutex: Lock to prevent multiple access to @work_list.
+ * @work_list: List of pending asynchronous work.
* @trace_dstate_delayed: Delayed changes to trace_dstate (includes all changes
* to @trace_dstate).
* @trace_dstate: Dynamic tracing state of events for this vCPU (bitmask).
@@ -376,7 +376,7 @@ struct CPUState {
sigjmp_buf jmp_env;
QemuMutex work_mutex;
- struct qemu_work_item *queued_work_first, *queued_work_last;
+ QSIMPLEQ_HEAD(, qemu_work_item) work_list;
CPUAddressSpace *cpu_ases;
int num_ases;
diff --git a/cpus-common.c b/cpus-common.c
index 70a9d12981a..8f5512b3d78 100644
--- a/cpus-common.c
+++ b/cpus-common.c
@@ -97,7 +97,7 @@ void cpu_list_remove(CPUState *cpu)
}
struct qemu_work_item {
- struct qemu_work_item *next;
+ QSIMPLEQ_ENTRY(qemu_work_item) node;
run_on_cpu_func func;
run_on_cpu_data data;
bool free, exclusive, done;
@@ -106,13 +106,7 @@ struct qemu_work_item {
static void queue_work_on_cpu(CPUState *cpu, struct qemu_work_item *wi)
{
qemu_mutex_lock(&cpu->work_mutex);
- if (cpu->queued_work_first == NULL) {
- cpu->queued_work_first = wi;
- } else {
- cpu->queued_work_last->next = wi;
- }
- cpu->queued_work_last = wi;
- wi->next = NULL;
+ QSIMPLEQ_INSERT_TAIL(&cpu->work_list, wi, node);
wi->done = false;
qemu_mutex_unlock(&cpu->work_mutex);
@@ -306,17 +300,14 @@ void process_queued_cpu_work(CPUState *cpu)
{
struct qemu_work_item *wi;
- if (cpu->queued_work_first == NULL) {
+ qemu_mutex_lock(&cpu->work_mutex);
+ if (QSIMPLEQ_EMPTY(&cpu->work_list)) {
+ qemu_mutex_unlock(&cpu->work_mutex);
return;
}
-
- qemu_mutex_lock(&cpu->work_mutex);
- while (cpu->queued_work_first != NULL) {
- wi = cpu->queued_work_first;
- cpu->queued_work_first = wi->next;
- if (!cpu->queued_work_first) {
- cpu->queued_work_last = NULL;
- }
+ while (!QSIMPLEQ_EMPTY(&cpu->work_list)) {
+ wi = QSIMPLEQ_FIRST(&cpu->work_list);
+ QSIMPLEQ_REMOVE_HEAD(&cpu->work_list, node);
qemu_mutex_unlock(&cpu->work_mutex);
if (wi->exclusive) {
/* Running work items outside the BQL avoids the following deadlock:
diff --git a/cpus.c b/cpus.c
index 5670c96bcfa..af440275495 100644
--- a/cpus.c
+++ b/cpus.c
@@ -97,9 +97,19 @@ bool cpu_is_stopped(CPUState *cpu)
return cpu->stopped || !runstate_is_running();
}
+static inline bool cpu_work_list_empty(CPUState *cpu)
+{
+ bool ret;
+
+ qemu_mutex_lock(&cpu->work_mutex);
+ ret = QSIMPLEQ_EMPTY(&cpu->work_list);
+ qemu_mutex_unlock(&cpu->work_mutex);
+ return ret;
+}
+
static bool cpu_thread_is_idle(CPUState *cpu)
{
- if (cpu->stop || cpu->queued_work_first) {
+ if (cpu->stop || !cpu_work_list_empty(cpu)) {
return false;
}
if (cpu_is_stopped(cpu)) {
@@ -1498,7 +1508,7 @@ static void *qemu_tcg_rr_cpu_thread_fn(void *arg)
cpu = first_cpu;
}
- while (cpu && !cpu->queued_work_first && !cpu->exit_request) {
+ while (cpu && cpu_work_list_empty(cpu) && !cpu->exit_request) {
atomic_mb_set(&tcg_current_rr_cpu, cpu);
current_cpu = cpu;
diff --git a/hw/core/cpu.c b/hw/core/cpu.c
index f31ec48ee61..80d51c24dd2 100644
--- a/hw/core/cpu.c
+++ b/hw/core/cpu.c
@@ -370,6 +370,7 @@ static void cpu_common_initfn(Object *obj)
cpu->nr_threads = 1;
qemu_mutex_init(&cpu->work_mutex);
+ QSIMPLEQ_INIT(&cpu->work_list);
QTAILQ_INIT(&cpu->breakpoints);
QTAILQ_INIT(&cpu->watchpoints);
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 06/18] thread: add qemu_spin_destroy
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (4 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 05/18] cpu: convert queued work to a QSIMPLEQ Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 07/18] cputlb: destroy CPUTLB with tlb_destroy Alex Bennée
` (12 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, aurelien
From: "Emilio G. Cota" <cota@braap.org>
It will be used for TSAN annotations.
Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-4-robert.foley@linaro.org>
---
include/qemu/thread.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/include/qemu/thread.h b/include/qemu/thread.h
index d22848138ea..e50a0738897 100644
--- a/include/qemu/thread.h
+++ b/include/qemu/thread.h
@@ -215,6 +215,9 @@ static inline void qemu_spin_init(QemuSpin *spin)
__sync_lock_release(&spin->value);
}
+static inline void qemu_spin_destroy(QemuSpin *spin)
+{ }
+
static inline void qemu_spin_lock(QemuSpin *spin)
{
while (unlikely(__sync_lock_test_and_set(&spin->value, true))) {
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 07/18] cputlb: destroy CPUTLB with tlb_destroy
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (5 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 06/18] thread: add qemu_spin_destroy Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 08/18] qht: call qemu_spin_destroy for head buckets Alex Bennée
` (11 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, Paolo Bonzini, aurelien, Richard Henderson
From: "Emilio G. Cota" <cota@braap.org>
I was after adding qemu_spin_destroy calls, but while at
it I noticed that we are leaking some memory.
Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-5-robert.foley@linaro.org>
---
include/exec/exec-all.h | 8 ++++++++
accel/tcg/cputlb.c | 15 +++++++++++++++
exec.c | 1 +
3 files changed, 24 insertions(+)
diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
index 8792bea07ab..3cf88272df9 100644
--- a/include/exec/exec-all.h
+++ b/include/exec/exec-all.h
@@ -124,6 +124,11 @@ void cpu_address_space_init(CPUState *cpu, int asidx,
* @cpu: CPU whose TLB should be initialized
*/
void tlb_init(CPUState *cpu);
+/**
+ * tlb_destroy - destroy a CPU's TLB
+ * @cpu: CPU whose TLB should be destroyed
+ */
+void tlb_destroy(CPUState *cpu);
/**
* tlb_flush_page:
* @cpu: CPU whose TLB should be flushed
@@ -284,6 +289,9 @@ void tlb_set_page(CPUState *cpu, target_ulong vaddr,
static inline void tlb_init(CPUState *cpu)
{
}
+static inline void tlb_destroy(CPUState *cpu)
+{
+}
static inline void tlb_flush_page(CPUState *cpu, target_ulong addr)
{
}
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index eb2cf9de5e6..1e815357c70 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -270,6 +270,21 @@ void tlb_init(CPUState *cpu)
}
}
+void tlb_destroy(CPUState *cpu)
+{
+ CPUArchState *env = cpu->env_ptr;
+ int i;
+
+ qemu_spin_destroy(&env_tlb(env)->c.lock);
+ for (i = 0; i < NB_MMU_MODES; i++) {
+ CPUTLBDesc *desc = &env_tlb(env)->d[i];
+ CPUTLBDescFast *fast = &env_tlb(env)->f[i];
+
+ g_free(fast->table);
+ g_free(desc->iotlb);
+ }
+}
+
/* flush_all_helper: run fn across all cpus
*
* If the wait flag is set then the src cpu's helper will be queued as
diff --git a/exec.c b/exec.c
index a0bf9d61c87..6d7c312c910 100644
--- a/exec.c
+++ b/exec.c
@@ -892,6 +892,7 @@ void cpu_exec_unrealizefn(CPUState *cpu)
{
CPUClass *cc = CPU_GET_CLASS(cpu);
+ tlb_destroy(cpu);
cpu_list_remove(cpu);
if (cc->vmsd != NULL) {
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 08/18] qht: call qemu_spin_destroy for head buckets
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (6 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 07/18] cputlb: destroy CPUTLB with tlb_destroy Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 09/18] tcg: call qemu_spin_destroy for tb->jmp_lock Alex Bennée
` (10 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, aurelien
From: "Emilio G. Cota" <cota@braap.org>
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-6-robert.foley@linaro.org>
---
util/qht.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/util/qht.c b/util/qht.c
index aa51be3c52f..67e5d5b9163 100644
--- a/util/qht.c
+++ b/util/qht.c
@@ -348,6 +348,7 @@ static inline void qht_chain_destroy(const struct qht_bucket *head)
struct qht_bucket *curr = head->next;
struct qht_bucket *prev;
+ qemu_spin_destroy(&head->lock);
while (curr) {
prev = curr;
curr = curr->next;
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 09/18] tcg: call qemu_spin_destroy for tb->jmp_lock
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (7 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 08/18] qht: call qemu_spin_destroy for head buckets Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 10/18] translate-all: call qemu_spin_destroy for PageDesc Alex Bennée
` (9 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, Paolo Bonzini, aurelien, Richard Henderson
From: "Emilio G. Cota" <cota@braap.org>
Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
[RF: minor changes + remove tb_destroy_func]
Message-Id: <20200609200738.445-7-robert.foley@linaro.org>
---
include/tcg/tcg.h | 1 +
accel/tcg/translate-all.c | 8 ++++++++
tcg/tcg.c | 9 +++++++++
3 files changed, 18 insertions(+)
diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
index 380014ed805..e63450a8936 100644
--- a/include/tcg/tcg.h
+++ b/include/tcg/tcg.h
@@ -819,6 +819,7 @@ void tcg_pool_reset(TCGContext *s);
TranslationBlock *tcg_tb_alloc(TCGContext *s);
void tcg_region_init(void);
+void tb_destroy(TranslationBlock *tb);
void tcg_region_reset_all(void);
size_t tcg_code_size(void);
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index 42ce1dfcff7..c937210e217 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -384,6 +384,11 @@ static int cpu_restore_state_from_tb(CPUState *cpu, TranslationBlock *tb,
return 0;
}
+void tb_destroy(TranslationBlock *tb)
+{
+ qemu_spin_destroy(&tb->jmp_lock);
+}
+
bool cpu_restore_state(CPUState *cpu, uintptr_t host_pc, bool will_exit)
{
TranslationBlock *tb;
@@ -413,6 +418,7 @@ bool cpu_restore_state(CPUState *cpu, uintptr_t host_pc, bool will_exit)
/* one-shot translation, invalidate it immediately */
tb_phys_invalidate(tb, -1);
tcg_tb_remove(tb);
+ tb_destroy(tb);
}
r = true;
}
@@ -1886,6 +1892,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
orig_aligned -= ROUND_UP(sizeof(*tb), qemu_icache_linesize);
atomic_set(&tcg_ctx->code_gen_ptr, (void *)orig_aligned);
+ tb_destroy(tb);
return existing_tb;
}
tcg_tb_insert(tb);
@@ -2235,6 +2242,7 @@ void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr)
tb_phys_invalidate(tb->orig_tb, -1);
}
tcg_tb_remove(tb);
+ tb_destroy(tb);
}
/* TODO: If env->pc != tb->pc (i.e. the faulting instruction was not
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 1aa6cb47f29..1362bc61017 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -502,6 +502,14 @@ size_t tcg_nb_tbs(void)
return nb_tbs;
}
+static gboolean tcg_region_tree_traverse(gpointer k, gpointer v, gpointer data)
+{
+ TranslationBlock *tb = v;
+
+ tb_destroy(tb);
+ return FALSE;
+}
+
static void tcg_region_tree_reset_all(void)
{
size_t i;
@@ -510,6 +518,7 @@ static void tcg_region_tree_reset_all(void)
for (i = 0; i < region.n; i++) {
struct tcg_region_tree *rt = region_trees + i * tree_size;
+ g_tree_foreach(rt->tree, tcg_region_tree_traverse, NULL);
/* Increment the refcount first so that destroy acts as a reset */
g_tree_ref(rt->tree);
g_tree_destroy(rt->tree);
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 10/18] translate-all: call qemu_spin_destroy for PageDesc
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (8 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 09/18] tcg: call qemu_spin_destroy for tb->jmp_lock Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 11/18] thread: add tsan annotations to QemuSpin Alex Bennée
` (8 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, Paolo Bonzini, aurelien, Richard Henderson
From: "Emilio G. Cota" <cota@braap.org>
The radix tree is append-only, but we can fail to insert
a PageDesc if the insertion races with another thread.
Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-8-robert.foley@linaro.org>
---
accel/tcg/translate-all.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index c937210e217..c3d37058a17 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -547,6 +547,15 @@ static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
#endif
existing = atomic_cmpxchg(lp, NULL, pd);
if (unlikely(existing)) {
+#ifndef CONFIG_USER_ONLY
+ {
+ int i;
+
+ for (i = 0; i < V_L2_SIZE; i++) {
+ qemu_spin_destroy(&pd[i].lock);
+ }
+ }
+#endif
g_free(pd);
pd = existing;
}
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 11/18] thread: add tsan annotations to QemuSpin
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (9 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 10/18] translate-all: call qemu_spin_destroy for PageDesc Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 12/18] tests/docker: Added docker build support for TSan Alex Bennée
` (7 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, aurelien
From: "Emilio G. Cota" <cota@braap.org>
Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-9-robert.foley@linaro.org>
---
include/qemu/thread.h | 39 ++++++++++++++++++++++++++++++++++++---
1 file changed, 36 insertions(+), 3 deletions(-)
diff --git a/include/qemu/thread.h b/include/qemu/thread.h
index e50a0738897..43fc094b963 100644
--- a/include/qemu/thread.h
+++ b/include/qemu/thread.h
@@ -206,6 +206,10 @@ void qemu_thread_atexit_add(struct Notifier *notifier);
*/
void qemu_thread_atexit_remove(struct Notifier *notifier);
+#ifdef CONFIG_TSAN
+#include <sanitizer/tsan_interface.h>
+#endif
+
struct QemuSpin {
int value;
};
@@ -213,23 +217,46 @@ struct QemuSpin {
static inline void qemu_spin_init(QemuSpin *spin)
{
__sync_lock_release(&spin->value);
+#ifdef CONFIG_TSAN
+ __tsan_mutex_create(spin, __tsan_mutex_not_static);
+#endif
}
-static inline void qemu_spin_destroy(QemuSpin *spin)
-{ }
+/* const parameter because the only purpose here is the TSAN annotation */
+static inline void qemu_spin_destroy(const QemuSpin *spin)
+{
+#ifdef CONFIG_TSAN
+ __tsan_mutex_destroy((void *)spin, __tsan_mutex_not_static);
+#endif
+}
static inline void qemu_spin_lock(QemuSpin *spin)
{
+#ifdef CONFIG_TSAN
+ __tsan_mutex_pre_lock(spin, 0);
+#endif
while (unlikely(__sync_lock_test_and_set(&spin->value, true))) {
while (atomic_read(&spin->value)) {
cpu_relax();
}
}
+#ifdef CONFIG_TSAN
+ __tsan_mutex_post_lock(spin, 0, 0);
+#endif
}
static inline bool qemu_spin_trylock(QemuSpin *spin)
{
- return __sync_lock_test_and_set(&spin->value, true);
+#ifdef CONFIG_TSAN
+ __tsan_mutex_pre_lock(spin, __tsan_mutex_try_lock);
+#endif
+ bool busy = __sync_lock_test_and_set(&spin->value, true);
+#ifdef CONFIG_TSAN
+ unsigned flags = __tsan_mutex_try_lock;
+ flags |= busy ? __tsan_mutex_try_lock_failed : 0;
+ __tsan_mutex_post_lock(spin, flags, 0);
+#endif
+ return busy;
}
static inline bool qemu_spin_locked(QemuSpin *spin)
@@ -239,7 +266,13 @@ static inline bool qemu_spin_locked(QemuSpin *spin)
static inline void qemu_spin_unlock(QemuSpin *spin)
{
+#ifdef CONFIG_TSAN
+ __tsan_mutex_pre_unlock(spin, 0);
+#endif
__sync_lock_release(&spin->value);
+#ifdef CONFIG_TSAN
+ __tsan_mutex_post_unlock(spin, 0);
+#endif
}
struct QemuLockCnt {
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 12/18] tests/docker: Added docker build support for TSan.
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (10 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 11/18] thread: add tsan annotations to QemuSpin Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 13/18] include/qemu: Added tsan.h for annotations Alex Bennée
` (6 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Philippe Mathieu-Daudé,
richard.henderson, f4bug, Alex Bennée, cota, aurelien
From: Robert Foley <robert.foley@linaro.org>
Added a new docker for ubuntu 20.04.
This docker has support for Thread Sanitizer
including one patch we need in one of the header files.
https://github.com/llvm/llvm-project/commit/a72dc86cd
This command will build with tsan enabled:
make docker-test-tsan-ubuntu2004 V=1
Also added the TSAN suppresion file to disable certain
cases of TSAN warnings.
Cc: Fam Zheng <fam@euphon.net>
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-10-robert.foley@linaro.org>
---
tests/docker/dockerfiles/ubuntu2004.docker | 65 ++++++++++++++++++++++
tests/docker/test-tsan | 44 +++++++++++++++
tests/tsan/blacklist.tsan | 10 ++++
tests/tsan/suppressions.tsan | 14 +++++
4 files changed, 133 insertions(+)
create mode 100644 tests/docker/dockerfiles/ubuntu2004.docker
create mode 100755 tests/docker/test-tsan
create mode 100644 tests/tsan/blacklist.tsan
create mode 100644 tests/tsan/suppressions.tsan
diff --git a/tests/docker/dockerfiles/ubuntu2004.docker b/tests/docker/dockerfiles/ubuntu2004.docker
new file mode 100644
index 00000000000..6050ce7e8a8
--- /dev/null
+++ b/tests/docker/dockerfiles/ubuntu2004.docker
@@ -0,0 +1,65 @@
+FROM ubuntu:20.04
+ENV PACKAGES flex bison \
+ ccache \
+ clang-10\
+ gcc \
+ gettext \
+ git \
+ glusterfs-common \
+ libaio-dev \
+ libattr1-dev \
+ libbrlapi-dev \
+ libbz2-dev \
+ libcacard-dev \
+ libcap-ng-dev \
+ libcurl4-gnutls-dev \
+ libdrm-dev \
+ libepoxy-dev \
+ libfdt-dev \
+ libgbm-dev \
+ libgtk-3-dev \
+ libibverbs-dev \
+ libiscsi-dev \
+ libjemalloc-dev \
+ libjpeg-turbo8-dev \
+ liblzo2-dev \
+ libncurses5-dev \
+ libncursesw5-dev \
+ libnfs-dev \
+ libnss3-dev \
+ libnuma-dev \
+ libpixman-1-dev \
+ librados-dev \
+ librbd-dev \
+ librdmacm-dev \
+ libsasl2-dev \
+ libsdl2-dev \
+ libseccomp-dev \
+ libsnappy-dev \
+ libspice-protocol-dev \
+ libspice-server-dev \
+ libssh-dev \
+ libusb-1.0-0-dev \
+ libusbredirhost-dev \
+ libvdeplug-dev \
+ libvte-2.91-dev \
+ libxen-dev \
+ libzstd-dev \
+ make \
+ python3-yaml \
+ python3-sphinx \
+ sparse \
+ texinfo \
+ xfslibs-dev\
+ vim
+RUN apt-get update && \
+ DEBIAN_FRONTEND=noninteractive apt-get -y install $PACKAGES
+RUN dpkg -l $PACKAGES | sort > /packages.txt
+ENV FEATURES clang tsan pyyaml sdl2
+
+# https://bugs.launchpad.net/qemu/+bug/1838763
+ENV QEMU_CONFIGURE_OPTS --disable-libssh
+
+# Apply patch https://reviews.llvm.org/D75820
+# This is required for TSan in clang-10 to compile with QEMU.
+RUN sed -i 's/^const/static const/g' /usr/lib/llvm-10/lib/clang/10.0.0/include/sanitizer/tsan_interface.h
diff --git a/tests/docker/test-tsan b/tests/docker/test-tsan
new file mode 100755
index 00000000000..eb40ac45b7a
--- /dev/null
+++ b/tests/docker/test-tsan
@@ -0,0 +1,44 @@
+#!/bin/bash -e
+#
+# This test will use TSan as part of a build and a make check.
+#
+# Copyright (c) 2020 Linaro
+# Copyright (c) 2016 Red Hat Inc.
+#
+# Authors:
+# Robert Foley <robert.foley@linaro.org>
+# Originally based on test-quick from Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2
+# or (at your option) any later version. See the COPYING file in
+# the top-level directory.
+
+. common.rc
+
+setup_tsan()
+{
+ requires clang tsan
+ tsan_log_dir="/tmp/qemu-test/build/tsan"
+ mkdir -p $tsan_log_dir > /dev/null || true
+ EXTRA_CONFIGURE_OPTS="${EXTRA_CONFIGURE_OPTS} --enable-tsan \
+ --cc=clang-10 --cxx=clang++-10 \
+ --disable-werror --extra-cflags=-O0"
+ # detect deadlocks is false currently simply because
+ # TSan crashes immediately with deadlock detector enabled.
+ # We have maxed out the history size to get the best chance of finding
+ # warnings during testing.
+ # Note, to get TSan to fail on warning, use exitcode=66 below.
+ tsan_opts="suppressions=/tmp/qemu-test/src/tests/tsan/suppressions.tsan\
+ detect_deadlocks=false history_size=7\
+ halt_on_error=0 exitcode=0 verbose=5\
+ log_path=$tsan_log_dir/tsan_warning"
+ export TSAN_OPTIONS="$tsan_opts"
+}
+
+cd "$BUILD_DIR"
+
+TARGET_LIST=${TARGET_LIST:-$DEF_TARGET_LIST} \
+setup_tsan
+build_qemu
+check_qemu
+install_qemu
diff --git a/tests/tsan/blacklist.tsan b/tests/tsan/blacklist.tsan
new file mode 100644
index 00000000000..75e444f5dc6
--- /dev/null
+++ b/tests/tsan/blacklist.tsan
@@ -0,0 +1,10 @@
+# This is an example blacklist.
+# To enable use of the blacklist add this to configure:
+# "--extra-cflags=-fsanitize-blacklist=<src path>/tests/tsan/blacklist.tsan"
+# The eventual goal would be to fix these warnings.
+
+# TSan is not happy about setting/getting of dirty bits,
+# for example, cpu_physical_memory_set_dirty_range,
+# and cpu_physical_memory_get_dirty.
+src:bitops.c
+src:bitmap.c
diff --git a/tests/tsan/suppressions.tsan b/tests/tsan/suppressions.tsan
new file mode 100644
index 00000000000..73414b9ebd9
--- /dev/null
+++ b/tests/tsan/suppressions.tsan
@@ -0,0 +1,14 @@
+# This is the set of runtime suppressions of TSan warnings.
+# The goal would be to have here only items we do not
+# plan to fix, and to explain why for each item.
+
+# TSan reports a double lock on RECURSIVE mutexes.
+# Since the recursive lock is intentional, we choose to ignore it.
+mutex:aio_context_acquire
+mutex:pthread_mutex_lock
+
+# TSan reports a race betwen pthread_mutex_init() and
+# pthread_mutex_lock(). Since this is outside of QEMU,
+# we choose to ignore it.
+race:pthread_mutex_init
+race:pthread_mutex_lock
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 13/18] include/qemu: Added tsan.h for annotations.
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (11 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 12/18] tests/docker: Added docker build support for TSan Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 14/18] util: Added tsan annotate for thread name Alex Bennée
` (5 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, aurelien
From: Robert Foley <robert.foley@linaro.org>
These annotations will allow us to give tsan
additional hints. For example, we can inform
tsan about reads/writes to ignore to silence certain
classes of warnings.
We can also annotate threads so that the proper thread
naming shows up in tsan warning results.
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Emilio G. Cota <cota@braap.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-11-robert.foley@linaro.org>
---
include/qemu/tsan.h | 71 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 include/qemu/tsan.h
diff --git a/include/qemu/tsan.h b/include/qemu/tsan.h
new file mode 100644
index 00000000000..09cc665f91d
--- /dev/null
+++ b/include/qemu/tsan.h
@@ -0,0 +1,71 @@
+#ifndef QEMU_TSAN_H
+#define QEMU_TSAN_H
+/*
+ * tsan.h
+ *
+ * This file defines macros used to give ThreadSanitizer
+ * additional information to help suppress warnings.
+ * This is necessary since TSan does not provide a header file
+ * for these annotations. The standard way to include these
+ * is via the below macros.
+ *
+ * Annotation examples can be found here:
+ * https://github.com/llvm/llvm-project/tree/master/compiler-rt/test/tsan
+ * annotate_happens_before.cpp or ignore_race.cpp are good places to start.
+ *
+ * The full set of annotations can be found here in tsan_interface_ann.cpp.
+ * https://github.com/llvm/llvm-project/blob/master/compiler-rt/lib/tsan/rtl/
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifdef CONFIG_TSAN
+/*
+ * Informs TSan of a happens before/after relationship.
+ */
+#define QEMU_TSAN_ANNOTATE_HAPPENS_BEFORE(addr) \
+ AnnotateHappensBefore(__FILE__, __LINE__, (void *)(addr))
+#define QEMU_TSAN_ANNOTATE_HAPPENS_AFTER(addr) \
+ AnnotateHappensAfter(__FILE__, __LINE__, (void *)(addr))
+/*
+ * Gives TSan more information about thread names it can report the
+ * name of the thread in the warning report.
+ */
+#define QEMU_TSAN_ANNOTATE_THREAD_NAME(name) \
+ AnnotateThreadName(__FILE__, __LINE__, (void *)(name))
+/*
+ * Allows defining a region of code on which TSan will not record memory READS.
+ * This has the effect of disabling race detection for this section of code.
+ */
+#define QEMU_TSAN_ANNOTATE_IGNORE_READS_BEGIN() \
+ AnnotateIgnoreReadsBegin(__FILE__, __LINE__)
+#define QEMU_TSAN_ANNOTATE_IGNORE_READS_END() \
+ AnnotateIgnoreReadsEnd(__FILE__, __LINE__)
+/*
+ * Allows defining a region of code on which TSan will not record memory
+ * WRITES. This has the effect of disabling race detection for this
+ * section of code.
+ */
+#define QEMU_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN() \
+ AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
+#define QEMU_TSAN_ANNOTATE_IGNORE_WRITES_END() \
+ AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
+#else
+#define QEMU_TSAN_ANNOTATE_HAPPENS_BEFORE(addr)
+#define QEMU_TSAN_ANNOTATE_HAPPENS_AFTER(addr)
+#define QEMU_TSAN_ANNOTATE_THREAD_NAME(name)
+#define QEMU_TSAN_ANNOTATE_IGNORE_READS_BEGIN()
+#define QEMU_TSAN_ANNOTATE_IGNORE_READS_END()
+#define QEMU_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN()
+#define QEMU_TSAN_ANNOTATE_IGNORE_WRITES_END()
+#endif
+
+void AnnotateHappensBefore(const char *f, int l, void *addr);
+void AnnotateHappensAfter(const char *f, int l, void *addr);
+void AnnotateThreadName(const char *f, int l, char *name);
+void AnnotateIgnoreReadsBegin(const char *f, int l);
+void AnnotateIgnoreReadsEnd(const char *f, int l);
+void AnnotateIgnoreWritesBegin(const char *f, int l);
+void AnnotateIgnoreWritesEnd(const char *f, int l);
+#endif
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 14/18] util: Added tsan annotate for thread name.
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (12 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 13/18] include/qemu: Added tsan.h for annotations Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 15/18] docs: Added details on TSan to testing.rst Alex Bennée
` (4 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, Paolo Bonzini, aurelien
From: Robert Foley <robert.foley@linaro.org>
This allows us to see the name of the thread in tsan
warning reports such as this:
Thread T7 'CPU 1/TCG' (tid=24317, running) created by main thread at:
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-12-robert.foley@linaro.org>
---
util/qemu-thread-posix.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
index 838980aaa55..b4c2359272a 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -15,6 +15,7 @@
#include "qemu/atomic.h"
#include "qemu/notify.h"
#include "qemu-thread-common.h"
+#include "qemu/tsan.h"
static bool name_threads;
@@ -513,6 +514,7 @@ static void *qemu_thread_start(void *args)
# endif
}
#endif
+ QEMU_TSAN_ANNOTATE_THREAD_NAME(qemu_thread_args->name);
g_free(qemu_thread_args->name);
g_free(qemu_thread_args);
pthread_cleanup_push(qemu_thread_atexit_notify, NULL);
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 15/18] docs: Added details on TSan to testing.rst
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (13 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 14/18] util: Added tsan annotate for thread name Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 16/18] tests: Disable select tests under TSan, which hit TSan issue Alex Bennée
` (3 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Robert Foley, Alex Bennée, richard.henderson,
f4bug, cota, aurelien
From: Robert Foley <robert.foley@linaro.org>
Adds TSan details to testing.rst.
This includes background and reference details on TSan,
and details on how to build and test with TSan
both with and without docker.
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Emilio G. Cota <cota@braap.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-13-robert.foley@linaro.org>
---
docs/devel/testing.rst | 107 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 107 insertions(+)
diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
index 770a987ea42..c1ff24370bf 100644
--- a/docs/devel/testing.rst
+++ b/docs/devel/testing.rst
@@ -397,6 +397,113 @@ list is in the ``make docker`` help text. The frequently used ones are:
* ``DEBUG=1``: enables debug. See the previous "Debugging a Docker test
failure" section.
+Thread Sanitizer
+================
+
+Thread Sanitizer (TSan) is a tool which can detect data races. QEMU supports
+building and testing with this tool.
+
+For more information on TSan:
+
+https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual
+
+Thread Sanitizer in Docker
+---------------------------
+TSan is currently supported in the ubuntu2004 docker.
+
+The test-tsan test will build using TSan and then run make check.
+
+.. code::
+
+ make docker-test-tsan@ubuntu2004
+
+TSan warnings under docker are placed in files located at build/tsan/.
+
+We recommend using DEBUG=1 to allow launching the test from inside the docker,
+and to allow review of the warnings generated by TSan.
+
+Building and Testing with TSan
+------------------------------
+
+It is possible to build and test with TSan, with a few additional steps.
+These steps are normally done automatically in the docker.
+
+There is a one time patch needed in clang-9 or clang-10 at this time:
+
+.. code::
+
+ sed -i 's/^const/static const/g' \
+ /usr/lib/llvm-10/lib/clang/10.0.0/include/sanitizer/tsan_interface.h
+
+To configure the build for TSan:
+
+.. code::
+
+ ../configure --enable-tsan --cc=clang-10 --cxx=clang++-10 \
+ --disable-werror --extra-cflags="-O0"
+
+The runtime behavior of TSAN is controlled by the TSAN_OPTIONS environment
+variable.
+
+More information on the TSAN_OPTIONS can be found here:
+
+https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags
+
+For example:
+
+.. code::
+
+ export TSAN_OPTIONS=suppressions=<path to qemu>/tests/tsan/suppressions.tsan \
+ detect_deadlocks=false history_size=7 exitcode=0 \
+ log_path=<build path>/tsan/tsan_warning
+
+The above exitcode=0 has TSan continue without error if any warnings are found.
+This allows for running the test and then checking the warnings afterwards.
+If you want TSan to stop and exit with error on warnings, use exitcode=66.
+
+TSan Suppressions
+-----------------
+Keep in mind that for any data race warning, although there might be a data race
+detected by TSan, there might be no actual bug here. TSan provides several
+different mechanisms for suppressing warnings. In general it is recommended
+to fix the code if possible to eliminate the data race rather than suppress
+the warning.
+
+A few important files for suppressing warnings are:
+
+tests/tsan/suppressions.tsan - Has TSan warnings we wish to suppress at runtime.
+The comment on each supression will typically indicate why we are
+suppressing it. More information on the file format can be found here:
+
+https://github.com/google/sanitizers/wiki/ThreadSanitizerSuppressions
+
+tests/tsan/blacklist.tsan - Has TSan warnings we wish to disable
+at compile time for test or debug.
+Add flags to configure to enable:
+
+"--extra-cflags=-fsanitize-blacklist=<src path>/tests/tsan/blacklist.tsan"
+
+More information on the file format can be found here under "Blacklist Format":
+
+https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags
+
+TSan Annotations
+----------------
+include/qemu/tsan.h defines annotations. See this file for more descriptions
+of the annotations themselves. Annotations can be used to suppress
+TSan warnings or give TSan more information so that it can detect proper
+relationships between accesses of data.
+
+Annotation examples can be found here:
+
+https://github.com/llvm/llvm-project/tree/master/compiler-rt/test/tsan/
+
+Good files to start with are: annotate_happens_before.cpp and ignore_race.cpp
+
+The full set of annotations can be found here:
+
+https://github.com/llvm/llvm-project/blob/master/compiler-rt/lib/tsan/rtl/tsan_interface_ann.cpp
+
VM testing
==========
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 16/18] tests: Disable select tests under TSan, which hit TSan issue.
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (14 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 15/18] docs: Added details on TSan to testing.rst Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 17/18] Revert ".shippable: temporaily disable some cross builds" Alex Bennée
` (2 subsequent siblings)
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, Laurent Vivier, Thomas Huth, berrange, Robert Foley,
Alex Bennée, richard.henderson, f4bug, cota, Paolo Bonzini,
aurelien
From: Robert Foley <robert.foley@linaro.org>
Disable a few tests under CONFIG_TSAN, which
run into a known TSan issue that results in a hang.
https://github.com/google/sanitizers/issues/1116
The disabled tests under TSan include all the qtests as well as
the test-char, test-qga, and test-qdev-global-props.
Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200609200738.445-14-robert.foley@linaro.org>
---
tests/Makefile.include | 9 +++++++--
tests/qtest/Makefile.include | 7 +++++--
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/tests/Makefile.include b/tests/Makefile.include
index c2397de8ed6..8d82c24d835 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -55,7 +55,6 @@ SYSEMU_TARGET_LIST := $(subst -softmmu.mak,,$(notdir \
check-unit-y += tests/check-qdict$(EXESUF)
check-unit-y += tests/check-block-qdict$(EXESUF)
-check-unit-$(CONFIG_SOFTMMU) += tests/test-char$(EXESUF)
check-unit-y += tests/check-qnum$(EXESUF)
check-unit-y += tests/check-qstring$(EXESUF)
check-unit-y += tests/check-qlist$(EXESUF)
@@ -108,7 +107,6 @@ check-unit-y += tests/test-qht$(EXESUF)
check-unit-y += tests/test-qht-par$(EXESUF)
check-unit-y += tests/test-bitops$(EXESUF)
check-unit-y += tests/test-bitcnt$(EXESUF)
-check-unit-$(CONFIG_SOFTMMU) += tests/test-qdev-global-props$(EXESUF)
check-unit-y += tests/check-qom-interface$(EXESUF)
check-unit-y += tests/check-qom-proplist$(EXESUF)
check-unit-y += tests/test-qemu-opts$(EXESUF)
@@ -123,9 +121,16 @@ check-speed-$(CONFIG_BLOCK) += tests/benchmark-crypto-cipher$(EXESUF)
check-unit-$(CONFIG_BLOCK) += tests/test-crypto-secret$(EXESUF)
check-unit-$(call land,$(CONFIG_BLOCK),$(CONFIG_GNUTLS)) += tests/test-crypto-tlscredsx509$(EXESUF)
check-unit-$(call land,$(CONFIG_BLOCK),$(CONFIG_GNUTLS)) += tests/test-crypto-tlssession$(EXESUF)
+ifndef CONFIG_TSAN
+# Some tests: test-char, test-qdev-global-props, and test-qga,
+# are not runnable under TSan due to a known issue.
+# https://github.com/google/sanitizers/issues/1116
+check-unit-$(CONFIG_SOFTMMU) += tests/test-char$(EXESUF)
+check-unit-$(CONFIG_SOFTMMU) += tests/test-qdev-global-props$(EXESUF)
ifneq (,$(findstring qemu-ga,$(TOOLS)))
check-unit-$(call land,$(CONFIG_LINUX),$(CONFIG_VIRTIO_SERIAL)) += tests/test-qga$(EXESUF)
endif
+endif
check-unit-$(CONFIG_SOFTMMU) += tests/test-timed-average$(EXESUF)
check-unit-$(call land,$(CONFIG_SOFTMMU),$(CONFIG_INOTIFY1)) += tests/test-util-filemonitor$(EXESUF)
check-unit-$(CONFIG_SOFTMMU) += tests/test-util-sockets$(EXESUF)
diff --git a/tests/qtest/Makefile.include b/tests/qtest/Makefile.include
index 9e5a51d033a..71fd714a2a9 100644
--- a/tests/qtest/Makefile.include
+++ b/tests/qtest/Makefile.include
@@ -313,12 +313,15 @@ tests/qtest/tpm-tis-device-test$(EXESUF): tests/qtest/tpm-tis-device-test.o test
# QTest rules
TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGET_DIRS)))
+QTEST_TARGETS =
+# The qtests are not runnable (yet) under TSan due to a known issue.
+# https://github.com/google/sanitizers/issues/1116
+ifndef CONFIG_TSAN
ifeq ($(CONFIG_POSIX),y)
QTEST_TARGETS = $(TARGETS)
check-qtest-y=$(foreach TARGET,$(TARGETS), $(check-qtest-$(TARGET)-y:%=tests/qtest/%$(EXESUF)))
check-qtest-y += $(check-qtest-generic-y:%=tests/qtest/%$(EXESUF))
-else
-QTEST_TARGETS =
+endif
endif
qtest-obj-y = tests/qtest/libqtest.o $(test-util-obj-y)
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 17/18] Revert ".shippable: temporaily disable some cross builds"
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (15 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 16/18] tests: Disable select tests under TSan, which hit TSan issue Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-12 19:02 ` [PATCH v1 18/18] cirrus.yml: serialise make check Alex Bennée
2020-06-12 19:44 ` [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) no-reply
18 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Alex Bennée, richard.henderson, f4bug,
Philippe Mathieu-Daudé, cota, aurelien
This reverts commit 12d43b5ae916809aad9ccf8aa2a0a06260527340.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
.shippable.yml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/.shippable.yml b/.shippable.yml
index 10cf219bff4..2cce7b56890 100644
--- a/.shippable.yml
+++ b/.shippable.yml
@@ -5,8 +5,8 @@ env:
global:
- LC_ALL=C
matrix:
- # - IMAGE=debian-amd64
- # TARGET_LIST=x86_64-softmmu,x86_64-linux-user
+ - IMAGE=debian-amd64
+ TARGET_LIST=x86_64-softmmu,x86_64-linux-user
- IMAGE=debian-win32-cross
TARGET_LIST=arm-softmmu,i386-softmmu,lm32-softmmu
- IMAGE=debian-win64-cross
@@ -19,10 +19,10 @@ env:
TARGET_LIST=aarch64-softmmu,aarch64-linux-user
- IMAGE=debian-s390x-cross
TARGET_LIST=s390x-softmmu,s390x-linux-user
- # - IMAGE=debian-mips-cross
- # TARGET_LIST=mips-softmmu,mipsel-linux-user
- # - IMAGE=debian-mips64el-cross
- # TARGET_LIST=mips64el-softmmu,mips64el-linux-user
+ - IMAGE=debian-mips-cross
+ TARGET_LIST=mips-softmmu,mipsel-linux-user
+ - IMAGE=debian-mips64el-cross
+ TARGET_LIST=mips64el-softmmu,mips64el-linux-user
- IMAGE=debian-ppc64el-cross
TARGET_LIST=ppc64-softmmu,ppc64-linux-user,ppc64abi32-linux-user
build:
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v1 18/18] cirrus.yml: serialise make check
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (16 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 17/18] Revert ".shippable: temporaily disable some cross builds" Alex Bennée
@ 2020-06-12 19:02 ` Alex Bennée
2020-06-13 8:22 ` Li-Wen Hsu
2020-06-12 19:44 ` [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) no-reply
18 siblings, 1 reply; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: fam, berrange, Alex Bennée, richard.henderson, f4bug, cota,
Ed Maste, Li-Wen Hsu, aurelien
We do this on our other platforms to make it easier to see what has
broken.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
.cirrus.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.cirrus.yml b/.cirrus.yml
index ce7850a320e..69342ae031b 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -14,7 +14,7 @@ freebsd_12_task:
- cd build
- ../configure || { cat config.log; exit 1; }
- gmake -j8
- - gmake -j8 V=1 check
+ - gmake V=1 check
macos_task:
osx_instance:
@@ -26,7 +26,7 @@ macos_task:
- cd build
- ../configure --python=/usr/local/bin/python3 || { cat config.log; exit 1; }
- gmake -j$(sysctl -n hw.ncpu)
- - gmake check -j$(sysctl -n hw.ncpu)
+ - gmake check
macos_xcode_task:
osx_instance:
@@ -39,4 +39,4 @@ macos_xcode_task:
- cd build
- ../configure --cc=clang || { cat config.log; exit 1; }
- gmake -j$(sysctl -n hw.ncpu)
- - gmake check -j$(sysctl -n hw.ncpu)
+ - gmake check
--
2.20.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH v1 18/18] cirrus.yml: serialise make check
2020-06-12 19:02 ` [PATCH v1 18/18] cirrus.yml: serialise make check Alex Bennée
@ 2020-06-13 8:22 ` Li-Wen Hsu
0 siblings, 0 replies; 23+ messages in thread
From: Li-Wen Hsu @ 2020-06-13 8:22 UTC (permalink / raw)
To: Alex Bennée
Cc: Fam Zheng, berrange, richard.henderson, qemu-devel,
Philippe Mathieu-Daudé, cota, Ed Maste, aurelien
On Sat, Jun 13, 2020 at 3:08 AM Alex Bennée <alex.bennee@linaro.org> wrote:
>
> We do this on our other platforms to make it easier to see what has
> broken.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Li-Wen Hsu <lwhsu@FreeBSD.org>
> ---
> .cirrus.yml | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/.cirrus.yml b/.cirrus.yml
> index ce7850a320e..69342ae031b 100644
> --- a/.cirrus.yml
> +++ b/.cirrus.yml
> @@ -14,7 +14,7 @@ freebsd_12_task:
> - cd build
> - ../configure || { cat config.log; exit 1; }
> - gmake -j8
> - - gmake -j8 V=1 check
> + - gmake V=1 check
>
> macos_task:
> osx_instance:
> @@ -26,7 +26,7 @@ macos_task:
> - cd build
> - ../configure --python=/usr/local/bin/python3 || { cat config.log; exit 1; }
> - gmake -j$(sysctl -n hw.ncpu)
> - - gmake check -j$(sysctl -n hw.ncpu)
> + - gmake check
>
> macos_xcode_task:
> osx_instance:
> @@ -39,4 +39,4 @@ macos_xcode_task:
> - cd build
> - ../configure --cc=clang || { cat config.log; exit 1; }
> - gmake -j$(sysctl -n hw.ncpu)
> - - gmake check -j$(sysctl -n hw.ncpu)
> + - gmake check
> --
> 2.20.1
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds)
2020-06-12 19:02 [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) Alex Bennée
` (17 preceding siblings ...)
2020-06-12 19:02 ` [PATCH v1 18/18] cirrus.yml: serialise make check Alex Bennée
@ 2020-06-12 19:44 ` no-reply
2020-06-12 21:40 ` Philippe Mathieu-Daudé
18 siblings, 1 reply; 23+ messages in thread
From: no-reply @ 2020-06-12 19:44 UTC (permalink / raw)
To: alex.bennee
Cc: fam, berrange, richard.henderson, qemu-devel, f4bug, cota,
alex.bennee, aurelien
Patchew URL: https://patchew.org/QEMU/20200612190237.30436-1-alex.bennee@linaro.org/
Hi,
This series failed the asan build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
=== TEST SCRIPT BEGIN ===
#!/bin/bash
export ARCH=x86_64
make docker-image-fedora V=1 NETWORK=1
time make docker-test-debug@fedora TARGET_LIST=x86_64-softmmu J=14 NETWORK=1
=== TEST SCRIPT END ===
perl-Encode-devel x86_64 4:3.06-445.fc32 updates 42 k
perl-Env noarch 1.04-440.fc32 fedora 19 k
perl-Errno x86_64 1.30-453.fc32 updates 24 k
perl-Error noarch 1:0.17029-1.fc32 fedora 42 k
perl-Exporter noarch 5.74-2.fc32 fedora 32 k
perl-Exporter-Tiny noarch 1.002001-5.fc32 fedora 51 k
perl-ExtUtils-CBuilder noarch 1:0.280234-2.fc32 fedora 47 k
---
(523/711): perl-Env-1.04-440.fc32.noarch.rpm 288 kB/s | 19 kB 00:00
(524/711): perl-Encode-Locale-1.05-15.fc32.noar 154 kB/s | 19 kB 00:00
(525/711): perl-Exporter-5.74-2.fc32.noarch.rpm 466 kB/s | 32 kB 00:00
(526/711): perl-Error-0.17029-1.fc32.noarch.rpm 513 kB/s | 42 kB 00:00
(527/711): perl-Exporter-Tiny-1.002001-5.fc32.n 635 kB/s | 51 kB 00:00
(528/711): perl-ExtUtils-CBuilder-0.280234-2.fc 681 kB/s | 47 kB 00:00
(529/711): perl-ExtUtils-Command-7.44-2.fc32.no 180 kB/s | 14 kB 00:00
---
Installing : perl-DB_File-1.853-2.fc32.x86_64 182/725
Installing : perl-Devel-Size-0.83-5.fc32.x86_64 183/725
Installing : perl-Env-1.04-440.fc32.noarch 184/725
Installing : perl-Error-1:0.17029-1.fc32.noarch 185/725
Installing : perl-ExtUtils-MM-Utils-2:7.44-2.fc32.noarch 186/725
Installing : perl-IPC-SysV-2.07-442.fc32.x86_64 187/725
Installing : perl-IPC-System-Simple-1.30-1.fc32.noarch 188/725
---
Verifying : perl-Digest-SHA-1:6.02-442.fc32.x86_64 522/725
Verifying : perl-Encode-Locale-1.05-15.fc32.noarch 523/725
Verifying : perl-Env-1.04-440.fc32.noarch 524/725
Verifying : perl-Error-1:0.17029-1.fc32.noarch 525/725
Verifying : perl-Exporter-5.74-2.fc32.noarch 526/725
Verifying : perl-Exporter-Tiny-1.002001-5.fc32.noarch 527/725
Verifying : perl-ExtUtils-CBuilder-1:0.280234-2.fc32.noarch 528/725
---
perl-Encode-devel-4:3.06-445.fc32.x86_64
perl-Env-1.04-440.fc32.noarch
perl-Errno-1.30-453.fc32.x86_64
perl-Error-1:0.17029-1.fc32.noarch
perl-Exporter-5.74-2.fc32.noarch
perl-Exporter-Tiny-1.002001-5.fc32.noarch
perl-ExtUtils-CBuilder-1:0.280234-2.fc32.noarch
---
CC contrib/vhost-user-input/main.o
LINK tests/qemu-iotests/socket_scm_helper
GEN docs/interop/qemu-qmp-ref.html
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
GEN docs/interop/qemu-qmp-ref.txt
GEN docs/interop/qemu-qmp-ref.7
CC qga/commands.o
---
AR libvhost-user.a
GEN docs/interop/qemu-ga-ref.html
GEN docs/interop/qemu-ga-ref.txt
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
GEN docs/interop/qemu-ga-ref.7
AS pc-bios/optionrom/kvmvapic.o
LINK qemu-keymap
AS pc-bios/optionrom/pvh.o
LINK ivshmem-client
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
CC pc-bios/optionrom/pvh_main.o
BUILD pc-bios/optionrom/multiboot.img
BUILD pc-bios/optionrom/linuxboot.img
---
BUILD pc-bios/optionrom/linuxboot_dma.img
BUILD pc-bios/optionrom/linuxboot_dma.raw
SIGN pc-bios/optionrom/linuxboot_dma.bin
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-storage-daemon
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-io
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-edid
BUILD pc-bios/optionrom/pvh.img
BUILD pc-bios/optionrom/pvh.raw
LINK fsdev/virtfs-proxy-helper
SIGN pc-bios/optionrom/pvh.bin
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK scsi/qemu-pr-helper
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-bridge-helper
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK virtiofsd
LINK vhost-user-input
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-ga
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
GEN x86_64-softmmu/hmp-commands.h
GEN x86_64-softmmu/hmp-commands-info.h
GEN x86_64-softmmu/config-devices.h
---
CC x86_64-softmmu/tcg/optimize.o
CC x86_64-softmmu/fpu/softfloat.o
CC x86_64-softmmu/disas.o
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
GEN x86_64-softmmu/gdbstub-xml.c
CC x86_64-softmmu/arch_init.o
CC x86_64-softmmu/cpus.o
CC x86_64-softmmu/gdbstub.o
CC x86_64-softmmu/balloon.o
CC x86_64-softmmu/ioport.o
/tmp/qemu-test/src/fpu/softfloat.c:3365:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
/tmp/qemu-test/src/fpu/softfloat.c:3423:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
/tmp/qemu-test/src/fpu/softfloat.c:3483:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
absZ0 &= ~(((uint64_t)(absZ1<<1) == 0) & roundNearestEven);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
/tmp/qemu-test/src/fpu/softfloat.c:3606:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
/tmp/qemu-test/src/fpu/softfloat.c:3760:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
/tmp/qemu-test/src/fpu/softfloat.c:3987:21: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
/tmp/qemu-test/src/fpu/softfloat.c:4003:22: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
zSig0 &= ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
/tmp/qemu-test/src/fpu/softfloat.c:4273:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
8 errors generated.
make[1]: *** [/tmp/qemu-test/src/rules.mak:69: fpu/softfloat.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:527: x86_64-softmmu/all] Error 2
Traceback (most recent call last):
File "./tests/docker/docker.py", line 665, in <module>
sys.exit(main())
---
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=0707a4f0c5be4f58ae0257e7d83b37cd', '-u', '1003', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=x86_64-softmmu', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew2/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-qa5bhn4d/src/docker-src.2020-06-12-15.38.21.31693:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-debug']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=0707a4f0c5be4f58ae0257e7d83b37cd
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-qa5bhn4d/src'
make: *** [docker-run-test-debug@fedora] Error 2
real 6m42.854s
user 0m9.836s
The full log is available at
http://patchew.org/logs/20200612190237.30436-1-alex.bennee@linaro.org/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds)
2020-06-12 19:44 ` [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds) no-reply
@ 2020-06-12 21:40 ` Philippe Mathieu-Daudé
2020-06-12 23:49 ` Alex Bennée
0 siblings, 1 reply; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-06-12 21:40 UTC (permalink / raw)
To: qemu-devel, alex.bennee; +Cc: fam, richard.henderson, cota, berrange, aurelien
On 6/12/20 9:44 PM, no-reply@patchew.org wrote:
> Patchew URL: https://patchew.org/QEMU/20200612190237.30436-1-alex.bennee@linaro.org/
> CC x86_64-softmmu/fpu/softfloat.o
> CC x86_64-softmmu/disas.o
> /usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
> GEN x86_64-softmmu/gdbstub-xml.c
> CC x86_64-softmmu/arch_init.o
> CC x86_64-softmmu/cpus.o
> CC x86_64-softmmu/gdbstub.o
> CC x86_64-softmmu/balloon.o
> CC x86_64-softmmu/ioport.o
> /tmp/qemu-test/src/fpu/softfloat.c:3365:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
> absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> !
> /tmp/qemu-test/src/fpu/softfloat.c:3423:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
> absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> !
> /tmp/qemu-test/src/fpu/softfloat.c:3483:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
> absZ0 &= ~(((uint64_t)(absZ1<<1) == 0) & roundNearestEven);
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> !
> /tmp/qemu-test/src/fpu/softfloat.c:3606:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
> zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> !
> /tmp/qemu-test/src/fpu/softfloat.c:3760:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
> zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> !
> /tmp/qemu-test/src/fpu/softfloat.c:3987:21: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
> ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> !
> /tmp/qemu-test/src/fpu/softfloat.c:4003:22: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
> zSig0 &= ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> !
> /tmp/qemu-test/src/fpu/softfloat.c:4273:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
> zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> !
> 8 errors generated.
> make[1]: *** [/tmp/qemu-test/src/rules.mak:69: fpu/softfloat.o] Error 1
> make[1]: *** Waiting for unfinished jobs....
> make: *** [Makefile:527: x86_64-softmmu/all] Error 2
The fix for this is in Richard's tcg queue:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg711229.html
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v1 00/18] testing/next (tsan, dtc warnings, cross-builds)
2020-06-12 21:40 ` Philippe Mathieu-Daudé
@ 2020-06-12 23:49 ` Alex Bennée
0 siblings, 0 replies; 23+ messages in thread
From: Alex Bennée @ 2020-06-12 23:49 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: fam, berrange, richard.henderson, qemu-devel, cota, aurelien
Philippe Mathieu-Daudé <f4bug@amsat.org> writes:
> On 6/12/20 9:44 PM, no-reply@patchew.org wrote:
>> Patchew URL: https://patchew.org/QEMU/20200612190237.30436-1-alex.bennee@linaro.org/
>> CC x86_64-softmmu/fpu/softfloat.o
>> CC x86_64-softmmu/disas.o
>> /usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
>> GEN x86_64-softmmu/gdbstub-xml.c
>> CC x86_64-softmmu/arch_init.o
>> CC x86_64-softmmu/cpus.o
>> CC x86_64-softmmu/gdbstub.o
>> CC x86_64-softmmu/balloon.o
>> CC x86_64-softmmu/ioport.o
>> /tmp/qemu-test/src/fpu/softfloat.c:3365:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>> absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> !
>> /tmp/qemu-test/src/fpu/softfloat.c:3423:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>> absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> !
>> /tmp/qemu-test/src/fpu/softfloat.c:3483:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>> absZ0 &= ~(((uint64_t)(absZ1<<1) == 0) & roundNearestEven);
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> !
>> /tmp/qemu-test/src/fpu/softfloat.c:3606:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>> zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> !
>> /tmp/qemu-test/src/fpu/softfloat.c:3760:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>> zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> !
>> /tmp/qemu-test/src/fpu/softfloat.c:3987:21: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>> ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> !
>> /tmp/qemu-test/src/fpu/softfloat.c:4003:22: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>> zSig0 &= ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> !
>> /tmp/qemu-test/src/fpu/softfloat.c:4273:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>> zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> !
>> 8 errors generated.
>> make[1]: *** [/tmp/qemu-test/src/rules.mak:69: fpu/softfloat.o] Error 1
>> make[1]: *** Waiting for unfinished jobs....
>> make: *** [Makefile:527: x86_64-softmmu/all] Error 2
>
> The fix for this is in Richard's tcg queue:
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg711229.html
Ahh of course - the fedora bump brought the newer clang.
--
Alex Bennée
^ permalink raw reply [flat|nested] 23+ messages in thread