Re: [PATCH V4 05/18] iommu/ioasid: Redefine IOASID set and allocation APIs

Auger Eric
2021-04-15T13:11:43Z

Hi Jason,

On 4/1/21 6:03 PM, Jason Gunthorpe wrote:
> On Thu, Apr 01, 2021 at 02:08:17PM +0000, Liu, Yi L wrote:
>
>> DMA page faults are delivered to root-complex via page request message and
>> it is per-device according to PCIe spec. Page request handling flow is:
>>
>> 1) iommu driver receives a page request from device
>> 2) iommu driver parses the page request message. Get the RID,PASID, faulted
>> page and requested permissions etc.
>> 3) iommu driver triggers fault handler registered by device driver with
>> iommu_report_device_fault()
>
> This seems confused.
>
> The PASID should define how to handle the page fault, not the driver.

In my series I don't use PASID at all. I am just enabling nested stage
and the guest uses a single context. I don't allocate any user PASID at
any point.

When there is a fault at physical level (a stage 1 fault that concerns
the guest), this latter needs to be reported and injected into the
guest. The vfio pci driver registers a fault handler to the iommu layer
and in that fault handler it fills a circ bugger and triggers an eventfd
that is listened to by the VFIO-PCI QEMU device. this latter retrives
the faault from the mmapped circ buffer, it knowns which vIOMMU it is
attached to, and passes the fault to the vIOMMU.
Then the vIOMMU triggers and IRQ in the guest.

We are reusing the existing concepts from VFIO, region, IRQ to do that.

For that use case, would you also use /dev/ioasid?

Thanks

Eric
>
> I don't remember any device specific actions in ATS, so what is the
> driver supposed to do?
>
>> 4) device driver's fault handler signals an event FD to notify userspace to
>> fetch the information about the page fault. If it's VM case, inject the
>> page fault to VM and let guest to solve it.
>
> If the PASID is set to 'report page fault to userspace' then some
> event should come out of /dev/ioasid, or be reported to a linked
> eventfd, or whatever.
>
> If the PASID is set to 'SVM' then the fault should be passed to
> handle_mm_fault
>
> And so on.
>
> Userspace chooses what happens based on how they configure the PASID
> through /dev/ioasid.
>
> Why would a device driver get involved here?
>
>> Eric has sent below series for the page fault reporting for VM with passthru
>> device.
>> https://lore.kernel.org/kvm/20210223210625.604517-5-eric.auger@redhat.com/
>
> It certainly should not be in vfio pci. Everything using a PASID needs
> this infrastructure, VDPA, mdev, PCI, CXL, etc.
>
> Jason
>