mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
spapr_numa.c: parametrize FORM1 macros
The next preliminary step to introduce NUMA FORM2 affinity is to make the existing code independent of FORM1 macros and values, i.e. MAX_DISTANCE_REF_POINTS, NUMA_ASSOC_SIZE and VCPU_ASSOC_SIZE. This patch accomplishes that by doing the following: - move the NUMA related macros from spapr.h to spapr_numa.c where they are used. spapr.h gets instead a 'NUMA_NODES_MAX_NUM' macro that is used to refer to the maximum number of NUMA nodes, including GPU nodes, that the machine can support; - MAX_DISTANCE_REF_POINTS and NUMA_ASSOC_SIZE are renamed to FORM1_DIST_REF_POINTS and FORM1_NUMA_ASSOC_SIZE. These FORM1 specific macros are used in FORM1 init functions; - code that uses MAX_DISTANCE_REF_POINTS now retrieves the max_dist_ref_points value using get_max_dist_ref_points(). NUMA_ASSOC_SIZE is replaced by get_numa_assoc_size() and VCPU_ASSOC_SIZE is replaced by get_vcpu_assoc_size(). These functions are used by the generic device tree functions and h_home_node_associativity() and will allow them to switch between FORM1 and FORM2 without changing their core logic. Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Message-Id: <20210920174947.556324-4-danielhb413@gmail.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
afa3b3c9ee
commit
3a6e4ce684
2 changed files with 70 additions and 38 deletions
|
@ -100,23 +100,23 @@ typedef enum {
|
|||
|
||||
#define FDT_MAX_SIZE 0x200000
|
||||
|
||||
/*
|
||||
* NUMA related macros. MAX_DISTANCE_REF_POINTS was taken
|
||||
* from Linux kernel arch/powerpc/mm/numa.h. It represents the
|
||||
* amount of associativity domains for non-CPU resources.
|
||||
*
|
||||
* NUMA_ASSOC_SIZE is the base array size of an ibm,associativity
|
||||
* array for any non-CPU resource.
|
||||
*
|
||||
* VCPU_ASSOC_SIZE represents the size of ibm,associativity array
|
||||
* for CPUs, which has an extra element (vcpu_id) in the end.
|
||||
*/
|
||||
#define MAX_DISTANCE_REF_POINTS 4
|
||||
#define NUMA_ASSOC_SIZE (MAX_DISTANCE_REF_POINTS + 1)
|
||||
#define VCPU_ASSOC_SIZE (NUMA_ASSOC_SIZE + 1)
|
||||
/* Max number of GPUs per system */
|
||||
#define NVGPU_MAX_NUM 6
|
||||
|
||||
/* Max number of these GPUsper a physical box */
|
||||
#define NVGPU_MAX_NUM 6
|
||||
/* Max number of NUMA nodes */
|
||||
#define NUMA_NODES_MAX_NUM (MAX_NODES + NVGPU_MAX_NUM)
|
||||
|
||||
/*
|
||||
* NUMA FORM1 macros. FORM1_DIST_REF_POINTS was taken from
|
||||
* MAX_DISTANCE_REF_POINTS in arch/powerpc/mm/numa.h from Linux
|
||||
* kernel source. It represents the amount of associativity domains
|
||||
* for non-CPU resources.
|
||||
*
|
||||
* FORM1_NUMA_ASSOC_SIZE is the base array size of an ibm,associativity
|
||||
* array for any non-CPU resource.
|
||||
*/
|
||||
#define FORM1_DIST_REF_POINTS 4
|
||||
#define FORM1_NUMA_ASSOC_SIZE (FORM1_DIST_REF_POINTS + 1)
|
||||
|
||||
typedef struct SpaprCapabilities SpaprCapabilities;
|
||||
struct SpaprCapabilities {
|
||||
|
@ -249,7 +249,7 @@ struct SpaprMachineState {
|
|||
unsigned gpu_numa_id;
|
||||
SpaprTpmProxy *tpm_proxy;
|
||||
|
||||
uint32_t numa_assoc_array[MAX_NODES + NVGPU_MAX_NUM][NUMA_ASSOC_SIZE];
|
||||
uint32_t numa_assoc_array[NUMA_NODES_MAX_NUM][FORM1_NUMA_ASSOC_SIZE];
|
||||
|
||||
Error *fwnmi_migration_blocker;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue