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


Reply via email to