From: Sergey Fedorov <serge.f...@gmail.com> When patching translated code for direct block chaining/unchaining, modification of concurrently executing code can happen in multi-threaded execution. Currently only user-mode is affected. To make direct block patching safe, some care must be taken to make sure that the code modification is made atomically and concurrently executed code is guaranteed to be consistent.
This patch series fixes all supported TCG targets which use direct patching and documents the requirement for direct jump patching be atomic and thread-safe. The series' tree can be found in a public git repository [1]. [1] https://github.com/sergefdrv/qemu/tree/atomic-tb-patching-2 Summary of changes in v2: * Take out mistakingly pulled patches [PATCH 01/11] and [PATCH 02/11] * Two new patches to add some handy macros for alignment [PATCH v2 01/11] and [PATCH v2 02/11] * Use new alignment macros instead of open-coding * Use i386 tcg_out_nopn() implementation suggested by Richard Henderson; rework alignment checking and gap calculation in [PATCH v2 05/11] * Clean up reloc_pc24_atomic() in [PATCH v2 07/11] * Use tcg_debug_assert() instead of assert() * Use deposit32() in [PATCH v2 09/11] * s/atomic_write/atomic_set/ in [PATCH v2 10/11] * Minor rewording in [PATCH v2 11/11] Sergey Fedorov (11): include/qemu/osdep.h: Add a macro to check for alignment include/qemu/osdep.h: Add macros for pointer alignment tci: Make direct jump patching thread-safe tcg/ppc: Make direct jump patching thread-safe tcg/i386: Make direct jump patching thread-safe tcg/s390: Make direct jump patching thread-safe tcg/arm: Make direct jump patching thread-safe tcg/aarch64: Make direct jump patching thread-safe tcg/sparc: Make direct jump patching thread-safe tcg/mips: Make direct jump patching thread-safe tcg: Note requirement on atomic direct jump patching include/exec/exec-all.h | 32 ++++++-------------------------- include/qemu/osdep.h | 14 ++++++++++++++ tcg/aarch64/tcg-target.inc.c | 14 +++++++++++++- tcg/arm/tcg-target.inc.c | 18 ++++++++++++++++++ tcg/i386/tcg-target.inc.c | 23 +++++++++++++++++++++++ tcg/mips/tcg-target.inc.c | 3 ++- tcg/ppc/tcg-target.inc.c | 22 ++++++++++++++++++---- tcg/s390/tcg-target.inc.c | 8 ++++++++ tcg/sparc/tcg-target.inc.c | 2 +- tcg/tci/tcg-target.inc.c | 2 ++ tci.c | 5 ++++- translate-all.c | 2 ++ 12 files changed, 111 insertions(+), 34 deletions(-) -- 2.8.1