X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_usr%2Fv3_guest_mem.c;h=479d1c1e473ed599f4a63d4333e2abec1d547e52;hb=68f8c4cd303c5da40c1083cbabdaf6395e4dbaa1;hp=b0798a6e3862989efd1fa29d98096854f57dbe32;hpb=471edd59ca70371e97cbad759e1710433f35990d;p=palacios.git diff --git a/linux_usr/v3_guest_mem.c b/linux_usr/v3_guest_mem.c index b0798a6..479d1c1 100644 --- a/linux_usr/v3_guest_mem.c +++ b/linux_usr/v3_guest_mem.c @@ -22,6 +22,7 @@ struct v3_guest_mem_map * v3_guest_mem_get_map(char *vmdev) uint64_t start, end, num; uint64_t guest_cur; uint64_t num_regions; + uint64_t num_regions_shown; if (!(f=fopen(GUEST_FILE,"r"))) { @@ -48,10 +49,15 @@ struct v3_guest_mem_map * v3_guest_mem_get_map(char *vmdev) fprintf(stderr,"Could not find number of regions for %s\n",vmdev); return 0; } - if (sscanf(buf,"Regions: %llu",&num_regions)==1) { + if (sscanf(buf,"Regions: %lu (%lu shown)",&num_regions,&num_regions_shown)==2) { break; } } + + if (num_regions != num_regions_shown) { + fprintf(stderr,"Cannot see all regions for %s\n",vmdev); + return 0; + } struct v3_guest_mem_map *m = (struct v3_guest_mem_map *) malloc(sizeof(struct v3_guest_mem_map)+num_regions*sizeof(struct v3_guest_mem_block)); @@ -74,7 +80,7 @@ struct v3_guest_mem_map * v3_guest_mem_get_map(char *vmdev) free(m); return 0; } - if (sscanf(buf," region %d has HPAs %llx-%llx",&num,&start,&end)==3) { + if (sscanf(buf," region %lu has HPAs %lx-%lx",&num,&start,&end)==3) { m->block[i].gpa = (void*)guest_cur; m->block[i].hpa = (void*)start; m->block[i].numpages = (end-start) / 4096 + !!((end-start) % 4096); @@ -121,7 +127,7 @@ int v3_map_guest_mem(struct v3_guest_mem_map *map) (off_t) (map->block[i].hpa)); if (map->block[i].uva == MAP_FAILED) { - fprintf(stderr, "Failed to map block %llu\n",i); + fprintf(stderr, "Failed to map block %lu\n",i); map->block[i].uva=0; v3_unmap_guest_mem(map); return -1;