xref: /openbmc/qemu/include/sysemu/numa.h (revision ea089eebbd80e61d3c3cd03741dd5d9535c551fc)
1e35704baSEduardo Habkost #ifndef SYSEMU_NUMA_H
2e35704baSEduardo Habkost #define SYSEMU_NUMA_H
3e35704baSEduardo Habkost 
4e35704baSEduardo Habkost #include "qemu/bitmap.h"
5e35704baSEduardo Habkost #include "qemu/option.h"
6e35704baSEduardo Habkost #include "sysemu/sysemu.h"
7e35704baSEduardo Habkost #include "sysemu/hostmem.h"
857924bcdSIgor Mammedov #include "hw/boards.h"
9e35704baSEduardo Habkost 
10e35704baSEduardo Habkost extern int nb_numa_nodes;   /* Number of NUMA nodes */
110f203430SHe Chen extern bool have_numa_distance;
12e35704baSEduardo Habkost 
13fa9ea81dSBharata B Rao struct numa_addr_range {
14fa9ea81dSBharata B Rao     ram_addr_t mem_start;
15fa9ea81dSBharata B Rao     ram_addr_t mem_end;
16fa9ea81dSBharata B Rao     QLIST_ENTRY(numa_addr_range) entry;
17fa9ea81dSBharata B Rao };
18fa9ea81dSBharata B Rao 
193bfe5716SLaurent Vivier struct node_info {
20e35704baSEduardo Habkost     uint64_t node_mem;
21cdda2018SIgor Mammedov     unsigned long *node_cpu;
22e35704baSEduardo Habkost     struct HostMemoryBackend *node_memdev;
23e35704baSEduardo Habkost     bool present;
24fa9ea81dSBharata B Rao     QLIST_HEAD(, numa_addr_range) addr; /* List to store address ranges */
250f203430SHe Chen     uint8_t distance[MAX_NODES];
263bfe5716SLaurent Vivier };
27fa9ea81dSBharata B Rao 
28e35704baSEduardo Habkost extern NodeInfo numa_info[MAX_NODES];
29*ea089eebSIgor Mammedov void parse_numa_opts(MachineState *ms);
30dde11116SEduardo Habkost void numa_post_machine_init(void);
31e35704baSEduardo Habkost void query_numa_node_mem(uint64_t node_mem[]);
32e35704baSEduardo Habkost extern QemuOptsList qemu_numa_opts;
33fa9ea81dSBharata B Rao void numa_set_mem_node_id(ram_addr_t addr, uint64_t size, uint32_t node);
34fa9ea81dSBharata B Rao void numa_unset_mem_node_id(ram_addr_t addr, uint64_t size, uint32_t node);
35e75e2a14SBharata B Rao uint32_t numa_get_node(ram_addr_t addr, Error **errp);
363bfe5716SLaurent Vivier void numa_legacy_auto_assign_ram(MachineClass *mc, NodeInfo *nodes,
373bfe5716SLaurent Vivier                                  int nb_nodes, ram_addr_t size);
383bfe5716SLaurent Vivier void numa_default_auto_assign_ram(MachineClass *mc, NodeInfo *nodes,
393bfe5716SLaurent Vivier                                   int nb_nodes, ram_addr_t size);
403bfe5716SLaurent Vivier 
41e35704baSEduardo Habkost 
426bea1ddfSIgor Mammedov /* on success returns node index in numa_info,
436bea1ddfSIgor Mammedov  * on failure returns nb_numa_nodes */
446bea1ddfSIgor Mammedov int numa_get_node_for_cpu(int idx);
45e35704baSEduardo Habkost #endif
46