[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 20/29] postcopy: postcopy_notify_shared_wake
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[Qemu-devel] [PATCH v3 20/29] postcopy: postcopy_notify_shared_wake |
Date: |
Fri, 16 Feb 2018 13:16:16 +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>
---
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 67deae7e1c..879711968c 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -824,6 +824,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 2e3dd844d5..2b71cf958e 100644
--- a/migration/postcopy-ram.h
+++ b/migration/postcopy-ram.h
@@ -146,6 +146,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;
@@ -153,6 +157,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;
};
@@ -162,6 +168,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
- [Qemu-devel] [PATCH v3 09/29] postcopy: Allow registering of fd handler, (continued)
- [Qemu-devel] [PATCH v3 09/29] postcopy: Allow registering of fd handler, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 10/29] vhost+postcopy: Register shared ufd with postcopy, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 11/29] vhost+postcopy: Transmit 'listen' to client, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 13/29] migration/ram: ramblock_recv_bitmap_test_byte_offset, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 12/29] postcopy+vhost-user: Split set_mem_table for postcopy, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 14/29] libvhost-user+postcopy: Register new regions with the ufd, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 15/29] vhost+postcopy: Send address back to qemu, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 16/29] vhost+postcopy: Stash RAMBlock and offset, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 17/29] vhost+postcopy: Send requests to source for shared pages, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 18/29] vhost+postcopy: Resolve client address, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 20/29] postcopy: postcopy_notify_shared_wake,
Dr. David Alan Gilbert (git) <=
- [Qemu-devel] [PATCH v3 21/29] vhost+postcopy: Add vhost waker, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 22/29] vhost+postcopy: Call wakeups, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 19/29] postcopy: wake shared, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 25/29] vhost+postcopy: Wire up POSTCOPY_END notify, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 26/29] vhost: Huge page align and merge, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 27/29] postcopy: Allow shared memory, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 28/29] libvhost-user: Claim support for postcopy, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 23/29] libvhost-user: mprotect & madvises for postcopy, Dr. David Alan Gilbert (git), 2018/02/16
- [Qemu-devel] [PATCH v3 24/29] vhost-user: Add VHOST_USER_POSTCOPY_END message, Dr. David Alan Gilbert (git), 2018/02/16