Re: [dpdk-dev] [PATCH 25/40] net/virtio: add Virtio-user features ops
From: Maxime Coquelin <hidden>
Date: 2021-01-15 14:29:32
On 1/13/21 2:57 PM, Adrian Moreno wrote:
On 12/20/20 10:13 PM, Maxime Coquelin wrote:quoted
This patch introduce new callbacks for getting and setting Virtio features, and implements them for the different backend types. Signed-off-by: Maxime Coquelin <redacted> --- drivers/net/virtio/virtio_user/vhost.h | 2 + drivers/net/virtio/virtio_user/vhost_kernel.c | 150 +++++++++--------- .../net/virtio/virtio_user/vhost_kernel_tap.c | 23 +++ .../net/virtio/virtio_user/vhost_kernel_tap.h | 1 + drivers/net/virtio/virtio_user/vhost_user.c | 63 +++++++- drivers/net/virtio/virtio_user/vhost_vdpa.c | 38 +++-- .../net/virtio/virtio_user/virtio_user_dev.c | 5 +- drivers/net/virtio/virtio_user_ethdev.c | 3 +- 8 files changed, 188 insertions(+), 97 deletions(-)
...
quoted
diff --git a/drivers/net/virtio/virtio_user/vhost_user.c b/drivers/net/virtio/virtio_user/vhost_user.c index 5ab15318ac..d204fa1eb0 100644 --- a/drivers/net/virtio/virtio_user/vhost_user.c +++ b/drivers/net/virtio/virtio_user/vhost_user.c@@ -143,6 +143,62 @@ vhost_user_set_owner(struct virtio_user_dev *dev) return 0; } +static int +vhost_user_get_features(struct virtio_user_dev *dev, uint64_t *features) +{ + int ret; + struct vhost_user_msg msg = { + .request = VHOST_USER_GET_FEATURES, + .flags = VHOST_USER_VERSION, + }; + + ret = vhost_user_write(dev->vhostfd, &msg, NULL, 0); + if (ret < 0) + goto err; + + ret = vhost_user_read(dev->vhostfd, &msg); + if (ret < 0) + goto err; + + if (msg.request != VHOST_USER_GET_FEATURES) { + PMD_DRV_LOG(ERR, "Unexpected request type (%d)", msg.request); + goto err; + } + + if (msg.size != sizeof(*features)) { + PMD_DRV_LOG(ERR, "Unexpected payload size (%d)", msg.size); + goto err; + } + + *features = msg.payload.u64; + + return 0; +err: + PMD_DRV_LOG(ERR, "Failed to get backend features"); +On possibly socket-related errors, it's sometimes useful to print sterror(errno). WDYT?quoted
+ return -1; +}
I agree, I will do it in vhost_user_read/vhost_user_write. Actually I have a already done it in vhost_user_write after earlier comment from Chenbo. Thanks, Maxime