Skip to content

Multi-queue vhost-user fails to reconnect with qemu version >=4.2

This bug has been copied automatically from: https://bugs.launchpad.net/qemu/+bug/1888818
Reported by 'xuan' on 2020-07-24 :

Test Environment:
DPDK version: DPDK v20.08
Other software versions: qemu4.2.0, qemu5.0.0.
OS: Linux 4.15.0-20-generic
Compiler: gcc (Ubuntu 7.3.0-16ubuntu3) 8.4.0
Hardware platform: Purley.
Test Setup
Steps to reproduce
List the steps to reproduce the issue.

Test flow
=========
1. Launch vhost-user testpmd as port0 with 2 queues:

./x86_64-native-linuxapp-gcc/app/testpmd -l 2-4 -n 4 \
    --file-prefix=vhost --vdev 'net_vhost0,iface=vhost-
net,queues=2,client=1' -- -i --txd=1024 --rxd=1024 --txq=2 --rxq=2
testpmd>start

3. Launch qemu with virtio-net:

 taskset -c 13 \
    qemu-system-x86_64 -name us-vhost-vm1 \
       -cpu host -enable-kvm -m 2048 -object memory-backend-
file,id=mem,size=2048M,mem-path=/mnt/huge,share=on \
       -numa node,memdev=mem \
       -mem-prealloc -monitor unix:/tmp/vm2_monitor.sock,server,nowait
-netdev user,id=yinan,hostfwd=tcp:127.0.0.1:6005-:22 -device
e1000,netdev=yinan \
       -smp cores=1,sockets=1 -drive file=/home/osimg/ubuntu16.img  \
       -chardev socket,id=char0,path=./vhost-net,server \
       -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce,queues=2
\
       -device virtio-net-
pci,mac=52:54:00:00:00:01,netdev=mynet1,mrg_rxbuf=on,csum=on,gso=on,host_tso4=on,guest_tso4=on,mq=on,vectors=15
\
       -vnc :10 -daemonize

6. Quit testpmd and restart vhost-user :

testpmd>quit
./x86_64-native-linuxapp-gcc/app/testpmd -l 2-4 -n 4 \
    --file-prefix=vhost --vdev 'net_vhost0,iface=vhost-
net,queues=2,client=1' -- -i --txd=1024 --rxd=1024 --txq=2 --rxq=2

Expected Result:
After the vhost-user is killed then re-launched, the virtio-net can
connect back to vhost-user again.

Actual Result:
Vhost-user relaunch failed with continous log printed"VHOST_CONFIG:
Processing VHOST_USER_SET_FEATURES failed.

Analysis:
This is a regression bug, bad commit: c6beefd674f
When vhost-user quits, QEMU doesnot save acked features for each virtio-
net after vhost-user quits. When vhost-user reconnects to QEMU, QEMU sends
two different features(one is the true acked feature while the another is
0x40000000) to vhost-user successively which causing vhost-user exits
abnormally.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information