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