From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47472) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bKQ83-0002Ac-7h for qemu-devel@nongnu.org; Tue, 05 Jul 2016 09:11:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bKQ7z-00028C-2f for qemu-devel@nongnu.org; Tue, 05 Jul 2016 09:11:07 -0400 Received: from mail-wm0-x22f.google.com ([2a00:1450:400c:c09::22f]:38412) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bKQ7y-00027e-IZ for qemu-devel@nongnu.org; Tue, 05 Jul 2016 09:11:03 -0400 Received: by mail-wm0-x22f.google.com with SMTP id r201so152046373wme.1 for ; Tue, 05 Jul 2016 06:11:02 -0700 (PDT) References: <1467389770-9738-1-git-send-email-alex.bennee@linaro.org> <1467389770-9738-3-git-send-email-alex.bennee@linaro.org> <20160702003942.GB2295@flamenco> <87lh1hmxsf.fsf@linaro.org> <20160704223001.GA29624@flamenco> <87inwkmj5d.fsf@linaro.org> <38496c08-3c5a-a8a7-dfb2-a81db29c4592@redhat.com> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <38496c08-3c5a-a8a7-dfb2-a81db29c4592@redhat.com> Date: Tue, 05 Jul 2016 14:11:05 +0100 Message-ID: <87h9c4mdqu.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH 2/2] cpu-exec: remove tb_lock from the hot-path List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: "Emilio G. Cota" , mttcg@listserver.greensocs.com, peter.maydell@linaro.org, claudio.fontana@huawei.com, Peter Crosthwaite , jan.kiszka@siemens.com, mark.burton@greensocs.com, a.rigo@virtualopensystems.com, qemu-devel@nongnu.org, serge.fdrv@gmail.com, bobby.prani@gmail.com, rth@twiddle.net, fred.konrad@greensocs.com Paolo Bonzini writes: > On 05/07/2016 13:14, Alex Bennée wrote: >> /* >> * Patch the last TB with a jump to the current TB. >> * >> * Modification of the TB has to be protected with tb_lock which can >> * either be already held or taken here. >> */ >> static inline void maybe_patch_last_tb(CPUState *cpu, >> TranslationBlock *tb, >> TranslationBlock **last_tb, >> int tb_exit, >> bool locked) >> { >> if (cpu->tb_flushed) { >> /* Ensure that no TB jump will be modified as the >> * translation buffer has been flushed. >> */ >> *last_tb = NULL; >> cpu->tb_flushed = false; >> } >> #ifndef CONFIG_USER_ONLY >> /* We don't take care of direct jumps when address mapping changes in >> * system emulation. So it's not safe to make a direct jump to a TB >> * spanning two pages because the mapping for the second page can change. >> */ >> if (tb->page_addr[1] != -1) { >> *last_tb = NULL; >> } >> #endif >> /* See if we can patch the calling TB. */ >> if (*last_tb && !qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) { >> if (!locked) { >> tb_lock(); >> } >> tb_add_jump(*last_tb, tb_exit, tb); >> if (!locked) { >> tb_unlock(); >> } >> } >> } > > Why not add tb_lock_recursive() and tb_lock_reset()? I thought we didn't like having recursive locking? I agree it would make things a little neater though. -- Alex Bennée