lkml.org 
[lkml]   [2010]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC 1/3 v3] mm: iommu: An API to unify IOMMU, CPU and device memory management
    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.



    \
     
     \ /
      Last update: 2010-07-15 07:39    [W:4.076 / U:0.504 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site