qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] vhost-user:why region[0] always mmap failed ?


From: Linhaifeng
Subject: Re: [Qemu-devel] vhost-user:why region[0] always mmap failed ?
Date: Sat, 1 Nov 2014 10:28:21 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Thunderbird/31.1.0


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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]