Re: [PATCH] generic device DMA (dma_pool update)

David Brownell
2002-12-31T23:29:45Z

Yes, that was exactly what I was demonstrating ... those are
the callbacks that'd be supplied to mempool_create(), showing
that it doesn't need to change for that kind of usage. (Which
isn't allocating DMA buffers, note!)

But we still need lower level allocators that are reasonable
for use with 1/Nth page allocations ... which isn't a problem
that mempool even attempts to solve. Hence dma_pool, in any of
its implementations, would go underneath mempool to achieve what
Adam was describing (for drivers that need it).

- Dave

Andrew Morton wrote:
> David Brownell wrote:
>
>> void *mempool_alloc_td (int mem_flags, void *pool)
>> {
>> struct td *td;
>> dma_addr_t dma;
>>
>> td = dma_pool_alloc (pool, mem_flags, &dma);
>> if (!td)
>> return td;
>> td->td_dma = dma; /* feed to the hardware */
>> ... plus other init
>> return td;
>> }
>
>
> The existing mempool code can be used to implement this, I believe. The
> pool->alloc callback is passed an opaque void *, and it returns
> a void * which can point at any old composite caller-defined blob.
>