On 2014/10/16 5:28, Anshul Makkar wrote: > Hi, > > Please can you share in what scenario this mapping fails. I am not seeing any > such issue. > > Thanks > Anshul Makkar >
VM info: memory:4G hugepage size:2M memory regions info: gpa = 0xC0000 size = 3220439040 ua = 0x2aaaaacc0000 offset = 786432 gpa = 0x100000000 size = 1073741824 ua = 0x2aab6ac00000 offset = 18446650252267094016 gpa = 0x0 size = 655360 ua = 0x2aaaaac00000 offset = 0 log: mmap fd[61] size[3221225472] failed mmap fd[62] size[18446650253340835840] failed > On Wed, Sep 17, 2014 at 10:33:23AM +0800, Linhaifeng wrote: >> Hi, >> >> There is two memory regions when receive VHOST_SET_MEM_TABLE message: >> region[0] >> gpa = 0x0 >> size = 655360 >> ua = 0x2aaaaac00000 >> offset = 0 >> region[1] >> gpa = 0xC0000 >> size = 2146697216 >> ua = 0x2aaaaacc0000 >> offset = 786432 >> >> region[0] always mmap failed.The user code is : >> >> for (idx = 0; idx < msg->msg.memory.nregions; idx++) { >> if (msg->fds[idx] > 0) { >> size_t size; >> uint64_t *guest_mem; >> Region *region = &vhost_server->memory.regions[i]; >> >> region->guest_phys_addr = >> msg->msg.memory.regions[idx].guest_phys_addr; >> region->memory_size = msg->msg.memory.regions[idx].memory_size; >> region->userspace_addr = >> msg->msg.memory.regions[idx].userspace_addr; >> region->mmap_offset = msg->msg.memory.regions[idx].mmap_offset; >> >> assert(idx < msg->fd_num); >> assert(msg->fds[idx] > 0); >> >> size = region->memory_size + region->mmap_offset; >> guest_mem = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, >> msg->fds[idx], 0); >> if (MAP_FAILED == guest_mem) { >> continue; >> } >> i++; >> guest_mem += (region->mmap_offset / sizeof(*guest_mem)); >> region->mmap_addr = (uint64_t)guest_mem; >> vhost_server->memory.nregions++; >> } >> } >> >> > > -- Regards, Haifeng