Hi Adrian,

> -----Original Message-----
> From: Adrian Moreno <amore...@redhat.com>
> Sent: Thursday, July 16, 2020 1:18 AM
> To: dev@dpdk.org
> Cc: maxime.coque...@redhat.com; Wang, Zhihong <zhihong.w...@intel.com>;
> amore...@redhat.com; Xia, Chenbo <chenbo....@intel.com>
> Subject: [PATCH 4/5] net/virtio: add GET_STATUS support to virtio-user
> 
> This patch adds support for VHOST_USER_GET_STATUS request.
> 
> Only vhost-user backed is supported for now
> 
> Signed-off-by: Adrian Moreno <amore...@redhat.com>
> ---
>  drivers/net/virtio/virtio_user/vhost_user.c   |  2 +
>  .../net/virtio/virtio_user/virtio_user_dev.c  | 39
> +++++++++++++++++++  .../net/virtio/virtio_user/virtio_user_dev.h  |  1 +
>  drivers/net/virtio/virtio_user_ethdev.c       |  2 +
>  4 files changed, 44 insertions(+)
> 
> diff --git a/drivers/net/virtio/virtio_user/vhost_user.c
> b/drivers/net/virtio/virtio_user/vhost_user.c
> index 2332e01d1..43c630e47 100644
> --- a/drivers/net/virtio/virtio_user/vhost_user.c
> +++ b/drivers/net/virtio/virtio_user/vhost_user.c
> @@ -279,6 +279,7 @@ vhost_user_sock(struct virtio_user_dev *dev,
>       switch (req) {
>       case VHOST_USER_GET_FEATURES:
>       case VHOST_USER_GET_PROTOCOL_FEATURES:
> +     case VHOST_USER_GET_STATUS:
>               need_reply = 1;
>               break;
> 
> @@ -373,6 +374,7 @@ vhost_user_sock(struct virtio_user_dev *dev,
> 
>               switch (req) {
>               case VHOST_USER_GET_FEATURES:
> +             case VHOST_USER_GET_STATUS:
>               case VHOST_USER_GET_PROTOCOL_FEATURES:
>                       if (msg.size != sizeof(m.payload.u64)) {
>                               PMD_DRV_LOG(ERR, "Received bad msg size");
> diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c
> b/drivers/net/virtio/virtio_user/virtio_user_dev.c
> index 2c400a448..613caef56 100644
> --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
> +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
> @@ -804,3 +804,42 @@ virtio_user_send_status_update(struct virtio_user_dev
> *dev, uint8_t status)
> 
>       return 0;
>  }
> +
> +int
> +virtio_user_update_status(struct virtio_user_dev *dev) {
> +     uint64_t ret;
> +
> +     /* Vhost-user only for now */
> +     if (!is_vhost_user_by_type(dev->path))
> +             return 0;
> +
> +     if (!(dev->protocol_features & (1UL <<
> VHOST_USER_PROTOCOL_F_STATUS)))
> +             return 0;
> +
> +     if (dev->ops->send_request(dev, VHOST_USER_GET_STATUS, &ret) < 0) {
> +             PMD_INIT_LOG(ERR, "GET_STATUS failed: %s", strerror(errno));
> +             return -1;
> +     }
> +     if (ret > UINT8_MAX) {
> +             PMD_INIT_LOG(ERR, "Invalid VHOST_USER_GET_STATUS
> response 0x%" PRIx64 "\n", ret);

There's a coding style issue here:
CHECK:CAMELCASE: Avoid CamelCase: <PRIx64>
Could you fix this?

Btw, in case you don't know, there's a script in dpdk for check these issues:
devtools/checkpatches.sh. 😊

Thanks!
Chenbo

> +             return -1;
> +     }
> +
> +     dev->status = ret;
> +     PMD_INIT_LOG(DEBUG, "Updated Device Status(0x%08x):\n"
> +                     "\t-ACKNOWLEDGE: %u\n"
> +                     "\t-DRIVER: %u\n"
> +                     "\t-DRIVER_OK: %u\n"
> +                     "\t-FEATURES_OK: %u\n"
> +                     "\t-DEVICE_NEED_RESET: %u\n"
> +                     "\t-FAILED: %u\n",
> +                     dev->status,
> +                     !!(dev->status & VIRTIO_CONFIG_STATUS_ACK),
> +                     !!(dev->status & VIRTIO_CONFIG_STATUS_DRIVER),
> +                     !!(dev->status & VIRTIO_CONFIG_STATUS_DRIVER_OK),
> +                     !!(dev->status &
> VIRTIO_CONFIG_STATUS_FEATURES_OK),
> +                     !!(dev->status &
> VIRTIO_CONFIG_STATUS_DEV_NEED_RESET),
> +                     !!(dev->status & VIRTIO_CONFIG_STATUS_FAILED));
> +     return 0;
> +}
> diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h
> b/drivers/net/virtio/virtio_user/virtio_user_dev.h
> index a76d7cfaf..1a045af6f 100644
> --- a/drivers/net/virtio/virtio_user/virtio_user_dev.h
> +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h
> @@ -75,4 +75,5 @@ void virtio_user_handle_cq_packed(struct virtio_user_dev
> *dev,
>                                 uint16_t queue_idx);
>  uint8_t virtio_user_handle_mq(struct virtio_user_dev *dev, uint16_t q_pairs);
> int virtio_user_send_status_update(struct virtio_user_dev *dev, uint8_t 
> status);
> +int virtio_user_update_status(struct virtio_user_dev *dev);
>  #endif
> diff --git a/drivers/net/virtio/virtio_user_ethdev.c
> b/drivers/net/virtio/virtio_user_ethdev.c
> index e52f11341..40330deed 100644
> --- a/drivers/net/virtio/virtio_user_ethdev.c
> +++ b/drivers/net/virtio/virtio_user_ethdev.c
> @@ -281,6 +281,8 @@ virtio_user_get_status(struct virtio_hw *hw)  {
>       struct virtio_user_dev *dev = virtio_user_get_dev(hw);
> 
> +     virtio_user_update_status(dev);
> +
>       return dev->status;
>  }
> 
> --
> 2.26.2

Reply via email to