[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 37/44] spapr_numa.c: fixes in spapr_numa_FORM2_write_rtas_tables()
From: |
David Gibson |
Subject: |
[PULL 37/44] spapr_numa.c: fixes in spapr_numa_FORM2_write_rtas_tables() |
Date: |
Thu, 30 Sep 2021 15:44:19 +1000 |
From: Daniel Henrique Barboza <danielhb413@gmail.com>
This patch has a handful of modifications for the recent added
FORM2 support:
- to not allocate more than the necessary size in 'distance_table'.
At this moment the array is oversized due to allocating uint32_t for
all elements, when most of them fits in an uint8_t. Fix it by
changing the array to uint8_t and allocating the exact size;
- use stl_be_p() to store the uint32_t at the start of 'distance_table';
- use sizeof(uint32_t) to skip the uint32_t length when populating the
distances;
- use the NUMA_DISTANCE_MIN macro from sysemu/numa.h to avoid hardcoding
the local distance value.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20210922122852.130054-2-danielhb413@gmail.com>
Reviewed-by: Greg Kurz <groug@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/spapr_numa.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/hw/ppc/spapr_numa.c b/hw/ppc/spapr_numa.c
index 58d5dc7084..5822938448 100644
--- a/hw/ppc/spapr_numa.c
+++ b/hw/ppc/spapr_numa.c
@@ -502,9 +502,8 @@ static void
spapr_numa_FORM2_write_rtas_tables(SpaprMachineState *spapr,
int nb_numa_nodes = ms->numa_state->num_nodes;
int distance_table_entries = nb_numa_nodes * nb_numa_nodes;
g_autofree uint32_t *lookup_index_table = NULL;
- g_autofree uint32_t *distance_table = NULL;
+ g_autofree uint8_t *distance_table = NULL;
int src, dst, i, distance_table_size;
- uint8_t *node_distances;
/*
* ibm,numa-lookup-index-table: array with length and a
@@ -531,11 +530,13 @@ static void
spapr_numa_FORM2_write_rtas_tables(SpaprMachineState *spapr,
* array because NUMA ids can be sparse (node 0 is the first,
* node 8 is the second ...).
*/
- distance_table = g_new0(uint32_t, distance_table_entries + 1);
- distance_table[0] = cpu_to_be32(distance_table_entries);
+ distance_table_size = distance_table_entries * sizeof(uint8_t) +
+ sizeof(uint32_t);
+ distance_table = g_new0(uint8_t, distance_table_size);
+ stl_be_p(distance_table, distance_table_entries);
- node_distances = (uint8_t *)&distance_table[1];
- i = 0;
+ /* Skip the uint32_t array length at the start */
+ i = sizeof(uint32_t);
for (src = 0; src < nb_numa_nodes; src++) {
for (dst = 0; dst < nb_numa_nodes; dst++) {
@@ -546,16 +547,14 @@ static void
spapr_numa_FORM2_write_rtas_tables(SpaprMachineState *spapr,
* adding the numa_info to retrieve distance info from.
*/
if (src == dst) {
- node_distances[i++] = 10;
+ distance_table[i++] = NUMA_DISTANCE_MIN;
continue;
}
- node_distances[i++] = numa_info[src].distance[dst];
+ distance_table[i++] = numa_info[src].distance[dst];
}
}
- distance_table_size = distance_table_entries * sizeof(uint8_t) +
- sizeof(uint32_t);
_FDT(fdt_setprop(fdt, rtas, "ibm,numa-distance-table",
distance_table, distance_table_size));
}
--
2.31.1
- [PULL 27/44] spapr_numa.c: parametrize FORM1 macros, (continued)
- [PULL 27/44] spapr_numa.c: parametrize FORM1 macros, David Gibson, 2021/09/30
- [PULL 29/44] spapr: move FORM1 verifications to post CAS, David Gibson, 2021/09/30
- [PULL 32/44] target/ppc: Convert debug to trace events (decrementer and IRQ), David Gibson, 2021/09/30
- [PULL 36/44] hw/intc: openpic: Clean up the styles, David Gibson, 2021/09/30
- [PULL 28/44] spapr_numa.c: rename numa_assoc_array to FORM1_assoc_array, David Gibson, 2021/09/30
- [PULL 30/44] spapr_numa.c: FORM2 NUMA affinity support, David Gibson, 2021/09/30
- [PULL 33/44] target/ppc: Fix 64-bit decrementer, David Gibson, 2021/09/30
- [PULL 34/44] hw/intc: openpic: Correct the reset value of IPIDR for FSL chipset, David Gibson, 2021/09/30
- [PULL 31/44] spapr_numa.c: handle auto NUMA node with no distance info, David Gibson, 2021/09/30
- [PULL 35/44] hw/intc: openpic: Drop Raven related codes, David Gibson, 2021/09/30
- [PULL 37/44] spapr_numa.c: fixes in spapr_numa_FORM2_write_rtas_tables(),
David Gibson <=
- [PULL 38/44] spapr/xive: Fix kvm_xive_source_reset trace event, David Gibson, 2021/09/30
- [PULL 39/44] MAINTAINERS: Remove machine specific files from ppc TCG CPUs entry, David Gibson, 2021/09/30
- [PULL 40/44] MAINTAINERS: Remove David & Greg as reviewers for a number of boards, David Gibson, 2021/09/30
- [PULL 43/44] MAINTAINERS: Add information for OpenPIC, David Gibson, 2021/09/30
- [PULL 41/44] MAINTAINERS: Orphan obscure ppc platforms, David Gibson, 2021/09/30
- [PULL 42/44] MAINTAINERS: Remove David & Greg as reviewers/co-maintainers of powernv, David Gibson, 2021/09/30
- [PULL 44/44] MAINTAINERS: Demote sPAPR from "Supported" to "Maintained", David Gibson, 2021/09/30
- Re: [PULL 00/44] ppc-for-6.2 queue 20210930, Peter Maydell, 2021/09/30