Re: [PATCH 2/3] net/virtio_user: fix wrong sequence of messages
From: Tan, Jianfeng <hidden>
Date: 2016-08-08 01:20:04
Hi Stephen,
-----Original Message----- From: Stephen Hemminger [mailto:stephen@networkplumber.org] Sent: Saturday, August 6, 2016 12:36 AM To: Tan, Jianfeng Cc: dev@dpdk.org; yuanhan.liu@linux.intel.com; Wang, Zhihong; lining18@jd.com Subject: Re: [dpdk-dev] [PATCH 2/3] net/virtio_user: fix wrong sequence of messages On Fri, 5 Aug 2016 11:36:42 +0000 Jianfeng Tan [off-list ref] wrote:quoted
When virtio_user is used with VPP's native vhost user, it cannot send/receive any packets. The root cause is that vpp-vhost-user translates the message VHOST_USER_SET_FEATURES as puting this device into init state, aka, zero all related structures. However, previous code puts this message at last in the whole initialization process, which leads to all previous information are zeroed.Not sure what correct behavior is here. It could be that VPP native vhost user is broken. What does QEMU/KVM vhost do in this case? I would take that as the authoritative source for semantics.
Below corrective message sequence is as per QEMU's behavior. One more thing, QEMU does not have any docs for this, and it's figured out through how the vhost receives messages from QEMU. Thanks, Jianfeng
quoted
To fix this issue, we rearrange the sequence of those messages. - step 0, send VHOST_USER_SET_VRING_CALL so that vhost allocates virtqueue structures; - step 1, send VHOST_USER_SET_FEATURES to confirm the features; - step 2, send VHOST_USER_SET_MEM_TABLE to share mem regions; - step 3, send VHOST_USER_SET_VRING_NUM,VHOST_USER_SET_VRING_BASE,quoted
VHOST_USER_SET_VRING_ADDR, VHOST_USER_SET_VRING_KICK foreachquoted
queue; - ... Fixes: 37a7eb2ae816 ("net/virtio-user: add device emulation layer")