On 11/01/21 08:34, Keqian Zhu wrote:
+static void vfio_listener_log_start(MemoryListener *listener,
+ MemoryRegionSection *section,
+ int old, int new)
+{
+ VFIOContainer *container = container_of(listener, VFIOContainer, listener);
+
+ vfio_set_dirty_page_tracking(container, true);
+}
+
+static void vfio_listener_log_stop(MemoryListener *listener,
+ MemoryRegionSection *section,
+ int old, int new)
+{
+ VFIOContainer *container = container_of(listener, VFIOContainer, listener);
+
+ vfio_set_dirty_page_tracking(container, false);
+}
+
This would enable dirty page tracking also just for having a framebuffer
(DIRTY_MEMORY_VGA). Technically it would be correct, but it would also
be more heavyweight than expected.
In order to only cover live migration, you can use the log_global_start
and log_global_stop callbacks instead.
If you want to use log_start and log_stop, you need to add respectively
if (old != 0) {
return;
}
and
if (new != 0) {
return;
}
before the calls to vfio_set_dirty_page_tracking. But I think it's more
appropriate for VFIO to use log_global_*.
Thanks,
Paolo