qemu-devel
[Top][All Lists]
Advanced

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

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


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer
Date: Mon, 3 Oct 2016 11:25:20 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0


On 30/09/2016 23:30, Alex Bennée wrote:
> 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(-)
> 

Queueing patches 1, 2 and 4-12.

Paolo



reply via email to

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