PID: 0.140 device: 0.124 network: 0.119 other: 0.104 semantic: 0.093 vnc: 0.084 graphic: 0.059 debug: 0.047 performance: 0.044 socket: 0.044 files: 0.041 KVM: 0.037 permissions: 0.035 boot: 0.031 debug: 0.694 network: 0.070 device: 0.057 KVM: 0.053 semantic: 0.026 files: 0.024 performance: 0.017 other: 0.014 socket: 0.011 boot: 0.011 PID: 0.008 vnc: 0.007 graphic: 0.005 permissions: 0.004 vhost-user: VHOST_USER_SET_MEM_TABLE doesn't contain all regions vhost-user implementation doesn't provide information about all memory regions, and in some cases client is not able to map buffer memory as he is missing memory region information for specific address. Same thing is implemented properly for vhost-net. Below gdb outputs are showing memory regions information provided to the vhost-net and vhost-user. ==== memory regions information provided to vhost-net ==== (gdb) p/x hdev->mem->regions[0] $21 = { guest_phys_addr = 0x100000000, memory_size = 0xc0000000, userspace_addr = 0x2aab6ac00000, flags_padding = 0x0 } (gdb) p/x hdev->mem->regions[1] $22 = { guest_phys_addr = 0xfffc0000, memory_size = 0x40000, userspace_addr = 0x7ffff4a00000, flags_padding = 0x0 } (gdb) p/x hdev->mem->regions[2] $23 = { guest_phys_addr = 0x0, memory_size = 0xa0000, userspace_addr = 0x2aaaaac00000, flags_padding = 0x0 } (gdb) p/x hdev->mem->regions[3] $24 = { guest_phys_addr = 0xc0000, memory_size = 0xbff40000, userspace_addr = 0x2aaaaacc0000, flags_padding = 0x0 } (gdb) ==== memory regions information provided to vhost-user ==== (gdb) p/x msg.memory.nregions $28 = 0x1 (gdb) p/x msg.memory.regions[0] $29 = { guest_phys_addr = 0x0, memory_size = 0x180000000, userspace_addr = 0x2aaaaac00000 } (gdb) Problem fixed in qemu commit 3fd74b84.