On Thu, Sep 01, 2016 at 05:41:52PM +0200, Paolo Bonzini wrote: > On 01/09/2016 17:10, Eduardo Habkost wrote: > > Ouch. It looks like the ordering requirements are messier than I > > thought. vhost-user depends on the memory backends to be already > > initialized. > > You could also look at delaying initialization of vhost-user, not > sending anything on the wire until after machine creation.
I was wishing the bug could be fixed without the need to touch vhost, but I will take a look. BTW, the vhost error is actually happening inside a VCPU thread, after everything was supposed to be fully initialized. Maybe the memory listener logic in vhost.c is broken somehow? Backtrace (after manually adding an abort() to help debugging): #2 0x0000562ebf27feb5 in vhost_user_set_mem_table (dev=0x562ec0189630, mem=<optimized out>) at /home/ehabkost/rh/proj/virt/qemu/hw/virtio/vhost-user.c:308 #3 0x0000562ebf27e524 in vhost_dev_start (hdev=hdev@entry=0x562ec0189630, vdev=vdev@entry=0x562ec19aa4c0) at /home/ehabkost/rh/proj/virt/qemu/hw/virtio/vhost.c:1304 #4 0x0000562ebf264a6b in vhost_net_start (dev=0x562ec19aa4c0, net=0x562ec0189630) at /home/ehabkost/rh/proj/virt/qemu/hw/net/vhost_net.c:232 #5 0x0000562ebf264a6b in vhost_net_start (dev=dev@entry=0x562ec19aa4c0, ncs=0x562ec19f3750, total_queues=total_queues@entry=1) at /home/ehabkost/rh/proj/virt/qemu/hw/net/vhost_net.c:324 #6 0x0000562ebf261543 in virtio_net_set_status (status=6 '\006', n=0x562ec19aa4c0) at /home/ehabkost/rh/proj/virt/qemu/hw/net/virtio-net.c:151 #7 0x0000562ebf261543 in virtio_net_set_status (vdev=<optimized out>, status=<optimized out>) at /home/ehabkost/rh/proj/virt/qemu/hw/net/virtio-net.c:224 #8 0x0000562ebf278fc3 in virtio_set_status (vdev=vdev@entry=0x562ec19aa4c0, val=val@entry=6 '\006') at /home/ehabkost/rh/proj/virt/qemu/hw/virtio/virtio.c:760 #9 0x0000562ebf450cbe in virtio_pci_config_write (val=6, addr=18, opaque=0x562ec19a2180) at hw/virtio/virtio-pci.c:400 #10 0x0000562ebf450cbe in virtio_pci_config_write (opaque=0x562ec19a2180, addr=18, val=6, size=<optimized out>) at hw/virtio/virtio-pci.c:525 #11 0x0000562ebf234b98 in memory_region_write_accessor (mr=0x562ec19a2a10, addr=18, value=<optimized out>, size=1, shift=<optimized out>, mask=<optimized out>, attrs=...) at /home/ehabkost/rh/proj/virt/qemu/memory.c:525 #12 0x0000562ebf23309d in access_with_adjusted_size (addr=addr@entry=18, value=value@entry=0x7f1917a1c2c8, size=size@entry=1, access_size_min=<optimized out>, access_size_max=<optimized out>, access=0x562ebf234b20 <memory_region_write_accessor>, mr=0x562ec19a2a10, attrs=...) at /home/ehabkost/rh/proj/virt/qemu/memory.c:591 #13 0x0000562ebf236f4c in memory_region_dispatch_write (mr=mr@entry=0x562ec19a2a10, addr=18, data=<optimized out>, size=size@entry=1, attrs=attrs@entry=...) at /home/ehabkost/rh/proj/virt/qemu/memory.c:1275 #14 0x0000562ebf1f23b7 in address_space_write (mr=0x562ec19a2a10, l=<optimized out>, addr1=<optimized out>, len=1, buf=0x7f1917a1c3a7 "\006", attrs=..., addr=49170, as=0x562ebfb52aa0 <address_space_io>) at /home/ehabkost/rh/proj/virt/qemu/exec.c:2556 #15 0x0000562ebf1f23b7 in address_space_write (as=0x562ebfb52aa0 <address_space_io>, addr=<optimized out>, attrs=..., buf=<optimized out>, len=<optimized out>) at /home/ehabkost/rh/proj/virt/qemu/exec.c:2601 #16 0x0000562ebf1f295d in address_space_rw (as=<optimized out>, addr=<optimized out>, attrs=..., buf=buf@entry=0x7f1917a1c3a7 "\006", len=len@entry=1, is_write=is_write@entry=true) at /home/ehabkost/rh/proj/virt/qemu/exec.c:2703 #17 0x0000562ebf1f61b6 in address_space_stb (as=<optimized out>, addr=<optimized out>, val=<optimized out>, attrs=..., result=result@entry=0x0) at /home/ehabkost/rh/proj/virt/qemu/exec.c:3443 #18 0x0000562ebf2d6731 in helper_outb (env=<optimized out>, port=<optimized out>, data=<optimized out>) at /home/ehabkost/rh/proj/virt/qemu/target-i386/misc_helper.c:32 #19 0x00007f193a4b166d in code_gen_buffer () #20 0x0000562ebf1f96e3 in cpu_exec (itb=0x7f1937d85b50, itb=0x7f1937d85b50, cpu=0x562ec0199e80) at /home/ehabkost/rh/proj/virt/qemu/cpu-exec.c:166 #21 0x0000562ebf1f96e3 in cpu_exec (sc=0x7f1917a1c8e0, tb_exit=<synthetic pointer>, last_tb=<synthetic pointer>, tb=0x7f1937d85b50, cpu=0x562ec0199e80) at /home/ehabkost/rh/proj/virt/qemu/cpu-exec.c:530 #22 0x0000562ebf1f96e3 in cpu_exec (cpu=cpu@entry=0x562ec0191c00) at /home/ehabkost/rh/proj/virt/qemu/cpu-exec.c:625 #23 0x0000562ebf21f66f in qemu_tcg_cpu_thread_fn (cpu=0x562ec0191c00) at /home/ehabkost/rh/proj/virt/qemu/cpus.c:1541 #24 0x0000562ebf21f66f in qemu_tcg_cpu_thread_fn () at /home/ehabkost/rh/proj/virt/qemu/cpus.c:1574 #25 0x0000562ebf21f66f in qemu_tcg_cpu_thread_fn (arg=<optimized out>) at /home/ehabkost/rh/proj/virt/qemu/cpus.c:1171 #26 0x00007f195417d5ca in start_thread () at /lib64/libpthread.so.0 #27 0x00007f194f0f4ead in clone () at /lib64/libc.so.6 (gdb) up #2 0x0000562ebf27feb5 in vhost_user_set_mem_table (dev=0x562ec0189630, mem=<optimized out>) at /home/ehabkost/rh/proj/virt/qemu/hw/virtio/vhost-user.c:308 308 abort(); (gdb) p dev->mem->nregions $1 = 0 (gdb) -- Eduardo