[dpdk-dev] [PATCH 4/5] net/virtio-user: add lsc support with vhost-user adapter

Yuanhan Liu yuanhan.liu at linux.intel.com
Fri Mar 17 09:29:12 CET 2017


On Fri, Mar 03, 2017 at 05:56:42PM +0000, Jianfeng Tan wrote:
> So far, virtio-user with vhost-user as the backend can only support
> client mode. So when vhost user backend is down, i.e., unix socket
> connection is broken and cannot be re-connected. We will force the
> link state to be down.
> 
> Signed-off-by: Jianfeng Tan <jianfeng.tan at intel.com>
>  static void
>  virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
>  		     void *dst, int length)
> @@ -63,8 +77,27 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
>  		return;
>  	}
>  
> -	if (offset == offsetof(struct virtio_net_config, status))
> +	if (offset == offsetof(struct virtio_net_config, status)) {
> +		char buf[128];
> +
> +		if (dev->vhostfd >= 0) {
> +			int flags;
> +			int r;
> +
> +			flags = fcntl(dev->vhostfd, F_GETFL);
> +			fcntl(dev->vhostfd, F_SETFL, flags | O_NONBLOCK);
> +			r = recv(dev->vhostfd, buf, 128, 0);

I think you need specify flag MSG_PEEK, to not consume the data if
there any?

	--yliu
> +			if (r == 0 || (r < 0 && errno != EAGAIN)) {
> +				dev->status &= (~VIRTIO_NET_S_LINK_UP);
> +				/* link can never be up again */
> +				rte_eal_alarm_set(1, virtio_user_delayed_handler, (void *)hw);
> +			} else {
> +				dev->status |= VIRTIO_NET_S_LINK_UP;
> +			}
> +			fcntl(dev->vhostfd, F_SETFL, flags & (~O_NONBLOCK));
> +		}
>  		*(uint16_t *)dst = dev->status;
> +	}
>  
>  	if (offset == offsetof(struct virtio_net_config, max_virtqueue_pairs))
>  		*(uint16_t *)dst = dev->max_queue_pairs;
> -- 
> 2.7.4


More information about the dev mailing list