[dpdk-dev] [PATCH v2 14/17] vhost: add support to postcopy's end request

Ilya Maximets i.maximets at samsung.com
Tue Oct 2 16:18:41 CEST 2018


On 02.10.2018 12:36, Maxime Coquelin wrote:
> The master sends this message before stopping handling
> userfaults, so that the backend closes the userfaultfd.
> 
> The master waits for the slave to acknowledge the request
> with an empty 64bits payload for synchronization purpose.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert at redhat.com>
> Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
> ---
>  lib/librte_vhost/vhost_user.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
> index b207de6e0..ee7337ac8 100644
> --- a/lib/librte_vhost/vhost_user.c
> +++ b/lib/librte_vhost/vhost_user.c
> @@ -77,6 +77,7 @@ static const char *vhost_message_str[VHOST_USER_MAX] = {
>  	[VHOST_USER_CRYPTO_CLOSE_SESS] = "VHOST_USER_CRYPTO_CLOSE_SESS",
>  	[VHOST_USER_POSTCOPY_ADVISE]  = "VHOST_USER_POSTCOPY_ADVISE",
>  	[VHOST_USER_POSTCOPY_LISTEN]  = "VHOST_USER_POSTCOPY_LISTEN",
> +	[VHOST_USER_POSTCOPY_END]  = "VHOST_USER_POSTCOPY_END",
>  };
>  
>  /* The possible results of a message handling function */
> @@ -1640,6 +1641,25 @@ vhost_user_set_postcopy_listen(struct virtio_net **pdev,
>  	return VH_RESULT_OK;
>  }
>  
> +static int
> +vhost_user_postcopy_end(struct virtio_net **pdev, struct VhostUserMsg *msg,
> +			int main_fd __rte_unused)
> +{
> +	struct virtio_net *dev = *pdev;
> +
> +	dev->postcopy_listening = 0;
> +	if (dev->postcopy_ufd >= 0) {
> +		close(dev->postcopy_ufd);
> +		dev->postcopy_ufd = -1;
> +	}
> +
> +	msg->payload.u64 = 0;
> +	msg->size = sizeof(msg->payload.u64);
> +	msg->fd_num = 0;
> +
> +	return 0;

I think, it should return VH_RESULT_REPLY as the reply is
mandatory according to specification. In pair with change
in patch #1 this will not produce double replies.

> +}
> +
>  typedef int (*vhost_message_handler_t)(struct virtio_net **pdev,
>  					struct VhostUserMsg *msg,
>  					int main_fd);
> @@ -1669,6 +1689,7 @@ static vhost_message_handler_t vhost_message_handlers[VHOST_USER_MAX] = {
>  	[VHOST_USER_IOTLB_MSG] = vhost_user_iotlb_msg,
>  	[VHOST_USER_POSTCOPY_ADVISE] = vhost_user_set_postcopy_advise,
>  	[VHOST_USER_POSTCOPY_LISTEN] = vhost_user_set_postcopy_listen,
> +	[VHOST_USER_POSTCOPY_END] = vhost_user_postcopy_end,
>  };
>  
>  
> 


More information about the dev mailing list