On Thu, Jul 10, 2025 at 09:40:28PM +0000, Shameerali Kolothum Thodi wrote: > > So, the logic is trying to avoid: > > "iommu_bus = parent_bus;" > > for a case that parent_bus (pcie.0) having its own IOMMU. > > > > But shouldn't it be just "if (parent_bus->iommu_per_bus)"? > > > > Why does the current iommu_bus->iommu_per_bus has to be unset? > > I think that !iommu_bus->iommu_per_bus check will be always true as > it enters the while loop only if !iommu_bus->iommu_ops case, > > while (iommu_bus && !iommu_bus->iommu_ops && iommu_bus->parent_dev) { > > }
Yea, that makses sense. "!iommu_bus->iommu_ops" should imply that "iommu_bus->iommu_per_bus" is unset. > > I think "iommu_bus = parent_bus" should be avoided too even if > > the current iommu_bus has its own IOMMU, i.e. iommu_per_bus is > > set? > > Why? Not clear to me. It only enters the loop if the current iommu_bus > doesn't have Iommu_ops set which in turn means iommu_per_bus is not set. > Isn't it? Yea. I missed that condition. But what I said still stays correct: if iommu_bus (pcie.1) has its own IOMMU, it shouldn't take the ops from the parent_bus. The thing is that this logic is inside a while condition that has already excluded such a case. Thanks Nicolin