01.10.2020 04:26, Nicolin Chen пишет: > On Thu, Oct 01, 2020 at 12:56:46AM +0300, Dmitry Osipenko wrote: >> 01.10.2020 00:32, Nicolin Chen пишет: >>> On Thu, Oct 01, 2020 at 12:24:25AM +0300, Dmitry Osipenko wrote: >>>> ... >>>>>> It looks to me like the only reason why you need this new global API is >>>>>> because PCI devices may not have a device tree node with a phandle to >>>>>> the IOMMU. However, SMMU support for PCI will only be enabled if the >>>>>> root complex has an iommus property, right? In that case, can't we >>>>>> simply do something like this: >>>>>> >>>>>> if (dev_is_pci(dev)) >>>>>> np = find_host_bridge(dev)->of_node; >>>>>> else >>>>>> np = dev->of_node; >>>>>> >>>>>> ? I'm not sure exactly what find_host_bridge() is called, but I'm pretty >>>>>> sure that exists. >>>>>> >>>>>> Once we have that we can still iterate over the iommus property and do >>>>>> not need to rely on this global variable. >>>>> >>>>> I agree that it'd work. But I was hoping to simplify the code >>>>> here if it's possible. Looks like we have an argument on this >>>>> so I will choose to go with your suggestion above for now. >>>> >>>> This patch removed more lines than were added. If this will be opposite >>>> for the Thierry's suggestion, then it's probably not a great suggestion. >>> >>> Sorry, I don't quite understand this comments. Would you please >>> elaborate what's this "it" being "not a great suggestion"? >>> >> >> I meant that you should try to implement Thierry's solution, but if the >> end result will be worse than the current patch, then you shouldn't make >> a v4, but get back to this discussion in order to choose the best option >> and make everyone agree on it. > > I see. Thanks for the reply. And here is a sample implementation: That's what I supposed to happen :) The new variant adds code and complexity, while old did the opposite. Hence the old variant is clearly more attractive, IMO.