qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [RFC PATCH v4 09/11] spapr: Support topologies with unfil


From: David Gibson
Subject: Re: [Qemu-ppc] [RFC PATCH v4 09/11] spapr: Support topologies with unfilled cores
Date: Fri, 4 Sep 2015 17:01:05 +1000
User-agent: Mutt/1.5.23 (2014-03-12)

On Thu, Aug 06, 2015 at 10:57:15AM +0530, Bharata B Rao wrote:
> QEMU currently supports CPU topologies where there can be cores
> which are not completely filled with all the threads as per the
> specifed SMT mode.
> 
> Restore support for such topologies (Eg -smp 15,cores=4,threads=4)
> The last core will always have the deficit even when -device options are
> used to cold-plug the cores.
> 
> Signed-off-by: Bharata B Rao <address@hidden>

Is there a reason to support these silly toplogies, or should we just
error out if this is specified?


> ---
>  hw/ppc/spapr.c | 20 +++++++++++++++++++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 74637b3..004a8e1 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -94,6 +94,8 @@
>  
>  #define HTAB_SIZE(spapr)        (1ULL << ((spapr)->htab_shift))
>  
> +static int smp_remaining_cpus;
> +
>  static XICSState *try_create_xics(const char *type, int nr_servers,
>                                    int nr_irqs, Error **errp)
>  {
> @@ -1700,6 +1702,7 @@ static void ppc_spapr_init(MachineState *machine)
>      int smp_max_cores = DIV_ROUND_UP(max_cpus, smp_threads);
>      int smp_cores = DIV_ROUND_UP(smp_cpus, smp_threads);
>  
> +    smp_remaining_cpus = smp_cpus;
>      msi_supported = true;
>  
>      QLIST_INIT(&spapr->phbs);
> @@ -2202,6 +2205,7 @@ static void spapr_cpu_plug(HotplugHandler *hotplug_dev, 
> DeviceState *dev,
>      Error *local_err = NULL;
>      void *fdt = NULL;
>      int i, fdt_offset = 0;
> +    int threads_per_core;
>  
>      /* Set NUMA node for the added CPUs  */
>      for (i = 0; i < nb_numa_nodes; i++) {
> @@ -2224,8 +2228,22 @@ static void spapr_cpu_plug(HotplugHandler 
> *hotplug_dev, DeviceState *dev,
>          return;
>      }
>  
> +    /* Create SMT threads of the core.
> +     *
> +     * Support topologies like -smp 15,cores=4,threads=4 where one core
> +     * will have less than the specified SMT threads. The last core will
> +     * always have the deficit even when -device options are used to
> +     * cold-plug the cores.
> +     */
> +    if ((smp_remaining_cpus > 0) && (smp_remaining_cpus < smp_threads)) {
> +        threads_per_core = smp_remaining_cpus;
> +    } else {
> +        threads_per_core = smp_threads;
> +    }
> +    smp_remaining_cpus -= threads_per_core;
> +
>      /* Create SMT threads of the core. */
> -    for (i = 1; i < smp_threads; i++) {
> +    for (i = 1; i < threads_per_core; i++) {
>          cpu = cpu_ppc_init(current_machine->cpu_model);
>          if (!cpu) {
>              error_report("Unable to find PowerPC CPU definition: %s",

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: pgpBdYzoiBW8C.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]