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