[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 20/29] postcopy: postcopy_notify_shared_wake
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH v4 20/29] postcopy: postcopy_notify_shared_wake |
Date: |
Mon, 12 Mar 2018 16:45:48 +0100 |
On Thu, Mar 8, 2018 at 8:58 PM, Dr. David Alan Gilbert (git)
<address@hidden> wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
>
> Add a hook to allow a client userfaultfd to be 'woken'
> when a page arrives, and a walker that calls that
> hook for relevant clients given a RAMBlock and offset.
>
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> Reviewed-by: Peter Xu <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
> ---
> migration/postcopy-ram.c | 16 ++++++++++++++++
> migration/postcopy-ram.h | 10 ++++++++++
> 2 files changed, 26 insertions(+)
>
> diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
> index d3e7f10c5a..585db9467a 100644
> --- a/migration/postcopy-ram.c
> +++ b/migration/postcopy-ram.c
> @@ -827,6 +827,22 @@ static int qemu_ufd_copy_ioctl(int userfault_fd, void
> *host_addr,
> return ret;
> }
>
> +int postcopy_notify_shared_wake(RAMBlock *rb, uint64_t offset)
> +{
> + int i;
> + MigrationIncomingState *mis = migration_incoming_get_current();
> + GArray *pcrfds = mis->postcopy_remote_fds;
> +
> + for (i = 0; i < pcrfds->len; i++) {
> + struct PostCopyFD *cur = &g_array_index(pcrfds, struct PostCopyFD,
> i);
> + int ret = cur->waker(cur, rb, offset);
> + if (ret) {
> + return ret;
> + }
> + }
> + return 0;
> +}
> +
> /*
> * Place a host page (from) at (host) atomically
> * returns 0 on success
> diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h
> index f02fa36127..fef7448e4b 100644
> --- a/migration/postcopy-ram.h
> +++ b/migration/postcopy-ram.h
> @@ -148,6 +148,10 @@ struct PostCopyFD;
>
> /* ufd is a pointer to the struct uffd_msg *TODO: more Portable! */
> typedef int (*pcfdhandler)(struct PostCopyFD *pcfd, void *ufd);
> +/* Notification to wake, either on place or on reception of
> + * a fault on something that's already arrived (race)
> + */
> +typedef int (*pcfdwake)(struct PostCopyFD *pcfd, RAMBlock *rb, uint64_t
> offset);
>
> struct PostCopyFD {
> int fd;
> @@ -155,6 +159,8 @@ struct PostCopyFD {
> void *data;
> /* Handler to be called whenever we get a poll event */
> pcfdhandler handler;
> + /* Notification to wake shared client */
> + pcfdwake waker;
> /* A string to use in error messages */
> const char *idstr;
> };
> @@ -164,6 +170,10 @@ struct PostCopyFD {
> */
> void postcopy_register_shared_ufd(struct PostCopyFD *pcfd);
> void postcopy_unregister_shared_ufd(struct PostCopyFD *pcfd);
> +/* Call each of the shared 'waker's registerd telling them of
> + * availability of a block.
> + */
> +int postcopy_notify_shared_wake(RAMBlock *rb, uint64_t offset);
> /* Notify a client ufd that a page is available
> * Note: The 'client_address' is in the address space of the client
> * program not QEMU
> --
> 2.14.3
>
>
--
Marc-André Lureau
- [Qemu-devel] [PATCH v4 15/29] vhost+postcopy: Send address back to qemu, (continued)
- [Qemu-devel] [PATCH v4 15/29] vhost+postcopy: Send address back to qemu, Dr. David Alan Gilbert (git), 2018/03/08
- [Qemu-devel] [PATCH v4 16/29] vhost+postcopy: Stash RAMBlock and offset, Dr. David Alan Gilbert (git), 2018/03/08
- [Qemu-devel] [PATCH v4 17/29] vhost+postcopy: Send requests to source for shared pages, Dr. David Alan Gilbert (git), 2018/03/08
- [Qemu-devel] [PATCH v4 18/29] vhost+postcopy: Resolve client address, Dr. David Alan Gilbert (git), 2018/03/08
- [Qemu-devel] [PATCH v4 20/29] postcopy: postcopy_notify_shared_wake, Dr. David Alan Gilbert (git), 2018/03/08
- Re: [Qemu-devel] [PATCH v4 20/29] postcopy: postcopy_notify_shared_wake,
Marc-André Lureau <=
- [Qemu-devel] [PATCH v4 19/29] postcopy: helper for waking shared, Dr. David Alan Gilbert (git), 2018/03/08
- [Qemu-devel] [PATCH v4 22/29] vhost+postcopy: Call wakeups, Dr. David Alan Gilbert (git), 2018/03/08
- [Qemu-devel] [PATCH v4 21/29] vhost+postcopy: Add vhost waker, Dr. David Alan Gilbert (git), 2018/03/08
- [Qemu-devel] [PATCH v4 23/29] libvhost-user: mprotect & madvises for postcopy, Dr. David Alan Gilbert (git), 2018/03/08
- [Qemu-devel] [PATCH v4 24/29] vhost-user: Add VHOST_USER_POSTCOPY_END message, Dr. David Alan Gilbert (git), 2018/03/08