X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_usr%2Fv3_guest_mem.c;h=fa398e959b35f9cfc89b24bfcba29f5b201447fc;hb=f240f8a3c11478abe180bd906c746c68eb8c3a3c;hp=f1fe9de457ff9140d9b98c82897145ef180ec073;hpb=2dd1cacbcfe8c0c9acc1d04098e0e2e65a505202;p=palacios.git diff --git a/linux_usr/v3_guest_mem.c b/linux_usr/v3_guest_mem.c index f1fe9de..fa398e9 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: %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)); @@ -67,6 +73,7 @@ struct v3_guest_mem_map * v3_guest_mem_get_map(char *vmdev) // Now collect the region info guest_cur=0; + i=0; while (iblock[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);