[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 26/29] vhost: Add VHOST_USER_POSTCOPY_END message
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[Qemu-devel] [RFC 26/29] vhost: Add VHOST_USER_POSTCOPY_END message |
Date: |
Wed, 28 Jun 2017 20:00:44 +0100 |
From: "Dr. David Alan Gilbert" <address@hidden>
This message is sent just before the end of postcopy to get the
client to stop using userfault since we wont respond to any more
requests. It should close userfaultfd so that any other pages
get mapped to the backing file automatically by the kernel, since
at this point we know we've received everything.
Signed-off-by: Dr. David Alan Gilbert <address@hidden>
---
contrib/libvhost-user/libvhost-user.c | 23 +++++++++++++++++++++++
contrib/libvhost-user/libvhost-user.h | 1 +
hw/virtio/vhost-user.c | 1 +
3 files changed, 25 insertions(+)
diff --git a/contrib/libvhost-user/libvhost-user.c
b/contrib/libvhost-user/libvhost-user.c
index d37052b7b0..c1716d1a62 100644
--- a/contrib/libvhost-user/libvhost-user.c
+++ b/contrib/libvhost-user/libvhost-user.c
@@ -68,6 +68,7 @@ vu_request_to_string(int req)
REQ(VHOST_USER_INPUT_GET_CONFIG),
REQ(VHOST_USER_POSTCOPY_ADVISE),
REQ(VHOST_USER_POSTCOPY_LISTEN),
+ REQ(VHOST_USER_POSTCOPY_END),
REQ(VHOST_USER_MAX),
};
#undef REQ
@@ -889,6 +890,26 @@ vu_set_postcopy_listen(VuDev *dev, VhostUserMsg *vmsg)
return false;
}
+
+static bool
+vu_set_postcopy_end(VuDev *dev, VhostUserMsg *vmsg)
+{
+ fprintf(stderr, "%s: Entry\n", __func__);
+ dev->postcopy_listening = false;
+ if (dev->postcopy_ufd > 0) {
+ close(dev->postcopy_ufd);
+ dev->postcopy_ufd = -1;
+ fprintf(stderr, "%s: Done close\n", __func__);
+ }
+
+ vmsg->fd_num = 0;
+ vmsg->payload.u64 = 0;
+ vmsg->size = sizeof(vmsg->payload.u64);
+ vmsg->flags = VHOST_USER_VERSION | VHOST_USER_REPLY_MASK;
+ fprintf(stderr, "%s: exit\n", __func__);
+ return true;
+}
+
static bool
vu_process_message(VuDev *dev, VhostUserMsg *vmsg)
{
@@ -956,6 +977,8 @@ vu_process_message(VuDev *dev, VhostUserMsg *vmsg)
return vu_set_postcopy_advise(dev, vmsg);
case VHOST_USER_POSTCOPY_LISTEN:
return vu_set_postcopy_listen(dev, vmsg);
+ case VHOST_USER_POSTCOPY_END:
+ return vu_set_postcopy_end(dev, vmsg);
default:
vmsg_close_fds(vmsg);
vu_panic(dev, "Unhandled request: %d", vmsg->request);
diff --git a/contrib/libvhost-user/libvhost-user.h
b/contrib/libvhost-user/libvhost-user.h
index 86e1934ddb..1665c729f0 100644
--- a/contrib/libvhost-user/libvhost-user.h
+++ b/contrib/libvhost-user/libvhost-user.h
@@ -65,6 +65,7 @@ typedef enum VhostUserRequest {
VHOST_USER_INPUT_GET_CONFIG = 20,
VHOST_USER_POSTCOPY_ADVISE = 23,
VHOST_USER_POSTCOPY_LISTEN = 24,
+ VHOST_USER_POSTCOPY_END = 25,
VHOST_USER_MAX
} VhostUserRequest;
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index 74e4313782..b29a141703 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -69,6 +69,7 @@ typedef enum VhostUserRequest {
VHOST_USER_IOTLB_MSG = 22,
VHOST_USER_POSTCOPY_ADVISE = 23,
VHOST_USER_POSTCOPY_LISTEN = 24,
+ VHOST_USER_POSTCOPY_END = 25,
VHOST_USER_MAX
} VhostUserRequest;
--
2.13.0
- [Qemu-devel] [RFC 16/29] vhost+postcopy: Stash RAMBlock and offset, (continued)
- [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), 2017/06/28
- [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) <=
- [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