Set proper payload size for set/get status message. The payload size varies according to backend types.
Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com> Signed-off-by: Patrick Fu <patrick...@intel.com> --- .../net/virtio/virtio_user/virtio_user_dev.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c index 93274b2a94..753611ef42 100644 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c @@ -838,14 +838,18 @@ virtio_user_send_status_update(struct virtio_user_dev *dev, uint8_t status) enum virtio_user_backend_type backend_type = virtio_user_backend_type(dev->path); - /* Vhost-user only for now */ - if (backend_type != VIRTIO_USER_BACKEND_VHOST_USER) + if (!(dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_STATUS))) return 0; - if (!(dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_STATUS))) + if (backend_type == VIRTIO_USER_BACKEND_VHOST_USER) + ret = dev->ops->send_request(dev, + VHOST_USER_SET_STATUS, &arg); + else if (backend_type == VIRTIO_USER_BACKEND_VHOST_VDPA) + ret = dev->ops->send_request(dev, + VHOST_USER_SET_STATUS, &status); + else return 0; - ret = dev->ops->send_request(dev, VHOST_USER_SET_STATUS, &arg); if (ret) { PMD_INIT_LOG(ERR, "VHOST_USER_SET_STATUS failed (%d): %s", ret, strerror(errno)); @@ -858,7 +862,7 @@ virtio_user_send_status_update(struct virtio_user_dev *dev, uint8_t status) int virtio_user_update_status(struct virtio_user_dev *dev) { - uint64_t ret; + uint8_t ret; int err; enum virtio_user_backend_type backend_type = virtio_user_backend_type(dev->path); @@ -876,11 +880,6 @@ virtio_user_update_status(struct virtio_user_dev *dev) strerror(errno)); return -1; } - if (ret > UINT8_MAX) { - PMD_INIT_LOG(ERR, "Invalid VHOST_USER_GET_STATUS " - "response 0x%" PRIx64 "\n", ret); - return -1; - } dev->status = ret; PMD_INIT_LOG(DEBUG, "Updated Device Status(0x%08x):\n" -- 2.26.2