> +#ifdef CONFIG_HAS_DMA_P2P
> +static inline dma_peer_addr_t dma_map_peer_resource_attrs(struct
> device *dev,
> +                                                       struct device *peer,
> +                                                       struct resource *res,
> +                                                       size_t offset,
> +                                                       size_t size,
> +                                                       enum 
> dma_data_direction dir,
> +                                                       struct dma_attrs 
> *attrs)
> +{
> +     struct dma_map_ops *ops = get_dma_ops(dev);
> +     dma_peer_addr_t addr;
> +
> +     BUG_ON(!valid_dma_direction(dir));
> +     BUG_ON(ops->map_peer_resource == NULL);
> +     addr = ops->map_peer_resource(dev, peer, res, offset, size, dir,
> +                                   attrs);
> +     debug_dma_map_peer_resource(dev, peer, res, offset, size, dir,
> addr);
> +
> +     return addr;
> +

With those 'BUG_ON' you need to make sure that every dma_map_ops has
this implemented. That means the calgary_dma_ops, gart_dma_ops, swiotlb_dma_ops,
and xen_swiotlb_dma_ops MUST have something implemented.

Please keep in mind that on one can do 'iommu=soft swiotbl=force' on the
command line which will force the IOMMUs to be ignored and only the
SWIOTLB code will be used.

_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to