On Wed, 2022-08-17 at 08:15 -0500, Richard Henderson wrote: > On 8/17/22 06:08, Ilya Leoshkevich wrote: > > @@ -2243,6 +2250,13 @@ void page_set_flags(target_ulong start, > > target_ulong end, int flags) > > (flags & PAGE_WRITE) && > > p->first_tb) { > > tb_invalidate_phys_page(addr, 0); > > + } else { > > + TranslationBlock *tb; > > + int n; > > + > > + PAGE_FOR_EACH_TB(p, tb, n) { > > + cpu_tb_jmp_cache_remove(tb); > > + } > > } > > Here you would use tb_jmp_cache_clear_page(), which should be moved > out of cputlb.c.
That was actually the first thing I tried. Unfortunately tb_jmp_cache_clear_page() relies on tb_jmp_cache_hash_func() returning the same top bits for addresses on the same page. This is not the case for qemu-user: there this property was traded for better hashing with quite impressive performance improvements (6f1653180f570).