Re: [PATCH v2 07/26] iommu/amd: Add support for AMD vIOMMU VF MMIO region

From: Suthikulpanit, Suravee

Date: Wed Jun 17 2026 - 02:10:51 EST




On 6/1/2026 7:51 PM, Jason Gunthorpe wrote:
On Thu, May 28, 2026 at 05:17:19AM +0000, Suravee Suthikulpanit wrote:
@@ -68,6 +70,16 @@ int amd_iommufd_viommu_init(struct iommufd_viommu *viommu, struct iommu_domain *
aviommu->gid = ret;
pr_debug("%s: gid=%#x", __func__, aviommu->gid);
+ page_base = amd_viommu_get_vfmmio_addr(iommu, aviommu->gid);
+
+ ret = iommufd_viommu_alloc_mmap(&aviommu->core,
+ page_base, SZ_4K,
+ (unsigned long *)&data.out_vfmmio_mmap_offset);

This should not be casted like this.

+ if (ret)
+ goto err_mmap;
+
+ aviommu->vfmmio_mmap_offset = data.out_vfmmio_mmap_offset;
+
ret = iommu_copy_struct_to_user(user_data, &data,
IOMMU_VIOMMU_TYPE_AMD,
reserved);
@@ -82,6 +94,8 @@ int amd_iommufd_viommu_init(struct iommufd_viommu *viommu, struct iommu_domain *
return 0;
err_init:
+ iommufd_viommu_destroy_mmap(&aviommu->core, aviommu->vfmmio_mmap_offset);
+err_mmap:
amd_iommu_gid_free(iommu, aviommu->gid);
err_gid:
return ret;
@@ -100,6 +114,8 @@ static void amd_iommufd_viommu_destroy(struct iommufd_viommu *viommu)
list_del(&aviommu->pdom_list);
spin_unlock_irqrestore(&pdom->lock, flags);
xa_destroy(&aviommu->gdomid_array);
+ if (aviommu->vfmmio_mmap_offset)
+ iommufd_viommu_destroy_mmap(&aviommu->core, aviommu->vfmmio_mmap_offset);

I guess mmap_offset could be zero legitimately

Jason

I'll fix these in v3.

Suravee