From: "Ira W. Snyder" <iws@ovro.caltech.edu>
To: Stefani Seibold <stefani@seibold.net>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Andi Kleen <andi@firstfloor.org>,
Greg Kroah-Hartman <gregkh@suse.de>,
Alan Cox <alan@lxorguk.ukuu.org.uk>, Theodore Tso <tytso@mit.edu>,
Jens Axboe <jens.axboe@oracle.com>
Subject: Re: [PATCH] enhanced reimplemented of the kfifo API
Date: Fri, 15 Jan 2010 15:38:20 -0800 [thread overview]
Message-ID: <20100115233820.GF10591@ovro.caltech.edu> (raw)
In-Reply-To: <1263593107.8935.1.camel@wall-e>
On Fri, Jan 15, 2010 at 11:05:07PM +0100, Stefani Seibold wrote:
> Am Freitag, den 15.01.2010, 14:01 -0800 schrieb Ira W. Snyder:
> > On Fri, Jan 15, 2010 at 10:30:01PM +0100, Stefani Seibold wrote:
> > >
> > > > I'm glad to see this example, it really illustrates how to use the new
> > > > DMA functionality of the kfifo API.
> > > >
> > > > Is there any reason why a very large scatterlist could not be used? I
> > > > have a driver that uses a large scatterlist (~4000 entries, allocated as
> > > > a struct sg_table). I implemented my own copy_from_user() functionality
> > > > into this scatterlist, but I'd love to use the kfifo DMA API instead.
> > > > After filling the scatterlist, I use the usual DMA API's to transfer it
> > > > to my device.
> > > >
> > >
> > > No, but the API will only return max. two entries.
> > >
> >
> > Ah, I see. __kfifo_alloc() uses kmalloc() internally. The kfifo API will
> > not work for my purposes then, since I want to allocate a 16MB chunk of
> > memory, and I'm very uncomfortable doing that with kmalloc(). I'll stick
> > with my custom scatterlist code, which uses alloc_page() to fill in the
> > scatterlist with order-0 allocations.
> >
>
> I think you can use vmalloc() instead and assign this buffer with
> kfifo_init().
>
Yes, that might be an option. I presume I could still use dma_map_sg()
on the resulting scatterlist.
> > Another nitpick in the code: I've noticed that you use sgl++ in the
> > setup_sgl() function. That should become "sgl = sg_next(sgl);" so that
> > this code can work with an struct sg_table as well.
>
> No, its by definition an array. You cannot pass as struct sg_table to
> the kfifo_dma_* functions.
>
A struct sg_table is a container for an underlying chain of struct
scatterlists, allowing for easier allocation. See the definition of
struct sg_table and the sgl member (include/linux/scatterlist.h line
11).
IIRC, struct sg_table allocates arrays of struct scatterlist in
PAGE_SIZE chunks, and chains them together.
If you change from "sg++" to "sg_next()", you should be able to work
with chained scatterlists. You can only have a single struct page * in
one struct scatterlist. This would mean that if I tried to use
kfifo_dma_out_prepare() to give me 16MB worth of data, I would need 4096
seperate struct scatterlist entries. One for each struct page * in that
16MB chunk.
Jens, you added a lot of the scatterlist chaining code. Can you comment
on this? I don't claim to be a scatterlist expert :)
Ira
next prev parent reply other threads:[~2010-01-15 23:38 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-15 9:06 [PATCH] enhanced reimplemented of the kfifo API Stefani Seibold
2010-01-15 19:20 ` Ira W. Snyder
2010-01-15 21:30 ` Stefani Seibold
2010-01-15 22:01 ` Ira W. Snyder
2010-01-15 22:05 ` Stefani Seibold
2010-01-15 23:38 ` Ira W. Snyder [this message]
2010-01-16 7:25 ` Stefani Seibold
-- strict thread matches above, loose matches on Subject: below --
2010-01-14 16:39 Stefani Seibold
2010-01-06 11:12 Stefani Seibold
2010-01-06 17:03 ` tytso
2010-01-06 17:32 ` Stefani Seibold
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100115233820.GF10591@ovro.caltech.edu \
--to=iws@ovro.caltech.edu \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=andi@firstfloor.org \
--cc=gregkh@suse.de \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stefani@seibold.net \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.