Re: [PATCH v2 07/26] iommu/amd: Add support for AMD vIOMMU VF MMIO region
From: Jason Gunthorpe
Date: Mon Jun 01 2026 - 08:53:43 EST
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