On Tue, Oct 15, 2024 at 11:21:54AM +0800, Zhangfei Gao wrote: > On Thu, 12 Sept 2024 at 12:29, Baolu Lu <baolu.lu@xxxxxxxxxxxxxxx> wrote: > > > > Have you tested the user page fault? > > > > > > I got an issue, when a user page fault happens, > > > group->attach_handle = iommu_attach_handle_get(pasid) > > > return NULL. > > > > > > A bit confused here, only find IOMMU_NO_PASID is used when attaching > > > > > > __fault_domain_replace_dev > > > ret = iommu_replace_group_handle(idev->igroup->group, hwpt->domain, > > > &handle->handle); > > > curr = xa_store(&group->pasid_array, IOMMU_NO_PASID, handle, GFP_KERNEL); > > > > > > not find where the code attach user pasid with the attach_handle. > > > > Have you set iommu_ops::user_pasid_table for SMMUv3 driver? > > Thanks Baolu > > Can we send a patch to make it as default? > > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > @@ -3570,6 +3570,7 @@ static struct iommu_ops arm_smmu_ops = { > .viommu_alloc = arm_vsmmu_alloc, > .pgsize_bitmap = -1UL, /* Restricted during device attach */ > .owner = THIS_MODULE, > + .user_pasid_table = 1, You shouldn't need this right now as smmu3 doesn't support nesting domains yet. if (!ops->user_pasid_table) return NULL; /* * The iommu driver for this device supports user- * managed PASID table. Therefore page faults for * any PASID should go through the NESTING domain * attached to the device RID. */ attach_handle = iommu_attach_handle_get( dev->iommu_group, IOMMU_NO_PASID, IOMMU_DOMAIN_NESTED); if (IS_ERR(attach_handle)) ^^^^^^^^^^^^^^^^^^^^^ Will always fail But I will add it to the patch that adds IOMMU_DOMAIN_NESTED Jason