1 | #ifndef SYSEMU_NUMA_H |
2 | #define SYSEMU_NUMA_H |
3 | |
4 | #include "qemu/bitmap.h" |
5 | #include "qapi/qapi-types-machine.h" |
6 | #include "exec/cpu-common.h" |
7 | |
8 | struct CPUArchId; |
9 | |
10 | #define MAX_NODES 128 |
11 | #define NUMA_NODE_UNASSIGNED MAX_NODES |
12 | #define NUMA_DISTANCE_MIN 10 |
13 | #define NUMA_DISTANCE_DEFAULT 20 |
14 | #define NUMA_DISTANCE_MAX 254 |
15 | #define NUMA_DISTANCE_UNREACHABLE 255 |
16 | |
17 | struct NodeInfo { |
18 | uint64_t node_mem; |
19 | struct HostMemoryBackend *node_memdev; |
20 | bool present; |
21 | uint8_t distance[MAX_NODES]; |
22 | }; |
23 | |
24 | struct NumaNodeMem { |
25 | uint64_t node_mem; |
26 | uint64_t node_plugged_mem; |
27 | }; |
28 | |
29 | struct NumaState { |
30 | /* Number of NUMA nodes */ |
31 | int num_nodes; |
32 | |
33 | /* Allow setting NUMA distance for different NUMA nodes */ |
34 | bool have_numa_distance; |
35 | |
36 | /* NUMA nodes information */ |
37 | NodeInfo nodes[MAX_NODES]; |
38 | }; |
39 | typedef struct NumaState NumaState; |
40 | |
41 | void set_numa_options(MachineState *ms, NumaOptions *object, Error **errp); |
42 | void parse_numa_opts(MachineState *ms); |
43 | void numa_complete_configuration(MachineState *ms); |
44 | void query_numa_node_mem(NumaNodeMem node_mem[], MachineState *ms); |
45 | extern QemuOptsList qemu_numa_opts; |
46 | void numa_legacy_auto_assign_ram(MachineClass *mc, NodeInfo *nodes, |
47 | int nb_nodes, ram_addr_t size); |
48 | void numa_default_auto_assign_ram(MachineClass *mc, NodeInfo *nodes, |
49 | int nb_nodes, ram_addr_t size); |
50 | void numa_cpu_pre_plug(const struct CPUArchId *slot, DeviceState *dev, |
51 | Error **errp); |
52 | |
53 | #endif |
54 | |