On Thu, Aug 13, 2020 at 02:01:58PM +0800, Jason Wang wrote: > > On 2020/8/13 下午1:26, Tian, Kevin wrote: > > > From: Jason Wang <jasowang@xxxxxxxxxx> > > > Sent: Thursday, August 13, 2020 12:34 PM > > > > > > > > > On 2020/8/12 下午12:05, Tian, Kevin wrote: > > > > > The problem is that if we tie all controls via VFIO uAPI, the other > > > > > subsystem like vDPA is likely to duplicate them. I wonder if there is a > > > > > way to decouple the vSVA out of VFIO uAPI? > > > > vSVA is a per-device (either pdev or mdev) feature thus naturally should > > > > be managed by its device driver (VFIO or vDPA). From this angle some > > > > duplication is inevitable given VFIO and vDPA are orthogonal passthrough > > > > frameworks. Within the kernel the majority of vSVA handling is done by > > > > IOMMU and IOASID modules thus most logic are shared. > > > > > > So why not introduce vSVA uAPI at IOMMU or IOASID layer? > > One may ask a similar question why IOMMU doesn't expose map/unmap > > as uAPI... > > > I think this is probably a good idea as well. If there's anything missed in > the infrastructure, we can invent. Besides vhost-vDPA, there are other > subsystems that relaying their uAPI to IOMMU API. Duplicating uAPIs is > usually a hint of the codes duplication. Simple map/unmap could be easy but > vSVA uAPI is much more complicated. A way to create the vSVA objects unrelated to VFIO and then pass those objects for device use into existing uAPIs, to me, makes alot of sense. You should not have to use the VFIO API just to get vSVA. Or stated another way, the existing user driver should be able to get a PASID from the vSVA components as well as just create a PASID from the local mm_struct. The same basic argument goes for all the points - the issue is really the only uAPI we have for this stuff is under VFIO, and the better solution is to disagregate that uAPI, not to try and make everything pretend to be a VFIO device. Jason