Lines Matching +full:0 +full:ms
48 .desc = { { 0 } } /* validated with OptsVisitor */
62 static void parse_numa_node(MachineState *ms, NumaNodeOptions *node, in parse_numa_node() argument
68 MachineClass *mc = MACHINE_GET_CLASS(ms); in parse_numa_node()
69 unsigned int max_cpus = ms->smp.max_cpus; in parse_numa_node()
70 NodeInfo *numa_info = ms->numa_state->nodes; in parse_numa_node()
75 nodenr = ms->numa_state->num_nodes; in parse_numa_node()
95 if (!ms->numa_state->hmat_enabled) { in parse_numa_node()
104 "between 0 and %d", node->initiator, in parse_numa_node()
121 props = mc->cpu_index_to_instance_props(ms, cpus->value); in parse_numa_node()
124 machine_set_cpu_numa_node(ms, &props, &err); in parse_numa_node()
168 ms->numa_state->num_nodes++; in parse_numa_node()
172 void parse_numa_distance(MachineState *ms, NumaDistOptions *dist, Error **errp) in parse_numa_distance() argument
177 NodeInfo *numa_info = ms->numa_state->nodes; in parse_numa_distance()
180 error_setg(errp, "Parameter '%s' expects an integer between 0 and %d", in parse_numa_distance()
205 ms->numa_state->have_numa_distance = true; in parse_numa_distance()
266 for (i = 0; i < hmat_lb->list->len; i++) { in parse_numa_hmat_lb()
296 * latency which should be less than 0xFFFF (UINT16_MAX) in parse_numa_hmat_lb()
310 * Set lb_info_provided bit 0 as 1, in parse_numa_hmat_lb()
313 numa_info[node->target].lb_info_provided |= BIT(0); in parse_numa_hmat_lb()
335 for (i = 0; i < hmat_lb->list->len; i++) { in parse_numa_hmat_lb()
361 * compressed bandwidth should be less than 0xFFFF (UINT16_MAX) in parse_numa_hmat_lb()
389 void parse_numa_hmat_cache(MachineState *ms, NumaHmatCacheOptions *node, in parse_numa_hmat_cache() argument
392 int nb_numa_nodes = ms->numa_state->num_nodes; in parse_numa_hmat_cache()
393 NodeInfo *numa_info = ms->numa_state->nodes; in parse_numa_hmat_cache()
402 if (numa_info[node->node_id].lb_info_provided != (BIT(0) | BIT(1))) { in parse_numa_hmat_cache()
410 error_setg(errp, "Invalid level=%" PRIu8 ", it should be larger than 0 " in parse_numa_hmat_cache()
418 if (ms->numa_state->hmat_cache[node->node_id][node->level]) { in parse_numa_hmat_cache()
426 ms->numa_state->hmat_cache[node->node_id][node->level - 1] == NULL) { in parse_numa_hmat_cache()
434 ms->numa_state->hmat_cache[node->node_id][node->level - 1]->size)) { in parse_numa_hmat_cache()
438 ms->numa_state->hmat_cache[node->node_id] in parse_numa_hmat_cache()
445 ms->numa_state->hmat_cache[node->node_id][node->level + 1] && in parse_numa_hmat_cache()
447 ms->numa_state->hmat_cache[node->node_id][node->level + 1]->size)) { in parse_numa_hmat_cache()
451 ms->numa_state->hmat_cache[node->node_id] in parse_numa_hmat_cache()
459 ms->numa_state->hmat_cache[node->node_id][node->level] = hmat_cache; in parse_numa_hmat_cache()
462 void set_numa_options(MachineState *ms, NumaOptions *object, Error **errp) in set_numa_options() argument
464 if (!ms->numa_state) { in set_numa_options()
471 parse_numa_node(ms, &object->u.node, errp); in set_numa_options()
474 parse_numa_distance(ms, &object->u.dist, errp); in set_numa_options()
481 if (!ms->numa_state->nodes[object->u.cpu.node_id].present) { in set_numa_options()
488 machine_set_cpu_numa_node(ms, in set_numa_options()
493 if (!ms->numa_state->hmat_enabled) { in set_numa_options()
500 parse_numa_hmat_lb(ms->numa_state, &object->u.hmat_lb, errp); in set_numa_options()
503 if (!ms->numa_state->hmat_enabled) { in set_numa_options()
510 parse_numa_hmat_cache(ms, &object->u.hmat_cache, errp); in set_numa_options()
520 MachineState *ms = MACHINE(opaque); in parse_numa() local
535 if (ret < 0) { in parse_numa()
542 set_numa_options(ms, object, &err); in parse_numa()
551 return 0; in parse_numa()
560 static void validate_numa_distance(MachineState *ms) in validate_numa_distance() argument
564 int nb_numa_nodes = ms->numa_state->num_nodes; in validate_numa_distance()
565 NodeInfo *numa_info = ms->numa_state->nodes; in validate_numa_distance()
567 for (src = 0; src < nb_numa_nodes; src++) { in validate_numa_distance()
569 if (numa_info[src].distance[dst] == 0 && in validate_numa_distance()
570 numa_info[dst].distance[src] == 0) { in validate_numa_distance()
580 if (numa_info[src].distance[dst] != 0 && in validate_numa_distance()
581 numa_info[dst].distance[src] != 0 && in validate_numa_distance()
590 for (src = 0; src < nb_numa_nodes; src++) { in validate_numa_distance()
591 for (dst = 0; dst < nb_numa_nodes; dst++) { in validate_numa_distance()
592 if (src != dst && numa_info[src].distance[dst] == 0) { in validate_numa_distance()
603 static void complete_init_numa_distance(MachineState *ms) in complete_init_numa_distance() argument
606 NodeInfo *numa_info = ms->numa_state->nodes; in complete_init_numa_distance()
613 for (src = 0; src < ms->numa_state->num_nodes; src++) { in complete_init_numa_distance()
614 for (dst = 0; dst < ms->numa_state->num_nodes; dst++) { in complete_init_numa_distance()
615 if (numa_info[src].distance[dst] == 0) { in complete_init_numa_distance()
626 static void numa_init_memdev_container(MachineState *ms, MemoryRegion *ram) in numa_init_memdev_container() argument
629 uint64_t addr = 0; in numa_init_memdev_container()
631 for (i = 0; i < ms->numa_state->num_nodes; i++) { in numa_init_memdev_container()
632 uint64_t size = ms->numa_state->nodes[i].node_mem; in numa_init_memdev_container()
633 HostMemoryBackend *backend = ms->numa_state->nodes[i].node_memdev; in numa_init_memdev_container()
637 MemoryRegion *seg = machine_consume_memdev(ms, backend); in numa_init_memdev_container()
643 void numa_complete_configuration(MachineState *ms) in numa_complete_configuration() argument
646 MachineClass *mc = MACHINE_GET_CLASS(ms); in numa_complete_configuration()
647 NodeInfo *numa_info = ms->numa_state->nodes; in numa_complete_configuration()
650 * If memory hotplug is enabled (slot > 0) or memory devices are enabled in numa_complete_configuration()
651 * (ms->maxram_size > ms->ram_size) but without '-numa' options explicitly on in numa_complete_configuration()
666 if (ms->numa_state->num_nodes == 0 && in numa_complete_configuration()
667 ((ms->ram_slots && mc->auto_enable_numa_with_memhp) || in numa_complete_configuration()
668 (ms->maxram_size > ms->ram_size && mc->auto_enable_numa_with_memdev) || in numa_complete_configuration()
671 parse_numa_node(ms, &node, &error_abort); in numa_complete_configuration()
672 numa_info[0].node_mem = ms->ram_size; in numa_complete_configuration()
678 for (i = max_numa_nodeid - 1; i >= 0; i--) { in numa_complete_configuration()
687 assert(ms->numa_state->num_nodes == max_numa_nodeid); in numa_complete_configuration()
689 if (ms->numa_state->num_nodes > 0) { in numa_complete_configuration()
692 numa_total = 0; in numa_complete_configuration()
693 for (i = 0; i < ms->numa_state->num_nodes; i++) { in numa_complete_configuration()
696 if (numa_total != ms->ram_size) { in numa_complete_configuration()
697 error_report("total memory for NUMA nodes (0x%" PRIx64 ")" in numa_complete_configuration()
698 " should equal RAM size (0x" RAM_ADDR_FMT ")", in numa_complete_configuration()
699 numa_total, ms->ram_size); in numa_complete_configuration()
704 if (ms->memdev) { in numa_complete_configuration()
709 ms->ram = g_new(MemoryRegion, 1); in numa_complete_configuration()
710 memory_region_init(ms->ram, OBJECT(ms), mc->default_ram_id, in numa_complete_configuration()
711 ms->ram_size); in numa_complete_configuration()
712 numa_init_memdev_container(ms, ms->ram); in numa_complete_configuration()
726 if (ms->numa_state->have_numa_distance) { in numa_complete_configuration()
728 validate_numa_distance(ms); in numa_complete_configuration()
731 complete_init_numa_distance(ms); in numa_complete_configuration()
736 void parse_numa_opts(MachineState *ms) in parse_numa_opts() argument
738 qemu_opts_foreach(qemu_find_opts("numa"), parse_numa, ms, &error_fatal); in parse_numa_opts()
783 node_mem[0].node_mem += vpi->size; in numa_stat_memory_devices()
784 node_mem[0].node_plugged_mem += vpi->size; in numa_stat_memory_devices()
794 node_mem[se->node].node_plugged_mem = 0; in numa_stat_memory_devices()
804 void query_numa_node_mem(NumaNodeMem node_mem[], MachineState *ms) in query_numa_node_mem() argument
808 if (ms->numa_state == NULL || ms->numa_state->num_nodes <= 0) { in query_numa_node_mem()
813 for (i = 0; i < ms->numa_state->num_nodes; i++) { in query_numa_node_mem()
814 node_mem[i].node_mem += ms->numa_state->nodes[i].node_mem; in query_numa_node_mem()
828 return 0; in ram_block_notify_add_single()
841 return 0; in ram_block_notify_remove_single()