[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 20/29] postcopy: postcopy_notify_shared_wake
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[Qemu-devel] [RFC 20/29] postcopy: postcopy_notify_shared_wake |
Date: |
Wed, 28 Jun 2017 20:00:38 +0100 |
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 072b355991..e6b8160f09 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -753,6 +753,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 d2b2f5f4aa..ecf731c689 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.13.0
- [Qemu-devel] [RFC 08/29] vhost-user: Add 'VHOST_USER_POSTCOPY_ADVISE' message, (continued)
- [Qemu-devel] [RFC 08/29] vhost-user: Add 'VHOST_USER_POSTCOPY_ADVISE' message, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 11/29] postcopy: Allow registering of fd handler, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 12/29] vhost+postcopy: Register shared ufd with postcopy, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 13/29] vhost+postcopy: Transmit 'listen' to client, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 14/29] vhost+postcopy: Register new regions with the ufd, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 15/29] vhost+postcopy: Send address back to qemu, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 16/29] vhost+postcopy: Stash RAMBlock and offset, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 17/29] vhost+postcopy: Send requests to source for shared pages, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 18/29] vhost+postcopy: Resolve client address, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 19/29] postcopy: wake shared, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 20/29] postcopy: postcopy_notify_shared_wake,
Dr. David Alan Gilbert (git) <=
- [Qemu-devel] [RFC 22/29] vhost+postcopy: Call wakeups, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 21/29] vhost+postcopy: Add vhost waker, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 23/29] vub+postcopy: madvises, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 24/29] vhost+postcopy: Lock around set_mem_table, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 25/29] vhu: enable = false on get_vring_base, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 26/29] vhost: Add VHOST_USER_POSTCOPY_END message, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 28/29] postcopy: Allow shared memory, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 27/29] vhost+postcopy: Wire up POSTCOPY_END notify, Dr. David Alan Gilbert (git), 2017/06/28
- [Qemu-devel] [RFC 29/29] vhost-user: Claim support for postcopy, Dr. David Alan Gilbert (git), 2017/06/28
- Re: [Qemu-devel] [RFC 00/29] postcopy+vhost-user/shared ram, Dr. David Alan Gilbert, 2017/06/29