#define CEIL_DIV(x,y) (((x)/(y)) + !!((x)%(y)))
+
int v3_init_mem_map(struct v3_vm_info * vm) {
struct v3_mem_map * map = &(vm->mem_map);
addr_t block_pages = v3_mem_block_size >> 12;
int i = 0;
uint64_t num_base_regions_host_mem;
+
map->num_base_regions = CEIL_DIV(vm->mem_size, v3_mem_block_size);
num_base_regions_host_mem=map->num_base_regions; // without swapping
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_Malloc(sizeof(struct v3_mem_region) * map->num_base_regions);
-
+
+ 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;
#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_Free(map->base_regions);
-
+ V3_VFree(map->base_regions);
}