From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43395) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bLF5l-0008Mf-P2 for qemu-devel@nongnu.org; Thu, 07 Jul 2016 15:36:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bLF5f-0006JI-AK for qemu-devel@nongnu.org; Thu, 07 Jul 2016 15:36:08 -0400 Received: from mail-wm0-x232.google.com ([2a00:1450:400c:c09::232]:38032) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bLF5f-0006JD-3x for qemu-devel@nongnu.org; Thu, 07 Jul 2016 15:36:03 -0400 Received: by mail-wm0-x232.google.com with SMTP id n127so28271109wme.1 for ; Thu, 07 Jul 2016 12:36:03 -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> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <1467909880-18834-4-git-send-email-sergey.fedorov@linaro.org> Date: Thu, 07 Jul 2016 20:36:05 +0100 Message-ID: <877fcxmeai.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit 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: Sergey Fedorov Cc: qemu-devel@nongnu.org, patches@linaro.org, Sergey Fedorov , mttcg@listserver.greensocs.com, fred.konrad@greensocs.com, a.rigo@virtualopensystems.com, cota@braap.org, bobby.prani@gmail.com, rth@twiddle.net, mark.burton@greensocs.com, pbonzini@redhat.com, jan.kiszka@siemens.com, peter.maydell@linaro.org, claudio.fontana@huawei.com, Peter Crosthwaite Sergey Fedorov writes: > From: Sergey Fedorov > > Signed-off-by: Sergey Fedorov > Signed-off-by: Sergey Fedorov > --- > cpu-exec.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/cpu-exec.c b/cpu-exec.c > index dd0bd5007701..54c935039592 100644 > --- a/cpu-exec.c > +++ b/cpu-exec.c > @@ -295,7 +295,8 @@ static TranslationBlock *tb_find_slow(CPUState *cpu, > > /* mmap_lock is needed by tb_gen_code, and mmap_lock must be > * taken outside tb_lock. As system emulation is currently > - * single threaded the locks are NOPs. > + * single threaded the locks are NOPs. Both locks are to be > + * released at the end of tb_find_fast(). > */ > mmap_lock(); > tb_lock(); > @@ -308,9 +309,6 @@ static TranslationBlock *tb_find_slow(CPUState *cpu, > /* if no translated code available, then translate it now */ > tb = tb_gen_code(cpu, pc, cs_base, flags, 0); > } > - > - tb_unlock(); > - mmap_unlock(); Hmm pushing these outside of tb_find_slow() makes me uncomfortable. I guess tb_find_fast/slow are intimately tied together but the idea of taking locks which are the responsibility of the calling function to clear seems ugly to me. > } > > /* We add the TB in the virtual pc hash table for the fast lookup */ > @@ -354,10 +352,15 @@ static inline TranslationBlock *tb_find_fast(CPUState *cpu, > #endif > /* See if we can patch the calling TB. */ > if (*last_tb && !qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) { > - tb_lock(); > + if (!tb_lock_locked()) { > + tb_lock(); > + } > tb_add_jump(*last_tb, tb_exit, tb); > - tb_unlock(); > } > + > + tb_lock_reset(); > + mmap_lock_reset(); > + > return tb; > } -- Alex Bennée