On 2022/6/28 16:39, Tian, Kevin wrote:
  static void iopf_handle_group(struct work_struct *work)
        struct iopf_group *group;
+       struct iommu_domain *domain;
        struct iopf_fault *iopf, *next;
        enum iommu_page_response_code status =

        group = container_of(work, struct iopf_group, work);
+       domain = iommu_get_domain_for_dev_pasid(group->dev,
+                               group->last_fault.fault.prm.pasid);
+       if (!domain || !domain->iopf_handler)
+               status = IOMMU_PAGE_RESP_INVALID;
Miss a comment on why no refcnt is required on domain as explained
in the commit msg.

I had some comments around iommu_queue_iopf() in the previous patch. The
iommu_queue_iopf() is the generic page fault handler exposed by iommu
core, hence that's the right place to document this.

Post it below as well:

diff --git a/drivers/iommu/io-pgfault.c b/drivers/iommu/io-pgfault.c
index 1df8c1dcae77..aee9e033012f 100644
--- a/drivers/iommu/io-pgfault.c
+++ b/drivers/iommu/io-pgfault.c
@@ -181,6 +181,13 @@ static void iopf_handle_group(struct work_struct *work)
* request completes, outstanding faults will have been dealt with by the time
  * the PASID is freed.
+ * Any valid page fault will be eventually routed to an iommu domain and the
+ * page fault handler installed there will get called. The users of this
+ * handling framework should guarantee that the iommu domain could only be
+ * freed after the device has stopped generating page faults (or the iommu
+ * hardware has been set to block the page faults) and the pending page faults
+ * have been flushed.
+ *
  * Return: 0 on success and <0 on error.
 int iommu_queue_iopf(struct iommu_fault *fault, void *cookie)

Best regards,
iommu mailing list

Reply via email to