From: Yan Zhao <yan.y.zhao@intel.com> To: alex.williamson@redhat.com, qemu-devel@nongnu.org Cc: cjia@nvidia.com, kvm@vger.kernel.org, aik@ozlabs.ru, Zhengxiao.zx@Alibaba-inc.com, shuangtai.tst@alibaba-inc.com, kwankhede@nvidia.com, eauger@redhat.com, yi.l.liu@intel.com, eskultet@redhat.com, ziye.yang@intel.com, mlevitsk@redhat.com, pasic@linux.ibm.com, arei.gonglei@huawei.com, felipe@nutanix.com, Ken.Xue@amd.com, kevin.tian@intel.com, Yan Zhao <yan.y.zhao@intel.com>, dgilbert@redhat.com, intel-gvt-dev@lists.freedesktop.org, changpeng.liu@intel.com, cohuck@redhat.com, zhi.a.wang@intel.com, jonathan.davies@nutanix.com Subject: [PATCH 3/5] vfio/migration: tracking of dirty page in system memory Date: Tue, 19 Feb 2019 16:52:41 +0800 [thread overview] Message-ID: <1550566361-3697-1-git-send-email-yan.y.zhao@intel.com> (raw) In-Reply-To: <1550566254-3545-1-git-send-email-yan.y.zhao@intel.com> register the log_sync interface to hook into ram's live migration callbacks. ram_save_pending |->migration_bitmap_sync |->memory_global_dirty_log_sync |->memory_region_sync_dirty_bitmap |->listener->log_sync(listener, &mrs); So, the dirty page produced by vfio device in system memory will be save/load by ram's live migration code iteratively. Bitmap of device's dirty page in system memory is retrieved from Dirty Bitmap Region Signed-off-by: Yan Zhao <yan.y.zhao@intel.com> Signed-off-by: Yulei Zhang <yulei.zhang@intel.com> --- hw/vfio/common.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 7c185e5a..719e750 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -27,6 +27,7 @@ #include "hw/vfio/vfio-common.h" #include "hw/vfio/vfio.h" +#include "hw/vfio/pci.h" #include "exec/address-spaces.h" #include "exec/memory.h" #include "hw/hw.h" @@ -698,9 +699,34 @@ static void vfio_listener_region_del(MemoryListener *listener, } } +static void vfio_log_sync(MemoryListener *listener, + MemoryRegionSection *section) +{ + VFIOContainer *container = container_of(listener, VFIOContainer, listener); + VFIOGroup *group = QLIST_FIRST(&container->group_list); + VFIODevice *vbasedev; + VFIOPCIDevice *vdev; + + ram_addr_t size = int128_get64(section->size); + uint64_t page_nr = size >> TARGET_PAGE_BITS; + uint64_t start_addr = section->offset_within_address_space; + + QLIST_FOREACH(vbasedev, &group->device_list, next) { + vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev); + if (!vdev->migration || + !vfio_device_data_cap_system_memory(vdev) || + !(vdev->migration->device_state & VFIO_DEVICE_STATE_LOGGING)) { + continue; + } + + vfio_set_dirty_page_bitmap(vdev, start_addr, page_nr); + } +} + static const MemoryListener vfio_memory_listener = { .region_add = vfio_listener_region_add, .region_del = vfio_listener_region_del, + .log_sync = vfio_log_sync, }; static void vfio_listener_release(VFIOContainer *container) -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Yan Zhao <yan.y.zhao@intel.com> To: alex.williamson@redhat.com, qemu-devel@nongnu.org Cc: intel-gvt-dev@lists.freedesktop.org, Zhengxiao.zx@Alibaba-inc.com, yi.l.liu@intel.com, eskultet@redhat.com, ziye.yang@intel.com, cohuck@redhat.com, shuangtai.tst@alibaba-inc.com, dgilbert@redhat.com, zhi.a.wang@intel.com, mlevitsk@redhat.com, pasic@linux.ibm.com, aik@ozlabs.ru, eauger@redhat.com, felipe@nutanix.com, jonathan.davies@nutanix.com, changpeng.liu@intel.com, Ken.Xue@amd.com, kwankhede@nvidia.com, kevin.tian@intel.com, cjia@nvidia.com, arei.gonglei@huawei.com, kvm@vger.kernel.org, Yan Zhao <yan.y.zhao@intel.com> Subject: [Qemu-devel] [PATCH 3/5] vfio/migration: tracking of dirty page in system memory Date: Tue, 19 Feb 2019 16:52:41 +0800 [thread overview] Message-ID: <1550566361-3697-1-git-send-email-yan.y.zhao@intel.com> (raw) In-Reply-To: <1550566254-3545-1-git-send-email-yan.y.zhao@intel.com> register the log_sync interface to hook into ram's live migration callbacks. ram_save_pending |->migration_bitmap_sync |->memory_global_dirty_log_sync |->memory_region_sync_dirty_bitmap |->listener->log_sync(listener, &mrs); So, the dirty page produced by vfio device in system memory will be save/load by ram's live migration code iteratively. Bitmap of device's dirty page in system memory is retrieved from Dirty Bitmap Region Signed-off-by: Yan Zhao <yan.y.zhao@intel.com> Signed-off-by: Yulei Zhang <yulei.zhang@intel.com> --- hw/vfio/common.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 7c185e5a..719e750 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -27,6 +27,7 @@ #include "hw/vfio/vfio-common.h" #include "hw/vfio/vfio.h" +#include "hw/vfio/pci.h" #include "exec/address-spaces.h" #include "exec/memory.h" #include "hw/hw.h" @@ -698,9 +699,34 @@ static void vfio_listener_region_del(MemoryListener *listener, } } +static void vfio_log_sync(MemoryListener *listener, + MemoryRegionSection *section) +{ + VFIOContainer *container = container_of(listener, VFIOContainer, listener); + VFIOGroup *group = QLIST_FIRST(&container->group_list); + VFIODevice *vbasedev; + VFIOPCIDevice *vdev; + + ram_addr_t size = int128_get64(section->size); + uint64_t page_nr = size >> TARGET_PAGE_BITS; + uint64_t start_addr = section->offset_within_address_space; + + QLIST_FOREACH(vbasedev, &group->device_list, next) { + vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev); + if (!vdev->migration || + !vfio_device_data_cap_system_memory(vdev) || + !(vdev->migration->device_state & VFIO_DEVICE_STATE_LOGGING)) { + continue; + } + + vfio_set_dirty_page_bitmap(vdev, start_addr, page_nr); + } +} + static const MemoryListener vfio_memory_listener = { .region_add = vfio_listener_region_add, .region_del = vfio_listener_region_del, + .log_sync = vfio_log_sync, }; static void vfio_listener_release(VFIOContainer *container) -- 2.7.4
next prev parent reply other threads:[~2019-02-19 8:52 UTC|newest] Thread overview: 133+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-19 8:50 [PATCH 0/5] QEMU VFIO live migration Yan Zhao 2019-02-19 8:50 ` [Qemu-devel] " Yan Zhao 2019-02-19 8:52 ` [PATCH 1/5] vfio/migration: define kernel interfaces Yan Zhao 2019-02-19 8:52 ` [Qemu-devel] " Yan Zhao 2019-02-19 13:09 ` Cornelia Huck 2019-02-19 13:09 ` [Qemu-devel] " Cornelia Huck 2019-02-20 7:36 ` Zhao Yan 2019-02-20 7:36 ` [Qemu-devel] " Zhao Yan 2019-02-20 17:08 ` Cornelia Huck 2019-02-20 17:08 ` [Qemu-devel] " Cornelia Huck 2019-02-21 1:47 ` Zhao Yan 2019-02-21 1:47 ` [Qemu-devel] " Zhao Yan 2019-02-19 8:52 ` [PATCH 2/5] vfio/migration: support device of device config capability Yan Zhao 2019-02-19 8:52 ` [Qemu-devel] " Yan Zhao 2019-02-19 11:01 ` Dr. David Alan Gilbert 2019-02-19 11:01 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-02-20 5:12 ` Zhao Yan 2019-02-20 5:12 ` [Qemu-devel] " Zhao Yan 2019-02-20 10:57 ` Dr. David Alan Gilbert 2019-02-20 10:57 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-02-19 14:37 ` Cornelia Huck 2019-02-19 14:37 ` [Qemu-devel] " Cornelia Huck 2019-02-20 22:54 ` Zhao Yan 2019-02-20 22:54 ` [Qemu-devel] " Zhao Yan 2019-02-21 10:56 ` Cornelia Huck 2019-02-21 10:56 ` [Qemu-devel] " Cornelia Huck 2019-02-19 8:52 ` Yan Zhao [this message] 2019-02-19 8:52 ` [Qemu-devel] [PATCH 3/5] vfio/migration: tracking of dirty page in system memory Yan Zhao 2019-02-19 8:52 ` [PATCH 4/5] vfio/migration: turn on migration Yan Zhao 2019-02-19 8:52 ` [Qemu-devel] " Yan Zhao 2019-02-19 8:53 ` [PATCH 5/5] vfio/migration: support device memory capability Yan Zhao 2019-02-19 8:53 ` [Qemu-devel] " Yan Zhao 2019-02-19 11:25 ` Dr. David Alan Gilbert 2019-02-19 11:25 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-02-20 5:17 ` Zhao Yan 2019-02-20 5:17 ` [Qemu-devel] " Zhao Yan 2019-02-19 14:42 ` Christophe de Dinechin 2019-02-19 14:42 ` [Qemu-devel] " Christophe de Dinechin 2019-02-20 7:58 ` Zhao Yan 2019-02-20 7:58 ` [Qemu-devel] " Zhao Yan 2019-02-20 10:14 ` Christophe de Dinechin 2019-02-20 10:14 ` [Qemu-devel] " Christophe de Dinechin 2019-02-21 0:07 ` Zhao Yan 2019-02-21 0:07 ` [Qemu-devel] " Zhao Yan 2019-02-19 11:32 ` [PATCH 0/5] QEMU VFIO live migration Dr. David Alan Gilbert 2019-02-19 11:32 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-02-20 5:28 ` Zhao Yan 2019-02-20 5:28 ` [Qemu-devel] " Zhao Yan 2019-02-20 11:01 ` Dr. David Alan Gilbert 2019-02-20 11:01 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-02-20 11:28 ` Gonglei (Arei) 2019-02-20 11:28 ` [Qemu-devel] " Gonglei (Arei) 2019-02-20 11:42 ` Cornelia Huck 2019-02-20 11:42 ` [Qemu-devel] " Cornelia Huck 2019-02-20 12:07 ` Gonglei (Arei) 2019-02-20 12:07 ` [Qemu-devel] " Gonglei (Arei) 2019-03-27 6:35 ` Zhao Yan 2019-03-27 20:18 ` Dr. David Alan Gilbert 2019-03-27 22:10 ` Alex Williamson 2019-03-28 8:36 ` Zhao Yan 2019-03-28 9:21 ` Erik Skultety 2019-03-28 16:04 ` Alex Williamson 2019-03-29 2:47 ` Zhao Yan 2019-03-29 14:26 ` Alex Williamson 2019-03-29 23:10 ` Zhao Yan 2019-03-30 14:14 ` Alex Williamson 2019-04-01 2:17 ` Zhao Yan 2019-04-01 8:14 ` Cornelia Huck 2019-04-01 8:14 ` [Qemu-devel] " Cornelia Huck 2019-04-01 8:40 ` Yan Zhao 2019-04-01 8:40 ` [Qemu-devel] " Yan Zhao 2019-04-01 14:15 ` Alex Williamson 2019-04-01 14:15 ` [Qemu-devel] " Alex Williamson 2019-02-21 0:31 ` Zhao Yan 2019-02-21 0:31 ` [Qemu-devel] " Zhao Yan 2019-02-21 9:15 ` Dr. David Alan Gilbert 2019-02-21 9:15 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-02-20 11:56 ` Gonglei (Arei) 2019-02-20 11:56 ` [Qemu-devel] " Gonglei (Arei) 2019-02-21 0:24 ` Zhao Yan 2019-02-21 0:24 ` [Qemu-devel] " Zhao Yan 2019-02-21 1:35 ` Gonglei (Arei) 2019-02-21 1:35 ` [Qemu-devel] " Gonglei (Arei) 2019-02-21 1:58 ` Zhao Yan 2019-02-21 1:58 ` [Qemu-devel] " Zhao Yan 2019-02-21 3:33 ` Gonglei (Arei) 2019-02-21 3:33 ` [Qemu-devel] " Gonglei (Arei) 2019-02-21 4:08 ` Zhao Yan 2019-02-21 4:08 ` [Qemu-devel] " Zhao Yan 2019-02-21 5:46 ` Gonglei (Arei) 2019-02-21 5:46 ` [Qemu-devel] " Gonglei (Arei) 2019-02-21 2:04 ` Zhao Yan 2019-02-21 2:04 ` [Qemu-devel] " Zhao Yan 2019-02-21 3:16 ` Gonglei (Arei) 2019-02-21 3:16 ` [Qemu-devel] " Gonglei (Arei) 2019-02-21 4:21 ` Zhao Yan 2019-02-21 4:21 ` [Qemu-devel] " Zhao Yan 2019-02-21 5:56 ` Gonglei (Arei) 2019-02-21 5:56 ` [Qemu-devel] " Gonglei (Arei) 2019-02-21 20:40 ` Alex Williamson 2019-02-21 20:40 ` [Qemu-devel] " Alex Williamson 2019-02-25 2:22 ` Zhao Yan 2019-02-25 2:22 ` [Qemu-devel] " Zhao Yan 2019-03-06 0:22 ` Zhao Yan 2019-03-06 0:22 ` [Qemu-devel] " Zhao Yan 2019-03-07 17:44 ` Alex Williamson 2019-03-07 17:44 ` [Qemu-devel] " Alex Williamson 2019-03-07 23:20 ` Tian, Kevin 2019-03-07 23:20 ` [Qemu-devel] " Tian, Kevin 2019-03-08 16:11 ` Alex Williamson 2019-03-08 16:11 ` [Qemu-devel] " Alex Williamson 2019-03-08 16:21 ` Dr. David Alan Gilbert 2019-03-08 16:21 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-03-08 22:02 ` Alex Williamson 2019-03-08 22:02 ` [Qemu-devel] " Alex Williamson 2019-03-11 2:33 ` Tian, Kevin 2019-03-11 2:33 ` [Qemu-devel] " Tian, Kevin 2019-03-11 20:19 ` Alex Williamson 2019-03-11 20:19 ` [Qemu-devel] " Alex Williamson 2019-03-12 2:48 ` Tian, Kevin 2019-03-12 2:48 ` [Qemu-devel] " Tian, Kevin 2019-03-13 19:57 ` Alex Williamson 2019-03-12 2:57 ` Zhao Yan 2019-03-12 2:57 ` [Qemu-devel] " Zhao Yan 2019-03-13 1:13 ` Zhao Yan 2019-03-13 19:14 ` Alex Williamson 2019-03-14 1:12 ` Zhao Yan 2019-03-14 22:44 ` Alex Williamson 2019-03-14 23:05 ` Zhao Yan 2019-03-15 2:24 ` Alex Williamson 2019-03-18 2:51 ` Zhao Yan 2019-03-18 3:09 ` Alex Williamson 2019-03-18 3:27 ` Zhao Yan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1550566361-3697-1-git-send-email-yan.y.zhao@intel.com \ --to=yan.y.zhao@intel.com \ --cc=Ken.Xue@amd.com \ --cc=Zhengxiao.zx@Alibaba-inc.com \ --cc=aik@ozlabs.ru \ --cc=alex.williamson@redhat.com \ --cc=arei.gonglei@huawei.com \ --cc=changpeng.liu@intel.com \ --cc=cjia@nvidia.com \ --cc=cohuck@redhat.com \ --cc=dgilbert@redhat.com \ --cc=eauger@redhat.com \ --cc=eskultet@redhat.com \ --cc=felipe@nutanix.com \ --cc=intel-gvt-dev@lists.freedesktop.org \ --cc=jonathan.davies@nutanix.com \ --cc=kevin.tian@intel.com \ --cc=kvm@vger.kernel.org \ --cc=kwankhede@nvidia.com \ --cc=mlevitsk@redhat.com \ --cc=pasic@linux.ibm.com \ --cc=qemu-devel@nongnu.org \ --cc=shuangtai.tst@alibaba-inc.com \ --cc=yi.l.liu@intel.com \ --cc=zhi.a.wang@intel.com \ --cc=ziye.yang@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.