Re: Mapping huge user buffers for DMA
From: Roger Larsson <hidden>
Date: 2005-08-31 00:10:45
On Tuesday 30 August 2005 19.27, Stephen Williams wrote:
I have a PPC405GPr system with an image processing device, that is creating potentially huge amounts of data. In one setup I have a 256Meg system, and I'm trying to map a 192Meg destination buffer using map_user_kiovec and an array of kiobufs.
Never tried to map that amount at once. Our code looks, or looked, like this. Found some code... /usr/src/linuxppc_2_4_devel/arch/cris/drivers/examples/kiobuftest.c
I'm finding, however, that I'm getting an Oops in map_user_kiovec when it tries this, and I'm wondering where I need to look for any limits I might be overrunning.
What does the Oops say?? Hmm... How much space will the vector itself require?
Also, I've been considering skipping kiobufs all together and instead using code like this (lifted from map_user_kiobuf) /* Try to fault in all of the necessary pages */ down_read(&mm->mmap_sem); /* rw==READ means read from disk, write into memory area */ err = get_user_pages(current, mm, va, pgcount, (rw==READ), 0, iobuf->maplist, NULL); up_read(&mm->mmap_sem); to get the user pages directly. This is really what I want, and I do not need the other functionality of kiobufs. Is the get_user_pages function kosher for use by drivers? Is there a limit to what get_user_pages may map?
Isn't this the way it is done in 2.6 anyway? /RogerL