Claudio Fontana <cfont...@suse.de> writes:
> centralize the registration of the cpus.c module > accelerator operations in accel/accel-softmmu.c > > Signed-off-by: Claudio Fontana <cfont...@suse.de> <snip> > diff --git a/accel/tcg/tcg-cpus.c b/accel/tcg/tcg-cpus.c > index e335f9f155..38a58ab271 100644 > --- a/accel/tcg/tcg-cpus.c > +++ b/accel/tcg/tcg-cpus.c > @@ -35,6 +35,9 @@ > #include "hw/boards.h" > > #include "tcg-cpus.h" > +#include "tcg-cpus-mttcg.h" > +#include "tcg-cpus-rr.h" > +#include "tcg-cpus-icount.h" > > /* common functionality among all TCG variants */ > > @@ -80,3 +83,43 @@ void tcg_cpus_handle_interrupt(CPUState *cpu, int mask) > qatomic_set(&cpu_neg(cpu)->icount_decr.u16.high, -1); > } > } > + > +static void tcg_cpus_ops_init(AccelOpsClass *ops) > +{ > + if (qemu_tcg_mttcg_enabled()) { > + ops->create_vcpu_thread = mttcg_start_vcpu_thread; > + ops->kick_vcpu_thread = mttcg_kick_vcpu_thread; > + ops->handle_interrupt = tcg_cpus_handle_interrupt; > + > + } else if (icount_enabled()) { > + ops->create_vcpu_thread = rr_start_vcpu_thread; > + ops->kick_vcpu_thread = rr_kick_vcpu_thread; > + ops->handle_interrupt = icount_handle_interrupt; > + ops->get_virtual_clock = icount_get; > + ops->get_elapsed_ticks = icount_get; > + > + } else { > + ops->create_vcpu_thread = rr_start_vcpu_thread; > + ops->kick_vcpu_thread = rr_kick_vcpu_thread; > + ops->handle_interrupt = tcg_cpus_handle_interrupt; > + } > +} Aren't we going backwards here by having a global function aware of the different accelerator types rather than encapsulating this is the particular accelerator machinery? <snip> -- Alex Bennée