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 <dgilb...@redhat.com> > Signed-off-by: Maxime Coquelin <maxime.coque...@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, > }; > > >