device: 0.497 network: 0.484 PID: 0.461 vnc: 0.365 VMM: 0.333 ppc: 0.299 socket: 0.278 kernel: 0.258 register: 0.234 hypervisor: 0.230 graphic: 0.222 virtual: 0.221 arm: 0.217 architecture: 0.206 risc-v: 0.206 i386: 0.191 TCG: 0.168 x86: 0.168 debug: 0.149 boot: 0.147 performance: 0.136 semantic: 0.132 KVM: 0.131 peripherals: 0.131 files: 0.124 permissions: 0.123 user-level: 0.109 mistranslation: 0.108 assembly: 0.079 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.