From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49628) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bq5Ou-0006Rf-DF for qemu-devel@nongnu.org; Fri, 30 Sep 2016 17:31:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bq5Oq-0006VA-Sk for qemu-devel@nongnu.org; Fri, 30 Sep 2016 17:31:23 -0400 Received: from mail-wm0-x22d.google.com ([2a00:1450:400c:c09::22d]:33600) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bq5Oq-0006Ua-Cs for qemu-devel@nongnu.org; Fri, 30 Sep 2016 17:31:20 -0400 Received: by mail-wm0-x22d.google.com with SMTP id f193so1071403wmg.0 for ; Fri, 30 Sep 2016 14:31:19 -0700 (PDT) From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Fri, 30 Sep 2016 22:30:51 +0100 Message-Id: <20160930213106.20186-1-alex.bennee@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, pbonzini@redhat.com Cc: mttcg@listserver.greensocs.com, fred.konrad@greensocs.com, a.rigo@virtualopensystems.com, cota@braap.org, bobby.prani@gmail.com, nikunj@linux.vnet.ibm.com, mark.burton@greensocs.com, jan.kiszka@siemens.com, serge.fdrv@gmail.com, rth@twiddle.net, peter.maydell@linaro.org, claudio.fontana@huawei.com, =?UTF-8?q?Alex=20Benn=C3=A9e?= Hi, This is v3 of the ThreadSanitizer fixes. Changes from the last version: - added some more review tags - made clear C11 undefined behaviour is the main issue - added two minor fixes to atomic.h - change type of tb_page_addr_t back to target_ulong - dropped ui/vnc-enc-tight patch (already picked up an merged) - dropped the blacklist patch (not needed with gcc) - fixed a number of remaining issues with: - TranslationBuffer access - PageDesc access A number of the patches fix fairly rare race conditions. In fact I had to repeat my test case a number of times to trigger some of them: retry.py -n 100 -c -- ./arm-linux-user/qemu-arm ./pigz.armhf \ -c -9 linux-4.6.3.tar > /dev/null 2> tsan-user-async.log On a build with a light patch to reduce the size of the translation buffer so we trigger lots of flushes. With this series applied you can enable ThreadSanitizer with the following command line: ./configure --extra-cflags="-g3 -O0 -fsanitize=thread -D__SANITIZE_THREAD__" \ --with-coroutine=gthread --disable-pie --enable-debug --enable-debug-info breakdown: -fsanitize=thread - enables sanitizer --with-coroutine=gthread - tsan chokes on other forms of coroutine --disable-pie - tsan no longer works with PIE --enable-debug --enable-debug-info - better backtraces Remaining work: Running make check with the sanitzer enabled flags up a number of warnings. I'm going to leave those for others to investigate as I need to press on with the next MTTCG re-base ;-) Alex Bennée (14): atomic.h: fix __SANITIZE_THREAD__ build atomic.h: comment on use of atomic_read/set exec-all.h: revert tb_page_addr_t to target_ulong tcg/optimize: move default return out of if statement qom/object: update class cache atomically qom/cpu: atomically clear the tb_jmp_cache cpu: atomically modify cpu->exit_request util/qht: atomically set b->hashes linux-user/syscall: extend lock around cpu-list qga/command: use QEMU atomic primitives .travis.yml: add gcc sanitizer build tcg: ensure cpu_tb_exec/tb_gen_code use atomic_read/write tcg: update remaining TranslationBuffer fields atomically translate-all: mark updates to PageDesc as atomic Paolo Bonzini (1): seqlock: use atomic writes for the sequence .travis.yml | 45 ++++++++++++++++++++++++++ cpu-exec.c | 30 ++++++++--------- include/exec/exec-all.h | 13 +++++++- include/qemu/atomic.h | 8 ++++- include/qemu/seqlock.h | 4 +-- linux-user/syscall.c | 7 +++- qga/commands.c | 17 +++++----- qom/cpu.c | 10 ++++-- qom/object.c | 15 +++++---- tcg/optimize.c | 3 +- translate-all.c | 86 +++++++++++++++++++++++++------------------------ util/qht.c | 10 +++--- 12 files changed, 161 insertions(+), 87 deletions(-) -- 2.9.3