Tested and verified that IOPF requests and responses are triggered and handled successfully with SVM enabled on DSA on SPR platform. Tested-by: Yan Zhao <yan.y.zhao@xxxxxxxxx> On Thu, Sep 28, 2023 at 12:27:22PM +0800, Lu Baolu wrote: > When a user-managed page table is attached to an IOMMU, it is necessary > to deliver IO page faults to user space so that they can be handled > appropriately. One use case for this is nested translation, which is > currently being discussed in the mailing list. > > I have posted a RFC series [1] that describes the implementation of > delivering page faults to user space through IOMMUFD. This series has > received several comments on the IOMMU refactoring, which I am trying to > address in this series. > > The major refactoring includes: > > - [PATCH 01 ~ 04] Move include/uapi/linux/iommu.h to > include/linux/iommu.h. Remove the unrecoverable fault data definition. > - [PATCH 05 ~ 06] Remove iommu_[un]register_device_fault_handler(). > - [PATCH 07 ~ 10] Separate SVA and IOPF. Make IOPF a generic page fault > handling framework. > - [PATCH 11 ~ 12] Improve iopf framework for iommufd use. > > This is also available at github [2]. > > [1] https://lore.kernel.org/linux-iommu/20230530053724.232765-1-baolu.lu@xxxxxxxxxxxxxxx/ > [2] https://github.com/LuBaolu/intel-iommu/commits/preparatory-io-pgfault-delivery-v6 > > Change log: > v6: > - [PATCH 09/12] Check IS_ERR() against the iommu domain. [Jingqi/Jason] > - [PATCH 12/12] Rename the comments and name of iopf_queue_flush_dev(), > no functionality changes. [Kevin] > - All patches rebased on the latest iommu/core branch. > > v5: https://lore.kernel.org/linux-iommu/20230914085638.17307-1-baolu.lu@xxxxxxxxxxxxxxx/ > - Consolidate per-device fault data management. (New patch 11) > - Improve iopf_queue_flush_dev(). (New patch 12) > > v4: https://lore.kernel.org/linux-iommu/20230825023026.132919-1-baolu.lu@xxxxxxxxxxxxxxx/ > - Merge iommu_fault_event and iopf_fault. They are duplicate. > - Move iommu_report_device_fault() and iommu_page_response() to > io-pgfault.c. > - Move iommu_sva_domain_alloc() to iommu-sva.c. > - Add group->domain and use it directly in sva fault handler. > - Misc code refactoring and refining. > > v3: https://lore.kernel.org/linux-iommu/20230817234047.195194-1-baolu.lu@xxxxxxxxxxxxxxx/ > - Convert the fault data structures from uAPI to kAPI. > - Merge iopf_device_param into iommu_fault_param. > - Add debugging on domain lifetime for iopf. > - Remove patch "iommu: Change the return value of dev_iommu_get()". > - Remove patch "iommu: Add helper to set iopf handler for domain". > - Misc code refactoring and refining. > > v2: https://lore.kernel.org/linux-iommu/20230727054837.147050-1-baolu.lu@xxxxxxxxxxxxxxx/ > - Remove unrecoverable fault data definition as suggested by Kevin. > - Drop the per-device fault cookie code considering that doesn't make > much sense for SVA. > - Make the IOMMU page fault handling framework generic. So that it can > available for use cases other than SVA. > > v1: https://lore.kernel.org/linux-iommu/20230711010642.19707-1-baolu.lu@xxxxxxxxxxxxxxx/ > > Lu Baolu (12): > iommu: Move iommu fault data to linux/iommu.h > iommu/arm-smmu-v3: Remove unrecoverable faults reporting > iommu: Remove unrecoverable fault data > iommu: Cleanup iopf data structure definitions > iommu: Merge iopf_device_param into iommu_fault_param > iommu: Remove iommu_[un]register_device_fault_handler() > iommu: Merge iommu_fault_event and iopf_fault > iommu: Prepare for separating SVA and IOPF > iommu: Make iommu_queue_iopf() more generic > iommu: Separate SVA and IOPF > iommu: Consolidate per-device fault data management > iommu: Improve iopf_queue_flush_dev() > > include/linux/iommu.h | 258 ++++++++--- > drivers/iommu/intel/iommu.h | 2 +- > drivers/iommu/iommu-sva.h | 71 --- > include/uapi/linux/iommu.h | 161 ------- > .../iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c | 14 +- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 51 +- > drivers/iommu/intel/iommu.c | 25 +- > drivers/iommu/intel/svm.c | 8 +- > drivers/iommu/io-pgfault.c | 438 +++++++++++------- > drivers/iommu/iommu-sva.c | 82 +++- > drivers/iommu/iommu.c | 232 ---------- > MAINTAINERS | 1 - > drivers/iommu/Kconfig | 4 + > drivers/iommu/Makefile | 3 +- > drivers/iommu/intel/Kconfig | 1 + > 15 files changed, 578 insertions(+), 773 deletions(-) > delete mode 100644 drivers/iommu/iommu-sva.h > delete mode 100644 include/uapi/linux/iommu.h > > -- > 2.34.1 >