[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
pgpBdYzoiBW8C.pgp
Description: PGP signature
- Re: [Qemu-ppc] [RFC PATCH v4 09/11] spapr: Support topologies with unfilled cores,
David Gibson <=