[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-id: <023b01ccaaa7$ef16c910$cd445b30$%szyprowski@samsung.com>
Date: Thu, 24 Nov 2011 13:52:33 +0100
From: Marek Szyprowski <m.szyprowski@...sung.com>
To: 'Joerg Roedel' <Joerg.Roedel@....com>,
'David Woodhouse' <dwmw2@...radead.org>
Cc: 'Ohad Ben-Cohen' <ohad@...ery.com>,
'KyongHo Cho' <pullip.cho@...sung.com>,
'Kai Huang' <mail.kai.huang@...il.com>, kvm@...r.kernel.org,
'Arnd Bergmann' <arnd@...db.de>, linux-kernel@...r.kernel.org,
iommu@...ts.linux-foundation.org,
'Laurent Pinchart' <laurent.pinchart@...asonboard.com>,
'David Brown' <davidb@...eaurora.org>,
linux-omap@...r.kernel.org,
'Stepan Moskovchenko' <stepanm@...eaurora.org>,
linux-arm-kernel@...ts.infradead.org
Subject: RE: Changing IOMMU-API for generic DMA-mapping supported by the
hardware
Hello,
On Friday, November 11, 2011 2:17 PM Joerg Roedel wrote:
> Okay, seperate thread for this one.
If possible, I would like to be CCed: in the next mails in this topic.
For a last few months I've been working on DMA-mapping changes on ARM
architecture in order to add support for IOMMU-aware DMA mapper. The
last version of my patches are available here:
http://lists.linaro.org/pipermail/linaro-mm-sig/2011-October/000745.html
The next version will be posted soon.
> On Thu, Nov 10, 2011 at 07:28:39PM +0000, David Woodhouse wrote:
> > > The plan is to have a single DMA-API implementation for all IOMMU
> > > drivers (X86 and ARM) which just uses the IOMMU-API. But to make this
> > > performing reasonalbly well a few changes to the IOMMU-API are required.
> > > I already have some ideas which we can discuss if you want.
> >
> > Yeah, that sounds useful.
>
> As I said some changes to the IOMMU-API are required in my opinion.
> These changes should also allow it to move over old-style IOMMUs like
> Calgary or GART later.
>
> The basic idea is that IOMMU drivers should be required to put every
> device they are responsible for into a default domain. The DMA mapping
> code can query this default domain for each device.
Good idea.
> Also the default domain has capabilities that can be queried. Those
> capabilities include the size and offset of the address space they can
> re-map. For GART and Calgary this will be the aperture, for VT-d and AMD
> IOMMU the whole 64bit address space. Another capability is whether
> addresses outside of that area are 1-1 mapped or no accessible to the
> device.
>
> The generic DMA-mapping code will use that information to initialize its
> allocator and uses iommu_map/iommu_unmap to create and destroy mappings
> as requested by the DMA-API (but the DMA-mapping code does not need to
> create a domain of its own).
>
> The good thing about these default domains is that IOMMU drivers can
> implement their own optimizations on it. The AMD IOMMU driver for
> example already makes a distinction between dma-mapping domains and
> other protection-domains. The optimization for dma-mapping domains is
> that the leaf-pages of the page-table are keept in an array so that it
> is very easy to find the PTE for an address. Those optimizations are
> still possible with the default-domain concept.
>
> In short, the benefits of the default-domain concept are:
>
> 1) It allows existing optimizations for the DMA-mapping code
> paths to persist
> 2) It also fits old-style IOMMUs like GART, Calgary and others
>
> An open problem is how to report reserved ranges of an address-space.
> These ranges might exist from a BIOS requirement for 1-1 mapping of
> certain address ranges (in AMD jargon: Unity mapped ranges, something
> similar exists on VT-d afaik) or hardware requirements like the reserved
> address range used for MSI interrupts.
In my DMA-mapping IOMMU integration I've used a dma_iommu_mapping structure,
which contains a pointer to iommu domain, a bitmap and a lock. Maybe we
should consider extending iommu domain with allocation bitmap (or other
structure that hold information about used/unused iova ranges)? From the
DMA-mapping (as a IOMMU client) perspective we only need 2 more callbacks
in IOMMU API: alloc_iova_range() and free_iova_range().
Each IOMMU implementation can provide these calls based on internal bitmap
allocator which will also cover the issue with reserved ranges. What do you
think about such solution?
Best regards
--
Marek Szyprowski
Samsung Poland R&D Center
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists