[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 20/29] postcopy: postcopy_notify_shared_wake
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[Qemu-devel] [PATCH v5 20/29] postcopy: postcopy_notify_shared_wake |
Date: |
Mon, 12 Mar 2018 17:21:15 +0000 |
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 fcd53b8295..2c73d77a5c 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);
/* postcopy_wake_shared: Notify a client ufd that a page is available
*
* Returns 0 on success
--
2.14.3
- Re: [Qemu-devel] [PATCH v5 09/29] postcopy: Allow registering of fd handler, (continued)
- [Qemu-devel] [PATCH v5 11/29] vhost+postcopy: Transmit 'listen' to slave, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 12/29] postcopy+vhost-user: Split set_mem_table for postcopy, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 13/29] migration/ram: ramblock_recv_bitmap_test_byte_offset, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 14/29] libvhost-user+postcopy: Register new regions with the ufd, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 15/29] vhost+postcopy: Send address back to qemu, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 18/29] vhost+postcopy: Resolve client address, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 16/29] vhost+postcopy: Stash RAMBlock and offset, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 17/29] vhost+postcopy: Helper to send requests to source for shared pages, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 19/29] postcopy: helper for waking shared, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 20/29] postcopy: postcopy_notify_shared_wake,
Dr. David Alan Gilbert (git) <=
- [Qemu-devel] [PATCH v5 22/29] vhost+postcopy: Call wakeups, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 21/29] vhost+postcopy: Add vhost waker, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 23/29] libvhost-user: mprotect & madvises for postcopy, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 24/29] vhost-user: Add VHOST_USER_POSTCOPY_END message, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 25/29] vhost+postcopy: Wire up POSTCOPY_END notify, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 28/29] libvhost-user: Claim support for postcopy, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 27/29] postcopy: Allow shared memory, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 29/29] postcopy shared docs, Dr. David Alan Gilbert (git), 2018/03/12
- [Qemu-devel] [PATCH v5 26/29] vhost: Huge page align and merge, Dr. David Alan Gilbert (git), 2018/03/12
- Re: [Qemu-devel] [PATCH v5 00/29] postcopy+vhost-user/shared ram, Michael S. Tsirkin, 2018/03/13