[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 1/7] vfio/container: Add dirty tracking started flag
From: |
Avihai Horon |
Subject: |
[PATCH v2 1/7] vfio/container: Add dirty tracking started flag |
Date: |
Wed, 18 Dec 2024 15:40:16 +0200 |
Add a flag to VFIOContainerBase that indicates whether dirty tracking
has been started for the container or not.
This will be used in the following patches to allow dirty page syncs
only if dirty tracking has been started.
Signed-off-by: Avihai Horon <avihaih@nvidia.com>
Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
---
include/hw/vfio/vfio-container-base.h | 1 +
hw/vfio/container-base.c | 12 +++++++++++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/include/hw/vfio/vfio-container-base.h
b/include/hw/vfio/vfio-container-base.h
index 62a8b60d87..4cff9943ab 100644
--- a/include/hw/vfio/vfio-container-base.h
+++ b/include/hw/vfio/vfio-container-base.h
@@ -44,6 +44,7 @@ typedef struct VFIOContainerBase {
unsigned long pgsizes;
unsigned int dma_max_mappings;
bool dirty_pages_supported;
+ bool dirty_pages_started; /* Protected by BQL */
QLIST_HEAD(, VFIOGuestIOMMU) giommu_list;
QLIST_HEAD(, VFIORamDiscardListener) vrdl_list;
QLIST_ENTRY(VFIOContainerBase) next;
diff --git a/hw/vfio/container-base.c b/hw/vfio/container-base.c
index 6f86c37d97..749a3fd29d 100644
--- a/hw/vfio/container-base.c
+++ b/hw/vfio/container-base.c
@@ -64,13 +64,23 @@ int
vfio_container_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
bool start, Error **errp)
{
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
+ int ret;
if (!bcontainer->dirty_pages_supported) {
return 0;
}
g_assert(vioc->set_dirty_page_tracking);
- return vioc->set_dirty_page_tracking(bcontainer, start, errp);
+ if (bcontainer->dirty_pages_started == start) {
+ return 0;
+ }
+
+ ret = vioc->set_dirty_page_tracking(bcontainer, start, errp);
+ if (!ret) {
+ bcontainer->dirty_pages_started = start;
+ }
+
+ return ret;
}
int vfio_container_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
--
2.40.1
- [PATCH v2 0/7] migration: Drop/unexport migration_is_device() and migration_is_active(), Avihai Horon, 2024/12/18
- [PATCH v2 4/7] vfio/migration: Rename vfio_devices_all_dirty_tracking(), Avihai Horon, 2024/12/18
- [PATCH v2 3/7] vfio/migration: Refactor vfio_devices_all_running_and_mig_active() logic, Avihai Horon, 2024/12/18
- [PATCH v2 5/7] system/dirtylimit: Don't use migration_is_active(), Avihai Horon, 2024/12/18
- [PATCH v2 6/7] migration: Drop migration_is_device(), Avihai Horon, 2024/12/18
- [PATCH v2 7/7] migration: Unexport migration_is_active(), Avihai Horon, 2024/12/18
- [PATCH v2 2/7] vfio/migration: Refactor vfio_devices_all_dirty_tracking() logic, Avihai Horon, 2024/12/18
- [PATCH v2 1/7] vfio/container: Add dirty tracking started flag,
Avihai Horon <=
- Re: [PATCH v2 0/7] migration: Drop/unexport migration_is_device() and migration_is_active(), Joao Martins, 2024/12/23
- Re: [PATCH v2 0/7] migration: Drop/unexport migration_is_device() and migration_is_active(), Cédric Le Goater, 2024/12/24