From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54607) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ast2r-0004YT-Nq for qemu-devel@nongnu.org; Wed, 20 Apr 2016 10:24:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ast2m-000447-4Z for qemu-devel@nongnu.org; Wed, 20 Apr 2016 10:23:57 -0400 Received: from mail-wm0-x234.google.com ([2a00:1450:400c:c09::234]:38635) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ast2l-00043z-UN for qemu-devel@nongnu.org; Wed, 20 Apr 2016 10:23:52 -0400 Received: by mail-wm0-x234.google.com with SMTP id u206so84436316wme.1 for ; Wed, 20 Apr 2016 07:23:51 -0700 (PDT) References: <1460044433-19282-1-git-send-email-sergey.fedorov@linaro.org> <1460044433-19282-10-git-send-email-sergey.fedorov@linaro.org> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <1460044433-19282-10-git-send-email-sergey.fedorov@linaro.org> Date: Wed, 20 Apr 2016 15:23:49 +0100 Message-ID: <87inzcuznu.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH 09/11] tcg/sparc: Make direct jump patching thread-safe List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Sergey Fedorov Cc: qemu-devel@nongnu.org, Sergey Fedorov , Paolo Bonzini , Peter Crosthwaite , Richard Henderson , Blue Swirl Sergey Fedorov writes: > From: Sergey Fedorov > > Ensure direct jump patching in SPARC is atomic by using > atomic_read()/atomic_set() for code patching. > > Signed-off-by: Sergey Fedorov > Signed-off-by: Sergey Fedorov > --- > tcg/sparc/tcg-target.inc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tcg/sparc/tcg-target.inc.c b/tcg/sparc/tcg-target.inc.c > index 54df1bc42432..629dd7bdafff 100644 > --- a/tcg/sparc/tcg-target.inc.c > +++ b/tcg/sparc/tcg-target.inc.c > @@ -1647,6 +1647,6 @@ void tb_set_jmp_target1(uintptr_t jmp_addr, uintptr_t addr) > the code_gen_buffer can't be larger than 2GB. */ > assert(disp == (int32_t)disp); > > - *ptr = CALL | (uint32_t)disp >> 2; > + atomic_set(ptr, CALL | (uint32_t)disp >> 2); atomic_set(ptr, deposit32(CALL, 0, 30, disp >> 2)) might be a little more explicit. Otherwise: Reviewed-by: Alex Bennée > flush_icache_range(jmp_addr, jmp_addr + 4); > } -- Alex Bennée