qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer


From: Alex Bennée
Subject: [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer
Date: Fri, 30 Sep 2016 22:30:51 +0100

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]