On Wed, Jul 14, 2010 at 06:29:58PM -0700, Zach Pfeffer wrote: > On Wed, Jul 14, 2010 at 11:05:36PM +0100, Russell King - ARM Linux wrote: > > On Wed, Jul 14, 2010 at 01:11:49PM -0700, Zach Pfeffer wrote: > > > If the DMA-API contained functions to allocate virtual space separate > > > from physical space and reworked how chained buffers functioned it > > > would probably work - but then things start to look like the VCM API > > > which does graph based map management. > > > > Every additional virtual mapping of a physical buffer results in > > additional cache aliases on aliasing caches, and more workload for > > developers to sort out the cache aliasing issues. > > > > What does VCM to do mitigate that? > > The VCM ensures that all mappings that map a given physical buffer: > IOMMU mappings, CPU mappings and one-to-one device mappings all map > that buffer using the same (or compatible) attributes. At this point > the only attribute that users can pass is CACHED. In the absence of > CACHED all accesses go straight through to the physical memory. > > The architecture of the VCM allows these sorts of consistency checks > to be made since all mappers of a given physical resource are > tracked. This is feasible because the physical resources we're > tracking are typically large. A few more things... In addition to CACHED, the VCMM can support different cache policies as long as the architecture can support it - they get passed down through the device map call. In addition, handling physical mappings in the VCMM enables it to perform refcounting on the physical chunks (ie, to see how many virtual spaces it's been mapped to, including the kernel's). This allows it to turn on any coherency protocols that are available in hardware (ie, setting the shareable bit on something that is mapped to more than one virtual space). That same attribute can be left off on a buffer that has only one virtual mapping (ie, scratch buffers used by one device only). It is then up to the underlying system to deal with that shared attribute - to enable redirection if it's supported, or to force something to be non-cacheable, etc. Doing it all through the VCMM allows all these mechanisms be worked out once per architecture and then reused. -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html