[dpdk-dev] [PATCH 4/5] net/virtio: add GET_STATUS support to virtio-user

Xia, Chenbo chenbo.xia at intel.com
Thu Jul 16 05:31:04 CEST 2020


Hi Adrian,

> -----Original Message-----
> From: Adrian Moreno <amorenoz at redhat.com>
> Sent: Thursday, July 16, 2020 1:18 AM
> To: dev at dpdk.org
> Cc: maxime.coquelin at redhat.com; Wang, Zhihong <zhihong.wang at intel.com>;
> amorenoz at redhat.com; Xia, Chenbo <chenbo.xia at 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 <amorenoz at 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



More information about the dev mailing list