[PATCH v4 5/6] iommu/dma: Simplify calls to iommu_setup_dma_ops()
Robin Murphy
robin.murphy at arm.com
Fri Jun 18 04:19:02 PDT 2021
On 2021-06-18 11:50, Jean-Philippe Brucker wrote:
> On Wed, Jun 16, 2021 at 06:02:39PM +0100, Robin Murphy wrote:
>>> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
>>> index c62e19bed302..175f8eaeb5b3 100644
>>> --- a/drivers/iommu/dma-iommu.c
>>> +++ b/drivers/iommu/dma-iommu.c
>>> @@ -1322,7 +1322,9 @@ void iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 dma_limit)
>>> if (domain->type == IOMMU_DOMAIN_DMA) {
>>> if (iommu_dma_init_domain(domain, dma_base, dma_limit, dev))
>>> goto out_err;
>>> - dev->dma_ops = &iommu_dma_ops;
>>> + set_dma_ops(dev, &iommu_dma_ops);
>>> + } else {
>>> + set_dma_ops(dev, NULL);
>>
>> I'm not keen on moving this here, since iommu-dma only knows that its own
>> ops are right for devices it *is* managing; it can't assume any particular
>> ops are appropriate for devices it isn't. The idea here is that
>> arch_setup_dma_ops() may have already set the appropriate ops for the
>> non-IOMMU case, so if the default domain type is passthrough then we leave
>> those in place.
>>
>> For example, I do still plan to revisit my conversion of arch/arm someday,
>> at which point I'd have to undo this for that reason.
>
> Makes sense, I'll remove this bit.
>
>> Simplifying the base and size arguments is of course fine, but TBH I'd say
>> rip the whole bloody lot out of the arch_setup_dma_ops() flow now. It's a
>> considerable faff passing them around for nothing but a tenuous sanity check
>> in iommu_dma_init_domain(), and now that dev->dma_range_map is a common
>> thing we should expect that to give us any relevant limitations if we even
>> still care.
>
> So I started working on this but it gets too bulky for a preparatory
> patch. Dropping the parameters from arch_setup_dma_ops() seems especially
> complicated because arm32 does need the size parameter for IOMMU mappings
> and that value falls back to the bus DMA mask or U32_MAX in the absence of
> dma-ranges. I could try to dig into this for a separate series.
>
> Even only dropping the parameters from iommu_setup_dma_ops() isn't
> completely trivial (8 files changed, 55 insertions(+), 36 deletions(-)
> because we still need the lower IOVA limit from dma_range_map), so I'd
> rather send it separately and have it sit in -next for a while.
Oh, sure, I didn't mean to imply that the whole cleanup should be within
the scope of this series, just that we can shave off as much as we *do*
need to touch here (which TBH is pretty much what you're doing already),
and mainly to start taking the attitude that these arguments are now
superseded and increasingly vestigial.
I expected the cross-arch cleanup to be a bit fiddly, but I'd forgotten
that arch/arm was still actively using these values, so maybe I can
revisit this when I pick up my iommu-dma conversion again (I swear it's
not dead, just resting!)
Cheers,
Robin.
More information about the linux-arm-kernel
mailing list