[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 18/20] spapr_numa: change reference-points and maxdomain settings
From: |
David Gibson |
Subject: |
[PULL 18/20] spapr_numa: change reference-points and maxdomain settings |
Date: |
Fri, 9 Oct 2020 21:19:49 +1100 |
From: Daniel Henrique Barboza <danielhb413@gmail.com>
This is the first guest visible change introduced in
spapr_numa.c. The previous settings of both reference-points
and maxdomains were too restrictive, but enough for the
existing associativity we're setting in the resources.
We'll change that in the following patches, populating the
associativity arrays based on user input. For those changes
to be effective, reference-points and maxdomains must be
more flexible. After this patch, we'll have 4 distinct
levels of NUMA (0x4, 0x3, 0x2, 0x1) and maxdomains will
allow for any type of configuration the user intends to
do - under the scope and limitations of PAPR itself, of
course.
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20201007172849.302240-4-danielhb413@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/spapr_numa.c | 43 +++++++++++++++++++++++++++++++++++--------
1 file changed, 35 insertions(+), 8 deletions(-)
diff --git a/hw/ppc/spapr_numa.c b/hw/ppc/spapr_numa.c
index fe395e80a3..16badb1f4b 100644
--- a/hw/ppc/spapr_numa.c
+++ b/hw/ppc/spapr_numa.c
@@ -178,24 +178,51 @@ int
spapr_numa_write_assoc_lookup_arrays(SpaprMachineState *spapr, void *fdt,
*/
void spapr_numa_write_rtas_dt(SpaprMachineState *spapr, void *fdt, int rtas)
{
+ MachineState *ms = MACHINE(spapr);
SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr);
uint32_t refpoints[] = {
cpu_to_be32(0x4),
- cpu_to_be32(0x4),
+ cpu_to_be32(0x3),
cpu_to_be32(0x2),
+ cpu_to_be32(0x1),
};
uint32_t nr_refpoints = ARRAY_SIZE(refpoints);
- uint32_t maxdomain = cpu_to_be32(spapr->gpu_numa_id > 1 ? 1 : 0);
+ uint32_t maxdomain = ms->numa_state->num_nodes + spapr->gpu_numa_id;
uint32_t maxdomains[] = {
cpu_to_be32(4),
- maxdomain,
- maxdomain,
- maxdomain,
- cpu_to_be32(spapr->gpu_numa_id),
+ cpu_to_be32(maxdomain),
+ cpu_to_be32(maxdomain),
+ cpu_to_be32(maxdomain),
+ cpu_to_be32(maxdomain)
};
- if (smc->pre_5_1_assoc_refpoints) {
- nr_refpoints = 2;
+ if (spapr_machine_using_legacy_numa(spapr)) {
+ uint32_t legacy_refpoints[] = {
+ cpu_to_be32(0x4),
+ cpu_to_be32(0x4),
+ cpu_to_be32(0x2),
+ };
+ uint32_t legacy_maxdomain = spapr->gpu_numa_id > 1 ? 1 : 0;
+ uint32_t legacy_maxdomains[] = {
+ cpu_to_be32(4),
+ cpu_to_be32(legacy_maxdomain),
+ cpu_to_be32(legacy_maxdomain),
+ cpu_to_be32(legacy_maxdomain),
+ cpu_to_be32(spapr->gpu_numa_id),
+ };
+
+ G_STATIC_ASSERT(sizeof(legacy_refpoints) <= sizeof(refpoints));
+ G_STATIC_ASSERT(sizeof(legacy_maxdomains) <= sizeof(maxdomains));
+
+ nr_refpoints = 3;
+
+ memcpy(refpoints, legacy_refpoints, sizeof(legacy_refpoints));
+ memcpy(maxdomains, legacy_maxdomains, sizeof(legacy_maxdomains));
+
+ /* pseries-5.0 and older reference-points array is {0x4, 0x4} */
+ if (smc->pre_5_1_assoc_refpoints) {
+ nr_refpoints = 2;
+ }
}
_FDT(fdt_setprop(fdt, rtas, "ibm,associativity-reference-points",
--
2.26.2
- [PULL 00/20] ppc-for-5.2 queue 20201009, David Gibson, 2020/10/09
- [PULL 01/20] spapr: Handle HPT allocation failure in nested guest, David Gibson, 2020/10/09
- [PULL 04/20] ppc: Fix return value in cpu_post_load() error path, David Gibson, 2020/10/09
- [PULL 03/20] ppc: Add a return value to ppc_set_compat() and ppc_set_compat_all(), David Gibson, 2020/10/09
- [PULL 02/20] spapr: Fix error leak in spapr_realize_vcpu(), David Gibson, 2020/10/09
- [PULL 05/20] spapr: Simplify error handling in callers of ppc_set_compat(), David Gibson, 2020/10/09
- [PULL 06/20] spapr: Get rid of cas_check_pvr() error reporting, David Gibson, 2020/10/09
- [PULL 08/20] spapr: Simplify error handling in spapr_vio_busdev_realize(), David Gibson, 2020/10/09
- [PULL 10/20] spapr: Simplify error handling in prop_get_fdt(), David Gibson, 2020/10/09
- [PULL 20/20] specs/ppc-spapr-numa: update with new NUMA support, David Gibson, 2020/10/09
- [PULL 18/20] spapr_numa: change reference-points and maxdomain settings,
David Gibson <=
- [PULL 07/20] spapr: Simplify error handling in do_client_architecture_support(), David Gibson, 2020/10/09
- [PULL 09/20] spapr: Add a return value to spapr_drc_attach(), David Gibson, 2020/10/09
- [PULL 13/20] spapr: Add a return value to spapr_nvdimm_validate(), David Gibson, 2020/10/09
- [PULL 11/20] spapr: Add a return value to spapr_set_vcpu_id(), David Gibson, 2020/10/09
- [PULL 16/20] spapr: add spapr_machine_using_legacy_numa() helper, David Gibson, 2020/10/09
- [PULL 17/20] spapr_numa: forbid asymmetrical NUMA setups, David Gibson, 2020/10/09
- [PULL 12/20] spapr: Simplify error handling in spapr_cpu_core_realize(), David Gibson, 2020/10/09
- [PULL 14/20] spapr: Add a return value to spapr_check_pagesize(), David Gibson, 2020/10/09
- [PULL 15/20] ppc/pnv: Increase max firmware size, David Gibson, 2020/10/09
- [PULL 19/20] spapr_numa: consider user input when defining associativity, David Gibson, 2020/10/09