Messages in this thread | | | Date | Fri, 6 Dec 2002 10:59:11 +1100 | From | David Gibson <> | Subject | Re: [RFC] generic device DMA implementation |
| |
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 > >frobbing. > > 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 david@gibson.dropbear.id.au | solution which is simple, neat and | wrong. http://www.ozlabs.org/people/dgibson - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |