Mapping huge user buffers for DMA

Roger Larsson roger.larsson at norran.net
Wed Aug 31 10:10:51 EST 2005


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



More information about the Linuxppc-embedded mailing list