Hi
Use "libvhost-user: ", so we don't confuse with qemu own vhost-user code.
On Thu, Aug 24, 2017 at 12:27 PM, Dr. David Alan Gilbert (git)
<dgilbert@redhat.com> wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> Tell QEMU we understand the protocol features needed for postcopy.
>
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> contrib/libvhost-user/libvhost-user.c | 33 +++++++++++++++++++++++++++++++++
> 1 file changed, 33 insertions(+)
>
> diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c
> index 23bff47649..290748733b 100644
> --- a/contrib/libvhost-user/libvhost-user.c
> +++ b/contrib/libvhost-user/libvhost-user.c
> @@ -144,6 +144,35 @@ vmsg_close_fds(VhostUserMsg *vmsg)
> }
> }
>
> +/* A test to see if we have userfault available */
> +static bool
> +have_userfault(void)
> +{
> +#if defined(__linux__) && defined(__NR_userfaultfd) &&\
> + defined(UFFD_FEATURE_MISSING_SHMEM) &&\
> + defined(UFFD_FEATURE_MISSING_HUGETLBFS)
> + /* Now test the kernel we're running on really has the features */
> + int ufd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK);
> + struct uffdio_api api_struct;
> + if (ufd < 0) {
> + return false;
> + }
> +
> + api_struct.api = UFFD_API;
> + api_struct.features = UFFD_FEATURE_MISSING_SHMEM |
> + UFFD_FEATURE_MISSING_HUGETLBFS;
> + if (ioctl(ufd, UFFDIO_API, &api_struct)) {
> + close(ufd);
> + return false;
> + }
> + close(ufd);
> + return true;
> +
> +#else
> + return false;
> +#endif
> +}
> +
> static bool
> vu_message_read(VuDev *dev, int conn_fd, VhostUserMsg *vmsg)
> {
> @@ -796,6 +825,10 @@ vu_get_protocol_features_exec(VuDev *dev, VhostUserMsg *vmsg)
> {
> uint64_t features = 1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD;
>
> + if (have_userfault()) {
> + features |= 1ULL << VHOST_USER_PROTOCOL_F_PAGEFAULT;
> + }
> +
> if (dev->iface->get_protocol_features) {
> features |= dev->iface->get_protocol_features(dev);
> }
> --
> 2.13.5
>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
--
Marc-André Lureau