uint64_t start, end, num;
uint64_t guest_cur;
uint64_t num_regions;
+ uint64_t num_regions_shown;
if (!(f=fopen(GUEST_FILE,"r"))) {
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: %llu (%llu 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));
// Now collect the region info
guest_cur=0;
+ i=0;
while (i<num_regions) {
if (!fgets(buf,MAXLINE,f)) {
fprintf(stderr,"Did not find all regions...\n");
m->block[i].hpa = (void*)start;
m->block[i].numpages = (end-start) / 4096 + !!((end-start) % 4096);
if ((end-start)%4096) {
- fprintf(stderr,"Odd, region %d is a non-integral number of pages");
+ fprintf(stderr,"Odd, region %d is a non-integral number of pages",i);
}
guest_cur+=end-start;
m->block[i].cumgpa=(void*)(guest_cur-1);