Re: [RFC] generic device DMA implementation
David Gibson (email@example.com)
Fri, 6 Dec 2002 10:59:11 +1100
On Thu, Dec 05, 2002 at 11:29:45AM -0500, Jeff Garzik wrote:
> David Gibson wrote:
> >On Wed, Dec 04, 2002 at 10:41:31PM -0500, Jeff Garzik wrote:
> >>On Thu, Dec 05, 2002 at 01:38:47PM +1100, David Gibson wrote:
> >>>It seems the "try to get consistent memory, but otherwise give me
> >>>inconsistent" is only useful on machines which:
> >>> (1) Are not fully consisent, BUT
> >>> (2) Can get consistent memory without disabling the cache, BUT
> >>> (3) Not very much of it, so you might run out.
> >>>The point is, there has to be an advantage to using consistent memory
> >>>if it is available AND the possibility of it not being available.
> >>Agreed here. Add to this
> >>(4) quite silly from an API taste perspective.
> >>>Otherwise, drivers which absolutely need consistent memory, no matter
> >>>the cost, should use consistent_alloc(), all other drivers just use
> >>>kmalloc() (or whatever) then use the DMA flushing functions which
> >>>compile to NOPs on platforms with consistent memory.
> >>Ug. This is travelling backwards in time.
> >>kmalloc is not intended to allocate memory for DMA'ing. I (and others)
> >>didn't spend all that time converting drivers to the PCI DMA API just to
> >>see all that work undone.
> >But if there aren't any consistency constraints on the memory, why not
> >get it with kmalloc(). There are two approaches to handling DMA on a
> >not-fully-consistent machine:
> > 1) Allocate the memory specially so that it is consistent
> > 2) Use any old memory, and make sure we have explicit cache
> For me it's an API issue. kmalloc does not return DMA'able memory.
Ok - see my reply to James's post. I see the point of this given that
there are constraints on DMAable memory which are not related to
consistency (e.g. particular address ranges and cacheline alignment).
A mallocater which can satisfy these constraints makes sense to me.
I just think it's a mistake to associate these constraints with cache
consistency - they are not related. James's original patch does make
this separation in practice, but it misleading suggests a link - which
is what confused me.
> If "your way" is acceptable to most, then at the very least I would want
> #define get_any_old_dmaable_memory kmalloc
I imagine platforms where any address is DMAable and which are fully
consistent would do this.
David Gibson | For every complex problem there is a
firstname.lastname@example.org | solution which is simple, neat and
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to email@example.com
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/