> From: Jason Gunthorpe <jgg@xxxxxxxxxx> > Sent: Thursday, June 3, 2021 8:41 PM > > > When discussing I/O page fault support in another thread, the consensus > > is that an device handle will be registered (by user) or allocated (return > > to user) in /dev/ioasid when binding the device to ioasid fd. From this > > angle we can register {ioasid_fd, device_handle} to KVM and then call > > something like ioasidfd_device_is_coherent() to get the property. > > Anyway the coherency is a per-device property which is not changed > > by how many I/O page tables are attached to it. > > It is not device specific, it is driver specific > > As I said before, the question is if the IOASID itself can enforce > snoop, or not. AND if the device will issue no-snoop or not. Sure. My earlier comment was based on the assumption that all IOASIDs attached to a device should inherit the same snoop/no-snoop fact. But looks it doesn't prevent a device driver from setting PTE_SNP only for selected I/O page tables, according to whether isoch agents are involved. An user space driver could figure out per-IOASID requirements itself. A guest device driver can indirectly convey this information through vIOMMU. Registering {IOASID_FD, IOASID} to KVM has another merit, as we also need it to update CPU PASID mapping for ENQCMD. We can define one interface for both requirements. 😊 Thanks Kevin