#include <palacios/vmm.h>
#include <palacios/vmm_util.h>
#include <palacios/vmm_emulator.h>
+#include <palacios/vm_guest.h>
#include <palacios/vmm_shadow_paging.h>
#include <palacios/vmm_direct_paging.h>
-
#define MEM_OFFSET_HCALL 0x1000
static int mem_offset_hypercall(struct guest_info * info, uint_t hcall_id, void * private_data) {
+ PrintDebug("V3Vee: Memory offset hypercall (offset=%p)\n",
+ (void *)(info->mem_map.base_region.host_addr));
+
info->vm_regs.rbx = info->mem_map.base_region.host_addr;
return 0;
}
-void v3_init_shadow_map(struct guest_info * info) {
+int v3_init_shadow_map(struct guest_info * info) {
v3_shdw_map_t * map = &(info->mem_map);
addr_t mem_pages = info->mem_size >> 12;
map->base_region.host_type = SHDW_REGION_ALLOCATED;
map->base_region.host_addr = (addr_t)V3_AllocPages(mem_pages);
+
+ if ((void *)map->base_region.host_addr == NULL) {
+ PrintError("Could not allocate Guest memory\n");
+ return -1;
+ }
+
//memset(V3_VAddr((void *)map->base_region.host_addr), 0xffffffff, map->base_region.guest_end);
v3_register_hypercall(info, MEM_OFFSET_HCALL, mem_offset_hypercall, NULL);
+
+ return 0;
}
void v3_delete_shadow_map(struct guest_info * info) {
(reg->host_type != SHDW_REGION_FULL_HOOK)) {
return (guest_addr - reg->guest_start) + reg->host_addr;
} else {
- PrintError("MEM Region Invalid\n");
+ // PrintError("MEM Region Invalid\n");
return 0;
}