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