1e35704baSEduardo Habkost #ifndef SYSEMU_NUMA_H 2e35704baSEduardo Habkost #define SYSEMU_NUMA_H 3e35704baSEduardo Habkost 4e35704baSEduardo Habkost #include "qemu/bitmap.h" 5a44432b4SMarkus Armbruster #include "qapi/qapi-types-machine.h" 6a44432b4SMarkus Armbruster #include "exec/cpu-common.h" 7a44432b4SMarkus Armbruster 8a44432b4SMarkus Armbruster struct CPUArchId; 9e35704baSEduardo Habkost 10*b58c5c2dSMarkus Armbruster #define MAX_NODES 128 11*b58c5c2dSMarkus Armbruster #define NUMA_NODE_UNASSIGNED MAX_NODES 12*b58c5c2dSMarkus Armbruster #define NUMA_DISTANCE_MIN 10 13*b58c5c2dSMarkus Armbruster #define NUMA_DISTANCE_DEFAULT 20 14*b58c5c2dSMarkus Armbruster #define NUMA_DISTANCE_MAX 254 15*b58c5c2dSMarkus Armbruster #define NUMA_DISTANCE_UNREACHABLE 255 16*b58c5c2dSMarkus Armbruster 17e35704baSEduardo Habkost extern int nb_numa_nodes; /* Number of NUMA nodes */ 180f203430SHe Chen extern bool have_numa_distance; 19e35704baSEduardo Habkost 20aec90730SEric Blake struct NodeInfo { 21e35704baSEduardo Habkost uint64_t node_mem; 22e35704baSEduardo Habkost struct HostMemoryBackend *node_memdev; 23e35704baSEduardo Habkost bool present; 240f203430SHe Chen uint8_t distance[MAX_NODES]; 253bfe5716SLaurent Vivier }; 26fa9ea81dSBharata B Rao 2731959e82SVadim Galitsyn struct NumaNodeMem { 2831959e82SVadim Galitsyn uint64_t node_mem; 2931959e82SVadim Galitsyn uint64_t node_plugged_mem; 3031959e82SVadim Galitsyn }; 3131959e82SVadim Galitsyn 32e35704baSEduardo Habkost extern NodeInfo numa_info[MAX_NODES]; 3352924deaSMarkus Armbruster 3452924deaSMarkus Armbruster void set_numa_options(MachineState *ms, NumaOptions *object, Error **errp); 35ea089eebSIgor Mammedov void parse_numa_opts(MachineState *ms); 367a3099fcSIgor Mammedov void numa_complete_configuration(MachineState *ms); 3731959e82SVadim Galitsyn void query_numa_node_mem(NumaNodeMem node_mem[]); 38e35704baSEduardo Habkost extern QemuOptsList qemu_numa_opts; 393bfe5716SLaurent Vivier void numa_legacy_auto_assign_ram(MachineClass *mc, NodeInfo *nodes, 403bfe5716SLaurent Vivier int nb_nodes, ram_addr_t size); 413bfe5716SLaurent Vivier void numa_default_auto_assign_ram(MachineClass *mc, NodeInfo *nodes, 423bfe5716SLaurent Vivier int nb_nodes, ram_addr_t size); 43a44432b4SMarkus Armbruster void numa_cpu_pre_plug(const struct CPUArchId *slot, DeviceState *dev, 44a44432b4SMarkus Armbruster Error **errp); 45a44432b4SMarkus Armbruster 46e35704baSEduardo Habkost #endif 47