[PATCH 0/8] [PULL REQUEST] Intel IOMMU updates for Linux v6.9

Lu Baolu
2024-02-27T02:20:38Z

Hi Joerg,

The following changes have been queued for v6.9:

- Add rbtree to track iommu probed devices
- Add Intel IOMMU debugfs document
- Cleanup and refactoring

All patches are based on v6.8-rc6. The series is also available at:
https://github.com/LuBaolu/intel-iommu/commits/vtd-update-for-v6.9

Unfortunately, there is a merge conflict with your next branch, in
drivers/iommu/intel/svm.c. I resolved this conflict as below.

diff --cc drivers/iommu/intel/svm.c
index b644d57da841,bdf3584ca0af..c1bed89b1026
--- a/drivers/iommu/intel/svm.c
+++ b/drivers/iommu/intel/svm.c
@@@ -698,14 -693,20 +688,18 @@@ bad_req
* If prq is to be handled outside iommu driver via receiver of
* the fault notifiers, we skip the page response here.
*/
- if (!pdev)
+ mutex_lock(&iommu->iopf_lock);
+ dev = device_rbtree_find(iommu, req->rid);
+ if (!dev) {
+ mutex_unlock(&iommu->iopf_lock);
goto bad_req;
+ }

- intel_svm_prq_report(iommu, &pdev->dev, req);
- trace_prq_report(iommu, &pdev->dev, req->qw_0, req->qw_1,
- if (intel_svm_prq_report(iommu, dev, req))
- handle_bad_prq_event(iommu, req, QI_RESP_INVALID);
- else
- trace_prq_report(iommu, dev, req->qw_0, req->qw_1,
- req->priv_data[0], req->priv_data[1],
- iommu->prq_seq_number++);
++ intel_svm_prq_report(iommu, dev, req);
++ trace_prq_report(iommu, dev, req->qw_0, req->qw_1,
+ req->priv_data[0], req->priv_data[1],
+ iommu->prq_seq_number++);
- pci_dev_put(pdev);
+ mutex_unlock(&iommu->iopf_lock);
prq_advance:
head = (head + sizeof(*req)) & PRQ_RING_MASK;
}
@@@ -781,17 -794,10 +775,8 @@@ void intel_svm_page_response(struct dev

qi_submit_sync(iommu, &desc, 1, 0);
}
-out:
- return ret;
}

- static int intel_svm_set_dev_pasid(struct iommu_domain *domain,
- struct device *dev, ioasid_t pasid)
- {
- struct device_domain_info *info = dev_iommu_priv_get(dev);
- struct intel_iommu *iommu = info->iommu;
-
- return intel_svm_bind_mm(iommu, dev, domain, pasid);
- }
-
static void intel_svm_domain_free(struct iommu_domain *domain)
{
kfree(to_dmar_domain(domain));

With above in mind, please consider them for v6.9.

Best regards,
Baolu

Erick Archer (1):
iommu/vt-d: Use kcalloc() instead of kzalloc()

Jingqi Liu (1):
iommu/vt-d: Add the document for Intel IOMMU debugfs

Lu Baolu (3):
iommu/vt-d: Remove INTEL_IOMMU_BROKEN_GFX_WA
iommu/vt-d: Use rbtree to track iommu probed devices
iommu/vt-d: Use device rbtree in iopf reporting path

Tina Zhang (3):
iommu/vt-d: Remove treatment for revoking PASIDs with pending page
faults
iommu/vt-d: Remove initialization for dynamically heap-allocated
rcu_head
iommu/vt-d: Merge intel_svm_bind_mm() into its caller

drivers/iommu/intel/iommu.h | 10 +
drivers/iommu/intel/dmar.c | 4 +-
drivers/iommu/intel/iommu.c | 95 +++++-
drivers/iommu/intel/perf.c | 2 +-
drivers/iommu/intel/svm.c | 39 +--
Documentation/ABI/testing/debugfs-intel-iommu | 276 ++++++++++++++++++
drivers/iommu/intel/Kconfig | 11 -
7 files changed, 391 insertions(+), 46 deletions(-)
create mode 100644 Documentation/ABI/testing/debugfs-intel-iommu

--
2.34.1