2021-01-22 11:12:57

by Keqian Zhu

[permalink] [raw]
Subject: [PATCH v3 0/2] vfio/iommu_type1: some fixes

v3:
- Populate bitmap unconditionally.
- Sanity check notifier when remove all domains.

v2:
- Address suggestions from Alex.
- Remove unnecessary patches.


Keqian Zhu (2):
vfio/iommu_type1: Populate full dirty when detach non-pinned group
vfio/iommu_type1: Fix some sanity checks in detach group

drivers/vfio/vfio_iommu_type1.c | 50 +++++++++++++++++----------------
1 file changed, 26 insertions(+), 24 deletions(-)

--
2.19.1


2021-01-22 11:13:22

by Keqian Zhu

[permalink] [raw]
Subject: [PATCH v3 1/2] vfio/iommu_type1: Populate full dirty when detach non-pinned group

If a group with non-pinned-page dirty scope is detached with dirty
logging enabled, we should fully populate the dirty bitmaps at the
time it's removed since we don't know the extent of its previous DMA,
nor will the group be present to trigger the full bitmap when the user
retrieves the dirty bitmap.

Fixes: d6a4c185660c ("vfio iommu: Implementation of ioctl for dirty pages tracking")
Suggested-by: Alex Williamson <[email protected]>
Signed-off-by: Keqian Zhu <[email protected]>
---
drivers/vfio/vfio_iommu_type1.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
index 0b4dedaa9128..161725395f2f 100644
--- a/drivers/vfio/vfio_iommu_type1.c
+++ b/drivers/vfio/vfio_iommu_type1.c
@@ -236,6 +236,18 @@ static void vfio_dma_populate_bitmap(struct vfio_dma *dma, size_t pgsize)
}
}

+static void vfio_iommu_populate_bitmap_full(struct vfio_iommu *iommu)
+{
+ struct rb_node *n;
+ unsigned long pgshift = __ffs(iommu->pgsize_bitmap);
+
+ for (n = rb_first(&iommu->dma_list); n; n = rb_next(n)) {
+ struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
+
+ bitmap_set(dma->bitmap, 0, dma->size >> pgshift);
+ }
+}
+
static int vfio_dma_bitmap_alloc_all(struct vfio_iommu *iommu, size_t pgsize)
{
struct rb_node *n;
@@ -2415,8 +2427,11 @@ static void vfio_iommu_type1_detach_group(void *iommu_data,
* Removal of a group without dirty tracking may allow the iommu scope
* to be promoted.
*/
- if (update_dirty_scope)
+ if (update_dirty_scope) {
update_pinned_page_dirty_scope(iommu);
+ if (iommu->dirty_page_tracking)
+ vfio_iommu_populate_bitmap_full(iommu);
+ }
mutex_unlock(&iommu->lock);
}

--
2.19.1

2021-02-02 23:56:46

by Alex Williamson

[permalink] [raw]
Subject: Re: [PATCH v3 0/2] vfio/iommu_type1: some fixes

On Fri, 22 Jan 2021 17:26:33 +0800
Keqian Zhu <[email protected]> wrote:

> v3:
> - Populate bitmap unconditionally.
> - Sanity check notifier when remove all domains.
>
> v2:
> - Address suggestions from Alex.
> - Remove unnecessary patches.
>
>
> Keqian Zhu (2):
> vfio/iommu_type1: Populate full dirty when detach non-pinned group
> vfio/iommu_type1: Fix some sanity checks in detach group
>
> drivers/vfio/vfio_iommu_type1.c | 50 +++++++++++++++++----------------
> 1 file changed, 26 insertions(+), 24 deletions(-)
>

Applied to vfio next branch for v5.12, dropped WARN_ON in release on
patch 2. Thanks,

Alex