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++;
        }
    }


Reply via email to