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
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