From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53978) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agZdS-0003Um-3W for qemu-devel@nongnu.org; Thu, 17 Mar 2016 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1agZdO-0005u7-5E for qemu-devel@nongnu.org; Thu, 17 Mar 2016 11:14:50 -0400 Received: from mail-lf0-x22e.google.com ([2a00:1450:4010:c07::22e]:33224) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agZdN-0005tq-Tp for qemu-devel@nongnu.org; Thu, 17 Mar 2016 11:14:46 -0400 Received: by mail-lf0-x22e.google.com with SMTP id h198so44825534lfh.0 for ; Thu, 17 Mar 2016 08:14:45 -0700 (PDT) References: <1458222382-6498-1-git-send-email-sergey.fedorov@linaro.org> <1458222382-6498-5-git-send-email-sergey.fedorov@linaro.org> <56EAC8A2.7060700@redhat.com> From: Sergey Fedorov Message-ID: <56EAC9E3.60000@gmail.com> Date: Thu, 17 Mar 2016 18:14:43 +0300 MIME-Version: 1.0 In-Reply-To: <56EAC8A2.7060700@redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 4/5] tcg: reorder removal from lists in tb_phys_invalidate List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini , sergey.fedorov@linaro.org, qemu-devel@nongnu.org Cc: Richard Henderson , Peter Crosthwaite On 17/03/16 18:09, Paolo Bonzini wrote: > > On 17/03/2016 14:46, sergey.fedorov@linaro.org wrote: >> void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr) >> { >> - CPUState *cpu; >> PageDesc *p; >> unsigned int h, n1; >> + tb_page_addr_t pc; >> tb_page_addr_t phys_pc; >> TranslationBlock *tb1, *tb2; >> >> - /* remove the TB from the hash list */ >> - phys_pc = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK); >> - h = tb_phys_hash_func(phys_pc); >> - tb_hash_remove(&tcg_ctx.tb_ctx.tb_phys_hash[h], tb); >> - >> - /* remove the TB from the page list */ >> - if (tb->page_addr[0] != page_addr) { >> - p = page_find(tb->page_addr[0] >> TARGET_PAGE_BITS); >> - tb_page_remove(&p->first_tb, tb); >> - invalidate_page_bitmap(p); >> - } >> - if (tb->page_addr[1] != -1 && tb->page_addr[1] != page_addr) { >> - p = page_find(tb->page_addr[1] >> TARGET_PAGE_BITS); >> - tb_page_remove(&p->first_tb, tb); >> - invalidate_page_bitmap(p); >> - } >> - >> - tcg_ctx.tb_ctx.tb_invalidated_flag = 1; >> - > Did you investigate the removal of this setting of tb_invalidated_flag? > > My recollection is that it is okay to remove it because at worse it > would cause a tb_add_jump from an invalidated source to a valid > destination. This should be harmless as long as the source has been > tb_phys_invalidated and not tb_flushed. But this needs to be checked. Thanks for pointing that. I should investigate it to make sure, although arm32/arm64/x86_64 Linux boots fine as well as the latest Alex's kmv-unit-tests pass. Kind regards, Sergey