Hi Joerg,
On Thu, Sep 22, 2016 at 11:45 PM, Joerg Roedel <[email protected]> wrote:
> On Tue, Sep 20, 2016 at 10:44:46PM +0900, Magnus Damm wrote:
>> +#ifdef CONFIG_IOMMU_DMA
>> +
>> +static struct iommu_domain *ipmmu_domain_alloc_dma(unsigned type)
>> +{
>> + struct iommu_domain *io_domain;
>> +
>> + if (type != IOMMU_DOMAIN_DMA)
>> + return NULL;
>> +
>> + io_domain = __ipmmu_domain_alloc(type);
>> + if (io_domain)
>> + iommu_get_dma_cookie(io_domain);
>> +
>> + return io_domain;
>> +}
>> +
>> +static void ipmmu_domain_free_dma(struct iommu_domain *io_domain)
>> +{
>> + iommu_put_dma_cookie(io_domain);
>> + ipmmu_domain_free(io_domain);
>> +}
>
>> [...]
>
>> +static const struct iommu_ops ipmmu_ops = {
>> + .domain_alloc = ipmmu_domain_alloc_dma,
>> + .domain_free = ipmmu_domain_free_dma,
>
> Okay, so when CONFIG_IOMMU_DMA is enabled, you only support allocation
> of DMA domains, not UNMANAGED domains anymore. Is there a reason for
> that?
Just historical reason migrating from UNMANAGED only to DMA only.
> You can reduce the #ifdef'ed coded by supporting both types of domains
> and call into allocation-subfunctions for DMA and UNMANAGED domains. The
> #ifdef could then only let the dma-allocation function return NULL.
>
> This would be much more compatible to what other IOMMU drivers do and
> will allow VFIO usage in the future.
Thanks for your suggestion. I've now updated the code in V6, hopefully
it would match your expectation better.
Cheers,
/ magnus