Lluís Vilanova writes: > Uses the per-vCPU event state in CPUState->trace_dstate (a bitmap) as an > index to a physical TB cache that will contain code specific to the set > of dynamically enabled events.
> Two vCPUs tracing different events will execute code from different > physical TB caches. Two vCPUs tracing the same events will execute code > from the same physical TB cache. > This is used on the next patch to optimize TCG code related to event > tracing. > Signed-off-by: Lluís Vilanova <vilan...@ac.upc.edu> > --- > cpu-exec.c | 6 ++++++ > trace/control-target.c | 2 ++ > trace/control.h | 3 +++ > translate-all.c | 23 +++++++++++++++++++++++ > translate-all.h | 26 ++++++++++++++++++++++++++ > 5 files changed, 60 insertions(+) [...] > diff --git a/translate-all.c b/translate-all.c > index c864eee..c306cf4 100644 > --- a/translate-all.c > +++ b/translate-all.c > @@ -1166,6 +1166,29 @@ static void tb_link_page(TranslationBlock *tb, > tb_page_addr_t phys_pc, > #endif > } > +void cpu_tb_cache_set_request(CPUState *cpu) > +{ > + /* > + * Request is taken from cpu->trace_dstate and lazily applied into > + * cpu->tb_cache_idx at cpu_tb_cache_set_apply(). > + */ > + /* NOTE: Checked by all TBs in gen_tb_start(). */ > + cpu->tcg_exit_req = true; > +} > + > +bool cpu_tb_cache_set_requested(CPUState *cpu) > +{ > + return !bitmap_equal(cpu->trace_dstate, cpu->tb_cache_idx, > + TRACE_VCPU_EVENT_COUNT); > +} > + > +void cpu_tb_cache_set_apply(CPUState *cpu) > +{ > + bitmap_copy(cpu->tb_cache_idx, cpu->tb_cache_idx, > + TRACE_VCPU_EVENT_COUNT); I forgot to update the patch before sending. This one should be: bitmap_copy(cpu->tb_cache_idx, cpu->trace_dstate, TRACE_VCPU_EVENT_COUNT); I'll wait for other reviews before sending v2 with this fixed. > + tb_flush_jmp_cache_all(cpu); > +} > + > /* Called with mmap_lock held for user mode emulation. */ > TranslationBlock *tb_gen_code(CPUState *cpu, > target_ulong pc, target_ulong cs_base, [...] Cheers, Lluis