Re: [RFC 06/20] iommu: Add iommu_device_init[exit]_user_dma interfaces
From: Jason Gunthorpe <jgg@nvidia.com>
Date: 2021-09-27 13:09:41
Also in:
linux-iommu, lkml
On Mon, Sep 27, 2021 at 01:00:08PM +0000, Tian, Kevin wrote:
quoted
I think for such a narrow usage you should not change the struct device_driver. Just have pci_stub call a function to flip back to user mode.Here we want to ensure that kernel dma should be blocked if the group is already marked for user-dma. If we just blindly do it for any driver at this point (as you commented earlier): + ret = iommu_set_kernel_ownership(dev); + if (ret) + return ret; how would pci-stub reach its function to indicate that it doesn't do dma and flip back?
Do you envision a simpler policy that no driver can be bound to the group if it's already set for user-dma? what about vfio-pci itself?
Yes.. I'm not sure there is a good use case to allow the stub drivers to load/unload while a VFIO is running. At least, not a strong enough one to justify a global change to the driver core..
quoted
quoted
+static int iommu_dev_viable(struct device *dev, void *data) +{ + enum dma_hint hint = *data; + struct device_driver *drv = READ_ONCE(dev->driver);Especially since this isn't locked properly or safe.I have the same worry when copying from vfio. Not sure how vfio gets safe with this approach...
Fixing the locking in vfio_dev_viable is part of deleting the unbound list. Once it properly uses the device_lock and doesn't race with the driver core like this things are much better. Don't copy this stuff into the iommu core without fixing it. https://github.com/jgunthorpe/linux/commit/fa6abb318ccca114da12c0b5b123c99131ace926 https://github.com/jgunthorpe/linux/commit/45980bd90b023d1eea56df70d1c395bdf4cc7cf1 I can't remember if the above is contingent on some of the mdev cleanups or not.. Have to get back to it. Jason