X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fvmm_mem.c;h=05516758a21ff76b226726ee957851333067152e;hb=8cb3daaded0d8c80be801aa74493006b5a06999f;hp=4b2d6d9eb9300be1ef946b95a75436a1bb6789d0;hpb=ebf600fd1dc3b43e8100be168452c6e03b8a2dda;p=palacios.git diff --git a/palacios/src/geekos/vmm_mem.c b/palacios/src/geekos/vmm_mem.c index 4b2d6d9..0551675 100644 --- a/palacios/src/geekos/vmm_mem.c +++ b/palacios/src/geekos/vmm_mem.c @@ -152,25 +152,24 @@ shadow_region_t * get_shadow_region_by_addr(shadow_map_t * map, -int guest_paddr_to_host_paddr(shadow_region_t * entry, - addr_t guest_addr, - addr_t * host_addr) { - - if (!((guest_addr >= entry->guest_start) && - (guest_addr < entry->guest_end))) { - return -1; - } - - switch (entry->host_type) { - case HOST_REGION_PHYSICAL_MEMORY: - case HOST_REGION_MEMORY_MAPPED_DEVICE: - case HOST_REGION_UNALLOCATED: - *host_addr = (guest_addr-entry->guest_start) + entry->host_addr.phys_addr.host_start; - return 0; - break; - default: - return -1; - break; +host_region_type_t lookup_shadow_map_addr(shadow_map_t * map, addr_t guest_addr, addr_t * host_addr) { + shadow_region_t * reg = get_shadow_region_by_addr(map, guest_addr); + + if (!reg) { + // No mapping exists + return HOST_REGION_INVALID; + } else { + switch (reg->host_type) { + case HOST_REGION_PHYSICAL_MEMORY: + *host_addr = (guest_addr - reg->guest_start) + reg->host_addr.phys_addr.host_start; + return reg->host_type; + case HOST_REGION_MEMORY_MAPPED_DEVICE: + case HOST_REGION_UNALLOCATED: + // ... + default: + *host_addr = 0; + return reg->host_type; + } } }