[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 34/46] spapr.c: do not use MachineClass::max_cpus to limit CPUs
From: |
David Gibson |
Subject: |
[PULL 34/46] spapr.c: do not use MachineClass::max_cpus to limit CPUs |
Date: |
Tue, 4 May 2021 15:53:00 +1000 |
From: Daniel Henrique Barboza <danielhb413@gmail.com>
Up to this patch, 'max_cpus' value is hardcoded to 1024 (commit
6244bb7e5811). In theory this patch would simply bump it to 2048, since
it's the default NR_CPUS kernel setting for ppc64 servers nowadays, but
the whole mechanic of MachineClass:max_cpus is flawed for the pSeries
machine. The two supported accelerators, KVM and TCG, can live without
it.
TCG guests don't have a theoretical limit. The user must be free to
emulate as many CPUs as the hardware is capable of. And even if there
were a limit, max_cpus is not the proper way to report it since it's a
common value checked by SMP code in machine_smp_parse() for KVM as well.
For KVM guests, the proper way to limit KVM CPUs is by host
configuration via NR_CPUS, not a QEMU hardcoded value. There is no
technical reason for a pSeries QEMU guest to forcefully stay below
NR_CPUS.
This hardcoded value also disregard hosts that might have a lower
NR_CPUS limit, say 512. In this case, machine.c:machine_smp_parse() will
allow a 1024 value to pass, but then kvm_init() will complain about it
because it will exceed NR_CPUS:
Number of SMP cpus requested (1024) exceeds the maximum cpus supported
by KVM (512)
A better 'max_cpus' value would consider host settings, but
MachineClass::max_cpus is defined well before machine_init() and
kvm_init(). We can't check for KVM limits because it's too soon, so we
end up making a guess.
This patch makes MachineClass:max_cpus settings innocuous by setting it
to INT32_MAX. machine.c:machine_smp_parse() will not fail the
verification based on max_cpus, letting kvm_init() do the checking with
actual host settings. And TCG guests get to do whatever the hardware is
capable of emulating.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20210408204049.221802-2-danielhb413@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index fd53615df0..b37ceb8ee8 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4487,7 +4487,16 @@ static void spapr_machine_class_init(ObjectClass *oc,
void *data)
mc->init = spapr_machine_init;
mc->reset = spapr_machine_reset;
mc->block_default_type = IF_SCSI;
- mc->max_cpus = 1024;
+
+ /*
+ * Setting max_cpus to INT32_MAX. Both KVM and TCG max_cpus values
+ * should be limited by the host capability instead of hardcoded.
+ * max_cpus for KVM guests will be checked in kvm_init(), and TCG
+ * guests are welcome to have as many CPUs as the host are capable
+ * of emulate.
+ */
+ mc->max_cpus = INT32_MAX;
+
mc->no_parallel = 1;
mc->default_boot_order = "";
mc->default_ram_size = 512 * MiB;
--
2.31.1
- [PULL 25/46] hw/ppc: Add emulation of Genesi/bPlan Pegasos II, (continued)
- [PULL 25/46] hw/ppc: Add emulation of Genesi/bPlan Pegasos II, David Gibson, 2021/05/04
- [PULL 24/46] hw/pci-host: Add emulation of Marvell MV64361 PPC system controller, David Gibson, 2021/05/04
- [PULL 21/46] vt82c686: Add VT8231_SUPERIO based on VIA_SUPERIO, David Gibson, 2021/05/04
- [PULL 22/46] vt82c686: Introduce abstract TYPE_VIA_ISA and base vt82c686b_isa on it, David Gibson, 2021/05/04
- [PULL 26/46] spapr: Rename RTAS_MAX_ADDR to FDT_MAX_ADDR, David Gibson, 2021/05/04
- [PULL 23/46] vt82c686: Add emulation of VT8231 south bridge, David Gibson, 2021/05/04
- [PULL 27/46] ppc/spapr: Add support for implement support for H_SCM_HEALTH, David Gibson, 2021/05/04
- [PULL 31/46] target/ppc: Fix POWER9 radix guest HV interrupt AIL behaviour, David Gibson, 2021/05/04
- [PULL 33/46] ppc: Rename current DAWR macros and variables, David Gibson, 2021/05/04
- [PULL 28/46] roms/Makefile: Update ppce500 u-boot build directory name, David Gibson, 2021/05/04
- [PULL 34/46] spapr.c: do not use MachineClass::max_cpus to limit CPUs,
David Gibson <=
- [PULL 30/46] docs/system: ppc: Add documentation for ppce500 machine, David Gibson, 2021/05/04
- [PULL 29/46] roms/u-boot: Bump ppce500 u-boot to v2021.04 to fix broken pci support, David Gibson, 2021/05/04
- [PULL 32/46] target/ppc: POWER10 supports scv, David Gibson, 2021/05/04
- [PULL 35/46] spapr.h: increase FDT_MAX_SIZE, David Gibson, 2021/05/04
- [PULL 36/46] spapr_drc.c: handle hotunplug errors in drc_unisolate_logical(), David Gibson, 2021/05/04
- [PULL 39/46] target/ppc: rework AIL logic in interrupt delivery, David Gibson, 2021/05/04
- [PULL 38/46] target/ppc: move opcode table logic to translate.c, David Gibson, 2021/05/04
- [PULL 37/46] target/ppc: code motion from translate_init.c.inc to gdbstub.c, David Gibson, 2021/05/04
- [PULL 40/46] target/ppc: Add POWER10 exception model, David Gibson, 2021/05/04
- [PULL 44/46] hw/intc/spapr_xive: Use device_cold_reset() instead of device_legacy_reset(), David Gibson, 2021/05/04