From: Sergey Fedorov <serge.f...@gmail.com> The check does not give an absolute guarantee of thread safety because there still may be a race condition between two threads which both have just read zero from jmp_list_next[n] and proceed with list modification. Clarify this in the comment to attract here some attention.
Signed-off-by: Sergey Fedorov <serge.f...@gmail.com> Signed-off-by: Sergey Fedorov <sergey.fedo...@linaro.org> --- include/exec/exec-all.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index cd96219a89e7..4f36d109ac7f 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -390,7 +390,10 @@ static inline void tb_set_jmp_target(TranslationBlock *tb, static inline void tb_add_jump(TranslationBlock *tb, int n, TranslationBlock *tb_next) { - /* NOTE: this test is only needed for thread safety */ + /* FIXME: This test provides only some probablistic "thread safety" for + * user-mode emulation; appropriate synchronization/locking scheme should + * be implemented. + */ if (!tb->jmp_list_next[n]) { /* patch the native jump address */ tb_set_jmp_target(tb, n, (uintptr_t)tb_next->tc_ptr); -- 2.7.3