[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 2/7] vfio/migration: Refactor vfio_devices_all_dirty_track
From: |
Joao Martins |
Subject: |
Re: [PATCH v2 2/7] vfio/migration: Refactor vfio_devices_all_dirty_tracking() logic |
Date: |
Mon, 23 Dec 2024 17:42:37 +0000 |
On 18/12/2024 13:40, Avihai Horon wrote:
> During dirty page log sync, vfio_devices_all_dirty_tracking() is used to
> check if dirty tracking has been started in order to avoid errors. The
> current logic checks if migration is in ACTIVE or DEVICE states to
> ensure dirty tracking has been started.
>
> However, recently there has been an effort to simplify the migration
> status API and reduce it to a single migration_is_running() function.
>
> To accommodate this, refactor vfio_devices_all_dirty_tracking() logic so
> it won't use migration_is_active() and migration_is_device(). Instead,
> use internal VFIO dirty tracking flags.
>
> As a side effect, now that migration status is no longer used to detect
> dirty tracking status, VFIO log syncs are untied from migration. This
> will make calc-dirty-rate more accurate as now it will also include VFIO
> dirty pages.
>
> While at it, as VFIODevice->dirty_tracking is now used to detect dirty
> tracking status, add a comment that states how it's protected.
>
> Signed-off-by: Avihai Horon <avihaih@nvidia.com>
Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
> ---
> include/hw/vfio/vfio-common.h | 2 +-
> hw/vfio/common.c | 17 ++++++++++++++++-
> 2 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
> index e0ce6ec3a9..6c999be398 100644
> --- a/include/hw/vfio/vfio-common.h
> +++ b/include/hw/vfio/vfio-common.h
> @@ -143,7 +143,7 @@ typedef struct VFIODevice {
> OnOffAuto pre_copy_dirty_page_tracking;
> OnOffAuto device_dirty_page_tracking;
> bool dirty_pages_supported;
> - bool dirty_tracking;
> + bool dirty_tracking; /* Protected by BQL */
> bool iommu_dirty_tracking;
> HostIOMMUDevice *hiod;
> int devid;
> diff --git a/hw/vfio/common.c b/hw/vfio/common.c
> index dcef44fe55..e032ce1b6f 100644
> --- a/hw/vfio/common.c
> +++ b/hw/vfio/common.c
> @@ -170,11 +170,26 @@ bool vfio_device_state_is_precopy(VFIODevice *vbasedev)
> migration->device_state == VFIO_DEVICE_STATE_PRE_COPY_P2P;
> }
>
> +static bool vfio_devices_all_device_dirty_tracking_started(
> + const VFIOContainerBase *bcontainer)
> +{
> + VFIODevice *vbasedev;
> +
> + QLIST_FOREACH(vbasedev, &bcontainer->device_list, container_next) {
> + if (!vbasedev->dirty_tracking) {
> + return false;
> + }
> + }
> +
> + return true;
> +}
> +
> static bool vfio_devices_all_dirty_tracking(VFIOContainerBase *bcontainer)
> {
> VFIODevice *vbasedev;
>
> - if (!migration_is_active() && !migration_is_device()) {
> + if (!(vfio_devices_all_device_dirty_tracking_started(bcontainer) ||
> + bcontainer->dirty_pages_started)) {
> return false;
> }
>
- [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
- Re: [PATCH v2 2/7] vfio/migration: Refactor vfio_devices_all_dirty_tracking() logic,
Joao Martins <=
- [PATCH v2 1/7] vfio/container: Add dirty tracking started flag, Avihai Horon, 2024/12/18
- 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