PrintDebug(VM_NONE, VCORE_NONE, "v3_init_mem_map: %llu base regions will be allocated of %llu base regions in guest\n",
(uint64_t)num_base_regions_host_mem, (uint64_t)map->num_base_regions);
- map->base_regions = V3_AllocPages(CEIL_DIV(sizeof(struct v3_mem_region) * map->num_base_regions, PAGE_SIZE_4KB));
+ map->base_regions = V3_VMalloc(sizeof(struct v3_mem_region) * map->num_base_regions);
if (map->base_regions == NULL) {
PrintError(vm, VCORE_NONE, "Could not allocate base region array\n");
return -1;
}
- map->base_regions = V3_VAddr(map->base_regions);
memset(map->base_regions, 0, sizeof(struct v3_mem_region) * map->num_base_regions);
#ifdef V3_CONFIG_SWAPPING
// nothing to do - memset will have done it.
#endif
-
+
region->host_addr = (addr_t)V3_AllocPagesExtended(block_pages,
PAGE_SIZE_4KB,
node_id,
- 0); // no constraints
+ vm->resource_control.pg_filter_func,
+ vm->resource_control.pg_filter_state);
if ((void *)region->host_addr == NULL) {
PrintError(vm, VCORE_NONE, "Could not allocate guest memory\n");
#endif
}
- V3_FreePages(V3_PAddr(map->base_regions),
- CEIL_DIV(sizeof(struct v3_mem_region) * map->num_base_regions, PAGE_SIZE_4KB));
+ V3_VFree(map->base_regions);
}
}
- if (parent->guest_start > guest_addr) {
+ if (!parent || parent->guest_start > guest_addr) {
return parent;
} else if (parent->guest_end < guest_addr) {
struct rb_node * node = &(parent->tree_node);