Hi Maxime, > -----Original Message----- > From: Maxime Coquelin <maxime.coque...@redhat.com> > Sent: Thursday, October 22, 2020 3:14 PM > To: Wang, Yinan <yinan.w...@intel.com>; Adrian Moreno > <amore...@redhat.com>; dev@dpdk.org; Xia, Chenbo <chenbo....@intel.com> > Cc: Fu, Patrick <patrick...@intel.com>; sta...@dpdk.org; Wang, Zhihong > <zhihong.w...@intel.com>; Xu, Qian Q <qian.q...@intel.com> > Subject: Re: [PATCH v2 3/3] virtio-user: set status on virtio-user > reconnect > > Hi Yinan, > > On 10/22/20 6:01 AM, Wang, Yinan wrote: > > Hi Maxime/ Adrian, > > > > Thanks for the patch. we can launch vhost-user with client mode with > this fix patch. > > But still fail to get throughput with basic vhost/virtio-user server > mode loopback test. This is another problem which introduced by > 57912824615fd7787a48a7b18e40661466. > > Bugzilla: https://bugs.dpdk.org/show_bug.cgi?id=541 > > Thanks for reporting the issue, I will look at it this morning. > > BTW, this virtio-user server mode is broken by design, we should really > fix it. > > For example, it assumes features to be supported by the backend before > the negotiation took place: > https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_user/virtio_user_ > dev.c#n513 > > As part of my rework, I suggest we implement the same behaviour as QEMU > does, which will be reliable and consistent with QEMU. It means that if > server mode is enabled in device command-line, the driver waits until > the socket is ready. > > Chenbo, Adrian, what do you think?
Yes! I totally agree and have the same opinion for a long time. As I remember, this feature assumption has caused problems before and I notice the new STATUS feature is also affected. It's good to make this consistent with QEMU 😊. Cheers, Chenbo > > Thanks, > Maxime > > > BR, > > Yinan > >> -----Original Message----- > >> From: Maxime Coquelin <maxime.coque...@redhat.com> > >> Sent: 2020年10月21日 0:43 > >> To: Adrian Moreno <amore...@redhat.com>; dev@dpdk.org > >> Cc: Wang, Yinan <yinan.w...@intel.com>; Fu, Patrick > <patrick...@intel.com>; > >> sta...@dpdk.org; Xia, Chenbo <chenbo....@intel.com>; Wang, Zhihong > >> <zhihong.w...@intel.com> > >> Subject: Re: [PATCH v2 3/3] virtio-user: set status on virtio-user > reconnect > >> > >> > >> > >> On 10/20/20 5:20 PM, Adrian Moreno wrote: > >>> Newer vhost-user backends will rely on SET_STATUS to start the device > >>> so this required to support them. > >>> > >>> Fixes: 57912824615f ("net/virtio-user: support vhost status setting") > >>> Cc: maxime.coque...@redhat.com > >>> Cc: sta...@dpdk.org > >>> > >>> Signed-off-by: Adrian Moreno <amore...@redhat.com> > >>> --- > >>> drivers/net/virtio/virtio_user_ethdev.c | 14 ++++++++++++-- > >>> 1 file changed, 12 insertions(+), 2 deletions(-) > >>> > >>> diff --git a/drivers/net/virtio/virtio_user_ethdev.c > >> b/drivers/net/virtio/virtio_user_ethdev.c > >>> index e870fb2ff..d8bea4537 100644 > >>> --- a/drivers/net/virtio/virtio_user_ethdev.c > >>> +++ b/drivers/net/virtio/virtio_user_ethdev.c > >>> @@ -78,6 +78,13 @@ virtio_user_server_reconnect(struct virtio_user_dev > >> *dev) > >>> return -1; > >>> > >>> dev->vhostfd = connectfd; > >>> + > >>> + vtpci_reset(hw); > >>> + > >>> + vtpci_set_status(hw, VIRTIO_CONFIG_STATUS_ACK); > >>> + > >>> + vtpci_set_status(hw, VIRTIO_CONFIG_STATUS_DRIVER); > >>> + > >>> if (dev->ops->send_request(dev, VHOST_USER_GET_FEATURES, > >>> &dev->device_features) < 0) { > >>> PMD_INIT_LOG(ERR, "get_features failed: %s", > >>> @@ -111,6 +118,8 @@ virtio_user_server_reconnect(struct > virtio_user_dev > >> *dev) > >>> > >>> dev->features &= dev->device_features; > >>> > >>> + vtpci_set_status(hw, VIRTIO_CONFIG_STATUS_FEATURES_OK); > >>> + > >>> /* For packed ring, resetting queues is required in reconnection. */ > >>> if (vtpci_packed_queue(hw) && > >>> (vtpci_get_status(hw) & VIRTIO_CONFIG_STATUS_DRIVER_OK)) { > >>> @@ -119,8 +128,9 @@ virtio_user_server_reconnect(struct > virtio_user_dev > >> *dev) > >>> virtio_user_reset_queues_packed(eth_dev); > >>> } > >>> > >>> - ret = virtio_user_start_device(dev); > >>> - if (ret < 0) > >>> + /* Start the device */ > >>> + vtpci_set_status(hw, VIRTIO_CONFIG_STATUS_DRIVER_OK); > >>> + if (!dev->started) > >>> return -1; > >>> > >>> if (dev->queue_pairs > 1) { > >>> > >> > >> Reviewed-by: Maxime Coquelin <maxime.coque...@redhat.com> > >> > >> Thanks, > >> Maxime > >