From 76442a939ef8fc062b35a890a824de203bb5bd5f Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Fri, 22 Apr 2016 19:08:45 +0300 Subject: tci: Make direct jump patching thread-safe Ensure direct jump patching in TCI is atomic by: * naturally aligning a location of direct jump address; * using atomic_read()/atomic_set() to load/store the address. Signed-off-by: Sergey Fedorov Signed-off-by: Sergey Fedorov Message-Id: <1461341333-19646-4-git-send-email-sergey.fedorov@linaro.org> Signed-off-by: Richard Henderson --- tci.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'tci.c') diff --git a/tci.c b/tci.c index 82705fe..a8939e6 100644 --- a/tci.c +++ b/tci.c @@ -1089,7 +1089,10 @@ uintptr_t tcg_qemu_tb_exec(CPUArchState *env, uint8_t *tb_ptr) goto exit; break; case INDEX_op_goto_tb: - t0 = tci_read_i32(&tb_ptr); + /* Jump address is aligned */ + tb_ptr = QEMU_ALIGN_PTR_UP(tb_ptr, 4); + t0 = atomic_read((int32_t *)tb_ptr); + tb_ptr += sizeof(int32_t); tci_assert(tb_ptr == old_code_ptr + op_size); tb_ptr += (int32_t)t0; continue; -- cgit v1.1