From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59277) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bLSy3-0007xc-Tf for qemu-devel@nongnu.org; Fri, 08 Jul 2016 06:25:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bLSy0-0004IP-Oi for qemu-devel@nongnu.org; Fri, 08 Jul 2016 06:25:07 -0400 Received: from mail-lf0-x241.google.com ([2a00:1450:4010:c07::241]:36699) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bLSy0-0004I8-GY for qemu-devel@nongnu.org; Fri, 08 Jul 2016 06:25:04 -0400 Received: by mail-lf0-x241.google.com with SMTP id a2so5394218lfe.3 for ; Fri, 08 Jul 2016 03:25:04 -0700 (PDT) References: <1467735496-16256-7-git-send-email-alex.bennee@linaro.org> <1467909880-18834-1-git-send-email-sergey.fedorov@linaro.org> <1467909880-18834-4-git-send-email-sergey.fedorov@linaro.org> <71295249.5198305.1467967205882.JavaMail.zimbra@redhat.com> From: Sergey Fedorov Message-ID: <577F7F7D.4010207@gmail.com> Date: Fri, 8 Jul 2016 13:25:01 +0300 MIME-Version: 1.0 In-Reply-To: <71295249.5198305.1467967205882.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 3/3] tcg: Avoid bouncing tb_lock between tb_gen_code() and tb_add_jump() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini , Sergey Fedorov Cc: qemu-devel@nongnu.org, =?UTF-8?Q?Alex_Benn=c3=a9e?= , patches@linaro.org, mttcg@greensocs.com, fred konrad , a rigo , cota@braap.org, bobby prani , rth@twiddle.net, mark burton , jan kiszka , peter maydell , claudio fontana , Peter Crosthwaite On 08/07/16 11:40, Paolo Bonzini wrote: > Even better: add a "bool *tb_locked" argument to tb_find_slow, and > don't move the mmap_lock release. Then tb_find_fast knows directly > whether tb_lock is taken, and you don't need any of tb_lock_reset > or mmap_lock_reset. I think we can do even better. One option is using a separate tiny lock to protect direct jump set/reset instead of tb_lock. Another option which I've had in my mind for some time is to make direct jump set/reset thread-safe. We already have thread-safe TB patching. The only question is the right order of operations and handling jmp_list_next/jmp_list_first safely. I think that could be done by removing tb_remove_from_jmp_list() and making RCU-like manipulation with jmp_list_next/jmp_list_first. What do you think? Kind regards, Sergey