> From: Alexey Kardashevskiy <aik@xxxxxxxxx> > Sent: Friday, July 1, 2022 2:18 PM > > VFIO on POWER does not implement iommu_ops and therefore > iommu_capable() > always returns false and __iommu_group_alloc_blocking_domain() always > fails. > > iommu_group_claim_dma_owner() in setting container fails for the same > reason - it cannot allocate a domain. > > This skips the check for platforms supporting VFIO without implementing > iommu_ops which to my best knowledge is POWER only. > > This also allows setting container in absence of iommu_ops. > > Fixes: 70693f470848 ("vfio: Set DMA ownership for VFIO devices") > Fixes: e8ae0e140c05 ("vfio: Require that devices support DMA cache > coherence") > Signed-off-by: Alexey Kardashevskiy <aik@xxxxxxxxx> > --- > > Not quite sure what the proper small fix is and implementing iommu_ops > on POWER is not going to happen any time soon or ever :-/ I'm not sure how others feel about checking bus->iommu_ops outside of iommu subsystem. This sounds a bit non-modular to me and it's not obvious from the caller side why lacking of iommu_ops implies the two relevant APIs are not usable. Simply returning success when bus->iommu_ops==NULL in the two APIs is also problematic in concept. Probably what we really require is an indicator to the caller that the related operations are irrelevant hence can be skipped when called on a particular iommu driver. This reminds me whether -EMEDIUMTYPE can be leveraged here. Nicolin introduced it in another series for detecting incompatible domain attach. This errno is not currently used in iommu subsystem and introduced as a benign error so the caller can check it to retry another domain. Similarly we may return -EMEDIUMTYPE when iommu_ops is NULL in iommu_capable() and iommu_group_claim_dma_owner() then vfio can safely move forward when this error is returned. Thanks Kevin