Richard Henderson <richard.hender...@linaro.org> writes:
> Compute the value using straight division and bounds, > rather than a loop. Pass in tb_size rather than reading > from tcg_init_ctx.code_gen_buffer_size, > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > tcg/region.c | 29 ++++++++++++----------------- > 1 file changed, 12 insertions(+), 17 deletions(-) > > diff --git a/tcg/region.c b/tcg/region.c > index bd81b35359..b44246e1aa 100644 > --- a/tcg/region.c > +++ b/tcg/region.c > @@ -363,38 +363,33 @@ void tcg_region_reset_all(void) > tcg_region_tree_reset_all(); > } > > -static size_t tcg_n_regions(unsigned max_cpus) > +static size_t tcg_n_regions(size_t tb_size, unsigned max_cpus) > { > #ifdef CONFIG_USER_ONLY > return 1; > #else > + size_t n_regions; > + > /* > * It is likely that some vCPUs will translate more code than others, > * so we first try to set more regions than max_cpus, with those regions > * being of reasonable size. If that's not possible we make do by evenly > * dividing the code_gen_buffer among the vCPUs. > */ > - size_t i; > - > /* Use a single region if all we have is one vCPU thread */ > if (max_cpus == 1 || !qemu_tcg_mttcg_enabled()) { > return 1; > } > > - /* Try to have more regions than max_cpus, with each region being >= 2 > MB */ > - for (i = 8; i > 0; i--) { > - size_t regions_per_thread = i; > - size_t region_size; > - > - region_size = tcg_init_ctx.code_gen_buffer_size; > - region_size /= max_cpus * regions_per_thread; > - > - if (region_size >= 2 * 1024u * 1024) { > - return max_cpus * regions_per_thread; > - } > + /* > + * Try to have more regions than max_cpus, with each region being >= 2 > MB. > + * If we can't, then just allocate one region per vCPU thread. > + */ > + n_regions = tb_size / (2 * MiB); > + if (n_regions <= max_cpus) { > + return max_cpus; > } > - /* If we can't, then just allocate one region per vCPU thread */ > - return max_cpus; > + return MIN(n_regions, max_cpus * 8); > #endif > } This is so much easier to follow now ;-) Reviewed-by: Alex Bennée <alex.ben...@linaro.org> -- Alex Bennée