All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer
@ 2016-09-30 21:30 Alex Bennée
  2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 01/15] atomic.h: fix __SANITIZE_THREAD__ build Alex Bennée
                   ` (17 more replies)
  0 siblings, 18 replies; 34+ messages in thread
From: Alex Bennée @ 2016-09-30 21:30 UTC (permalink / raw)
  To: qemu-devel, pbonzini
  Cc: mttcg, fred.konrad, a.rigo, cota, bobby.prani, nikunj,
	mark.burton, jan.kiszka, serge.fdrv, rth, peter.maydell,
	claudio.fontana, Alex Bennée

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

^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2016-10-04 14:08 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-30 21:30 [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 01/15] atomic.h: fix __SANITIZE_THREAD__ build Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 02/15] atomic.h: comment on use of atomic_read/set Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 03/15] exec-all.h: revert tb_page_addr_t to target_ulong Alex Bennée
2016-10-03  8:59   ` Paolo Bonzini
2016-10-03  9:32     ` Alex Bennée
2016-10-03 10:10       ` Paolo Bonzini
2016-10-04 14:08         ` Alex Bennée
2016-10-03 15:31       ` Emilio G. Cota
2016-10-03 16:16         ` Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 04/15] tcg/optimize: move default return out of if statement Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 05/15] seqlock: use atomic writes for the sequence Alex Bennée
2016-09-30 22:14   ` Jonathan Neuschäfer
2016-09-30 22:45     ` Alex Bennée
2016-09-30 22:58       ` Jonathan Neuschäfer
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 06/15] qom/object: update class cache atomically Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 07/15] qom/cpu: atomically clear the tb_jmp_cache Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 08/15] cpu: atomically modify cpu->exit_request Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 09/15] util/qht: atomically set b->hashes Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 10/15] linux-user/syscall: extend lock around cpu-list Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 11/15] qga/command: use QEMU atomic primitives Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 12/15] .travis.yml: add gcc sanitizer build Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 13/15] tcg: ensure cpu_tb_exec/tb_gen_code use atomic_read/write Alex Bennée
2016-09-30 22:12   ` [Qemu-devel] [PATCH] fixup! " Alex Bennée
2016-10-03  8:43   ` [Qemu-devel] [PATCH v3 13/15] " Paolo Bonzini
2016-10-03  9:48     ` Alex Bennée
2016-10-03  9:53       ` Paolo Bonzini
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 14/15] tcg: update remaining TranslationBuffer fields atomically Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 15/15] translate-all: mark updates to PageDesc as atomic Alex Bennée
2016-10-03  8:50   ` Paolo Bonzini
2016-09-30 21:54 ` [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer no-reply
2016-09-30 22:06 ` no-reply
2016-10-03  9:25 ` Paolo Bonzini
2016-10-03  9:43   ` Alex Bennée

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.