On 7/11/24 16:18, Nicholas Piggin wrote:
This will allow different settings and checks for different
machine types with later changes.

Reviewed-by: Harsh Prateek Bora <hars...@linux.ibm.com>
Signed-off-by: Nicholas Piggin <npig...@gmail.com>


Reviewed-by: Cédric Le Goater <c...@redhat.com>

Thanks,

C.


---
  include/hw/ppc/pnv.h |  1 +
  hw/ppc/pnv.c         | 12 +++++++++---
  2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index 476b136146..1993dededf 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -76,6 +76,7 @@ struct PnvMachineClass {
      /*< public >*/
      const char *compat;
      int compat_size;
+    int max_smt_threads;
void (*dt_power_mgt)(PnvMachineState *pnv, void *fdt);
      void (*i2c_init)(PnvMachineState *pnv);
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 3bcf11984c..4252bcd28d 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -899,6 +899,7 @@ static void pnv_init(MachineState *machine)
      PnvMachineState *pnv = PNV_MACHINE(machine);
      MachineClass *mc = MACHINE_GET_CLASS(machine);
      PnvMachineClass *pmc = PNV_MACHINE_GET_CLASS(machine);
+    int max_smt_threads = pmc->max_smt_threads;
      char *fw_filename;
      long fw_size;
      uint64_t chip_ram_start = 0;
@@ -997,17 +998,19 @@ static void pnv_init(MachineState *machine)
      pnv->num_chips =
          machine->smp.max_cpus / (machine->smp.cores * machine->smp.threads);
- if (machine->smp.threads > 8) {
-        error_report("Cannot support more than 8 threads/core "
-                     "on a powernv machine");
+    if (machine->smp.threads > max_smt_threads) {
+        error_report("Cannot support more than %d threads/core "
+                     "on %s machine", max_smt_threads, mc->desc);
          exit(1);
      }
+
      if (!is_power_of_2(machine->smp.threads)) {
          error_report("Cannot support %d threads/core on a powernv"
                       "machine because it must be a power of 2",
                       machine->smp.threads);
          exit(1);
      }
+
      /*
       * TODO: should we decide on how many chips we can create based
       * on #cores and Venice vs. Murano vs. Naples chip type etc...,
@@ -2491,6 +2494,7 @@ static void pnv_machine_power8_class_init(ObjectClass 
*oc, void *data)
pmc->compat = compat;
      pmc->compat_size = sizeof(compat);
+    pmc->max_smt_threads = 8;
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_PNV_PHB);
  }
@@ -2515,6 +2519,7 @@ static void pnv_machine_power9_class_init(ObjectClass 
*oc, void *data)
pmc->compat = compat;
      pmc->compat_size = sizeof(compat);
+    pmc->max_smt_threads = 4;
      pmc->dt_power_mgt = pnv_dt_power_mgt;
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_PNV_PHB);
@@ -2539,6 +2544,7 @@ static void pnv_machine_p10_common_class_init(ObjectClass 
*oc, void *data)
pmc->compat = compat;
      pmc->compat_size = sizeof(compat);
+    pmc->max_smt_threads = 4;
      pmc->dt_power_mgt = pnv_dt_power_mgt;
xfc->match_nvt = pnv10_xive_match_nvt;


Reply via email to