Re: [RFC 06/20] iommu: Add iommu_device_init[exit]_user_dma interfaces
From: Jason Gunthorpe <jgg@nvidia.com>
Date: 2021-09-27 11:53:49
Also in:
linux-iommu, lkml
On Mon, Sep 27, 2021 at 09:42:58AM +0000, Tian, Kevin wrote:
quoted
From: Jason Gunthorpe <jgg@nvidia.com> Sent: Wednesday, September 22, 2021 8:40 PMquoted
quoted
Ie the basic flow would see the driver core doing some:Just double confirm. Is there concern on having the driver core to call iommu functions?It is always an interesting question, but I'd say iommu is foundantional to Linux and if it needs driver core help it shouldn't be any different from PM, pinctl, or other subsystems that have inserted themselves into the driver core. Something kind of like the below. If I recall, once it is done like this then the entire iommu notifier infrastructure can be ripped out which is a lot of code.Currently vfio is the only user of this notifier mechanism. Now three events are handled in vfio_iommu_group_notifier(): NOTIFY_ADD_DEVICE: this is basically for some sanity check. suppose not required once we handle it cleanly in the iommu/driver core. NOTIFY_BOUND_DRIVER: the BUG_ON() logic to be fixed by this change. NOTIFY_UNBOUND_DRIVER: still needs some thoughts. Based on the comments the group->unbound_list is used to avoid breaking
I have a patch series to delete the unbound_list, the scenario you describe is handled by the device_lock()
quoted hunk ↗ jump to hunk
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 68ea1f9..826a651 100644 +++ b/drivers/base/dd.c@@ -566,6 +566,10 @@ static int really_probe(struct device *dev, struct device_driver *drv) goto done; } + ret = iommu_device_set_dma_hint(dev, drv->dma_hint); + if (ret) + return ret;
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.
+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. Jason