Commit dbc5f37b authored by Yi Liu's avatar Yi Liu Committed by Jason Gunthorpe
Browse files

iommufd: Allow allocating PASID-compatible domain

The underlying infrastructure has supported the PASID attach and related
enforcement per the requirement of the IOMMU_HWPT_ALLOC_PASID flag. This
extends iommufd to support PASID compatible domain requested by userspace.

Link: https://patch.msgid.link/r/20250321171940.7213-15-yi.l.liu@intel.com


Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Reviewed-by: default avatarNicolin Chen <nicolinc@nvidia.com>
Signed-off-by: default avatarYi Liu <yi.l.liu@intel.com>
Tested-by: default avatarNicolin Chen <nicolinc@nvidia.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent ce15c13e
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -112,7 +112,8 @@ iommufd_hwpt_paging_alloc(struct iommufd_ctx *ictx, struct iommufd_ioas *ioas,
{
	const u32 valid_flags = IOMMU_HWPT_ALLOC_NEST_PARENT |
				IOMMU_HWPT_ALLOC_DIRTY_TRACKING |
				IOMMU_HWPT_FAULT_ID_VALID;
				IOMMU_HWPT_FAULT_ID_VALID |
				IOMMU_HWPT_ALLOC_PASID;
	const struct iommu_ops *ops = dev_iommu_ops(idev->dev);
	struct iommufd_hwpt_paging *hwpt_paging;
	struct iommufd_hw_pagetable *hwpt;
@@ -233,7 +234,7 @@ iommufd_hwpt_nested_alloc(struct iommufd_ctx *ictx,
	struct iommufd_hw_pagetable *hwpt;
	int rc;

	if ((flags & ~IOMMU_HWPT_FAULT_ID_VALID) ||
	if ((flags & ~(IOMMU_HWPT_FAULT_ID_VALID | IOMMU_HWPT_ALLOC_PASID)) ||
	    !user_data->len || !ops->domain_alloc_nested)
		return ERR_PTR(-EOPNOTSUPP);
	if (parent->auto_domain || !parent->nest_parent ||
@@ -290,7 +291,7 @@ iommufd_viommu_alloc_hwpt_nested(struct iommufd_viommu *viommu, u32 flags,
	struct iommufd_hw_pagetable *hwpt;
	int rc;

	if (flags & ~IOMMU_HWPT_FAULT_ID_VALID)
	if (flags & ~(IOMMU_HWPT_FAULT_ID_VALID | IOMMU_HWPT_ALLOC_PASID))
		return ERR_PTR(-EOPNOTSUPP);
	if (!user_data->len)
		return ERR_PTR(-EOPNOTSUPP);
+3 −0
Original line number Diff line number Diff line
@@ -393,6 +393,9 @@ struct iommu_vfio_ioas {
 *                          Any domain attached to the non-PASID part of the
 *                          device must also be flagged, otherwise attaching a
 *                          PASID will blocked.
 *                          For the user that wants to attach PASID, ioas is
 *                          not recommended for both the non-PASID part
 *                          and PASID part of the device.
 *                          If IOMMU does not support PASID it will return
 *                          error (-EOPNOTSUPP).
 */