[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v2 11/32] vhub: Open userfaultfd
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [RFC v2 11/32] vhub: Open userfaultfd |
Date: |
Wed, 30 Aug 2017 03:30:00 -0700 |
I would rather use libvhost-user: message prefix (same for similar
libvhost-user patches)
On Thu, Aug 24, 2017 at 12:27 PM, Dr. David Alan Gilbert (git)
<address@hidden> wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
>
> Open a userfaultfd (on a postcopy_advise) and send it back in
> the reply to the qemu for it to monitor.
>
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> ---
> contrib/libvhost-user/libvhost-user.c | 26 +++++++++++++++++++++++---
> contrib/libvhost-user/libvhost-user.h | 3 +++
> 2 files changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/contrib/libvhost-user/libvhost-user.c
> b/contrib/libvhost-user/libvhost-user.c
> index 47884c0a15..f9b5b12b28 100644
> --- a/contrib/libvhost-user/libvhost-user.c
> +++ b/contrib/libvhost-user/libvhost-user.c
> @@ -15,6 +15,7 @@
>
> #include <qemu/osdep.h>
> #include <sys/eventfd.h>
> +#include <sys/syscall.h>
> #include <linux/vhost.h>
>
> #include "qemu/atomic.h"
> @@ -773,11 +774,30 @@ vu_set_vring_enable_exec(VuDev *dev, VhostUserMsg *vmsg)
> static bool
> vu_set_postcopy_advise(VuDev *dev, VhostUserMsg *vmsg)
> {
> - /* TODO: Open ufd, pass it back in the request
> - * TODO: Add addresses
> - */
> + struct uffdio_api api_struct;
> +
> + dev->postcopy_ufd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK);
This will likely fail to compile on !Linux, could you add some
appropriate #ifdef?
> + /* TODO: Add addresses */
> vmsg->payload.u64 = 0xcafe;
> vmsg->size = sizeof(vmsg->payload.u64);
> +
> + if (dev->postcopy_ufd == -1) {
> + vu_panic(dev, "Userfaultfd not available: %s", strerror(errno));
> + goto out;
> + }
> + api_struct.api = UFFD_API;
> + api_struct.features = 0;
> + if (ioctl(dev->postcopy_ufd, UFFDIO_API, &api_struct)) {
> + vu_panic(dev, "Failed UFFDIO_API: %s", strerror(errno));
> + close(dev->postcopy_ufd);
> + dev->postcopy_ufd = -1;
> + goto out;
> + }
> + /* TODO: Stash feature flags somewhere */
> +out:
> + /* Return a ufd to the QEMU */
> + vmsg->fd_num = 1;
> + vmsg->fds[0] = dev->postcopy_ufd;
> return true; /* = send a reply */
> }
>
> diff --git a/contrib/libvhost-user/libvhost-user.h
> b/contrib/libvhost-user/libvhost-user.h
> index 3987ce643d..3e8efdd919 100644
> --- a/contrib/libvhost-user/libvhost-user.h
> +++ b/contrib/libvhost-user/libvhost-user.h
> @@ -234,6 +234,9 @@ struct VuDev {
> * re-initialize */
> vu_panic_cb panic;
> const VuDevIface *iface;
> +
> + /* Postcopy data */
> + int postcopy_ufd;
> };
>
> typedef struct VuVirtqElement {
> --
> 2.13.5
>
>
--
Marc-André Lureau
- [Qemu-devel] [RFC v2 07/32] postcopy: Add notifier chain, (continued)
- [Qemu-devel] [RFC v2 07/32] postcopy: Add notifier chain, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 08/32] postcopy: Add vhost-user flag for postcopy and check it, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 09/32] vhost-user: Add 'VHOST_USER_POSTCOPY_ADVISE' message, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 10/32] vhub: Support sending fds back to qemu, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 11/32] vhub: Open userfaultfd, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 12/32] postcopy: Allow registering of fd handler, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 13/32] vhost+postcopy: Register shared ufd with postcopy, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 14/32] vhost+postcopy: Transmit 'listen' to client, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 15/32] vhost+postcopy: Register new regions with the ufd, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 16/32] vhost+postcopy: Send address back to qemu, Dr. David Alan Gilbert (git), 2017/08/24
- [Qemu-devel] [RFC v2 17/32] vhost+postcopy: Stash RAMBlock and offset, Dr. David Alan Gilbert (git), 2017/08/24