Re: How to allocate pages for a scatter-gather buffer?

From: Jens Axboe
Date: Sun Nov 09 2003 - 16:12:53 EST


On Sun, Nov 09 2003, Alan Stern wrote:
> Jens:
>
> Thanks for your help in tracking down that problem with the usb-storage
> sddr09 driver.
>
> Now a slightly different question. Suppose I want to allocate some pages
> as a scatter-gather buffer for I/O to a device. I've got the device's
> dma_mask; what's the right way to convert that to a GFP bitmask for
> alloc_pages() or get_free_pages()?

This is a bit problematic, unfortunately... There really is no good way
to do this, the best you can do is approximate.

> Also, assuming I'll have to use memcpy() to transfer data into or out of
> the scatter-gather buffer (so it will have to get a kernel virtual mapping
> at some point), am I better off using alloc_pages() followed by
> kmap_atomic()/kunmap_atomic() or get_free_pages()? Or even kmalloc()?

My suggestion would be to do page allocations (not kmalloc()). With kmap
that'll work just fine for you, and it's easy to extend to just use the
right gfp mask if/when we ever get something that works for this.

--
Jens Axboe

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/