On 17/03/2016 14:46, sergey.fedo...@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. Paolo