On 17/03/16 18:09, Paolo Bonzini wrote:

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.

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

Reply via email to