Hi, Baolu,
On 3/6/23 17:41, Baolu Lu wrote:
On 3/7/23 12:31 AM, Fenghua Yu wrote:
Define and export iommu_access_remote_vm() to allow IOMMU related
drivers to access user address space by PASID.
The IDXD driver would like to use it to write the user's completion
record that the hardware device is not able to write to due to user
page fault.
I don't quite follow here. Isn't I/O page fault already supported?
The following patch 9 in this series explains in details why IDXD device cannot use page fault to write to user memory: https://lore.kernel.org/dmaengine/20230306163138.587484-10-fenghua.yu@xxxxxxxxx/
"DSA supports page fault handling through PRS. However, the DMA engine
that's processing the descriptor is blocked until the PRS response is
received. Other workqueues sharing the engine are also blocked.
Page fault handing by the driver with PRS disabled can be used to
mitigate the stalling.
With PRS disabled while ATS remain enabled, DSA handles page faults on
a completion record by reporting an event in the event log. In this
instance, the descriptor is completed and the event log contains the
completion record address and the contents of the completion record."
That's why IDXD driver needs this IOMMU's helper iommu_access_remote_vm() to copy the completion record from event log buffer to user space.
Thanks.
-Fenghua