Messages in this thread | | | Subject | Re: [PATCH v2 1/2] iommu: add support for drivers that manage iommu explicitly | From | Robin Murphy <> | Date | Tue, 10 Sep 2019 17:51:57 +0100 |
| |
On 10/09/2019 16:34, Rob Clark wrote: > On Tue, Sep 10, 2019 at 1:14 AM Joerg Roedel <joro@8bytes.org> wrote: >> >> On Fri, Sep 06, 2019 at 02:44:01PM -0700, Rob Clark wrote: >>> @@ -674,7 +674,7 @@ int iommu_group_add_device(struct iommu_group *group, struct device *dev) >>> >>> mutex_lock(&group->mutex); >>> list_add_tail(&device->list, &group->devices); >>> - if (group->domain) >>> + if (group->domain && !(dev->driver && dev->driver->driver_manages_iommu)) >> >> Hmm, this code usually runs at enumeration time when no driver is >> attached to the device. Actually it would be pretty dangerous when this >> code runs while a driver is attached to the device. How does that change >> make things work for you? >> > > I was seeing this get called via the path driver_probe_device() -> > platform_dma_configure() -> of_dma_configure() -> of_iommu_configure() > -> iommu_probe_device() -> ... > > The only cases I was seeing where dev->driver is NULL where a few > places that drivers call of_dma_configure() on their own sub-devices. > But maybe there are some other paths that I did not notice?
For the of_iommu flow, it very much depends on your DT layout and driver probe order as to whether you catch the "proper" call from iommu_bus_notifier()/iommu_bus_init() or the late "replay" from of_iommu_configure(). I wouldn't make any assumptions of consistency.
Robin.
| |