On Mon, May 27, 2024 at 12:05:10PM +0800, Lu Baolu wrote: > @@ -206,20 +182,49 @@ void iommu_report_device_fault(struct device *dev, struct iopf_fault *evt) > if (group == &abort_group) > goto err_abort; > > - group->domain = get_domain_for_iopf(dev, fault); > - if (!group->domain) > + if (fault->prm.flags & IOMMU_FAULT_PAGE_REQUEST_PASID_VALID) { > + group->attach_handle = iommu_attach_handle_get(dev->iommu_group, > + fault->prm.pasid, > + 0); > + if (IS_ERR(group->attach_handle)) { > + if (!device_iommu_capable(dev, IOMMU_CAP_USER_IOASID_TABLE)) > + goto err_abort; I'm not excited about calling a function pointer on every fault. Let's just add a constant flag to iommu_ops? Jason