From: Jens Axboe <jens.axboe@oracle.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 7/13] i386 sg: add support for chaining scatterlists
Date: Thu, 10 May 2007 12:44:54 +0200 [thread overview]
Message-ID: <20070510104454.GL4629@kernel.dk> (raw)
In-Reply-To: <20070510034331.2d3e9410.akpm@linux-foundation.org>
On Thu, May 10 2007, Andrew Morton wrote:
> On Thu, 10 May 2007 12:21:49 +0200 Jens Axboe <jens.axboe@oracle.com> wrote:
>
> > The core of the patch - allow the last sg element in a scatterlist
> > table to point to the start of a new table. We overload the LSB of
> > the page pointer to indicate whether this is a valid sg entry, or
> > merely a link to the next list.
> >
> > Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
> > ---
> > include/asm-i386/scatterlist.h | 2 +
> > include/linux/scatterlist.h | 52 +++++++++++++++++++++++++++++++++++++--
> > 2 files changed, 51 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/asm-i386/scatterlist.h b/include/asm-i386/scatterlist.h
> > index d7e45a8..bd5164a 100644
> > --- a/include/asm-i386/scatterlist.h
> > +++ b/include/asm-i386/scatterlist.h
> > @@ -10,6 +10,8 @@ struct scatterlist {
> > unsigned int length;
> > };
> >
> > +#define ARCH_HAS_SG_CHAIN
> > +
> > /* These macros should be used after a pci_map_sg call has been done
> > * to get bus addresses of each of the SG entries and their lengths.
> > * You should only work with the number of sg entries pci_map_sg
> > diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h
> > index c5bffde..bad6b9e 100644
> > --- a/include/linux/scatterlist.h
> > +++ b/include/linux/scatterlist.h
> > @@ -20,13 +20,59 @@ static inline void sg_init_one(struct scatterlist *sg, const void *buf,
> > sg_set_buf(sg, buf, buflen);
> > }
> >
> > ...
> >
> > /*
> > * Loop over each sg element, following the pointer to a new list if necessary
> > */
> > #define for_each_sg(sglist, sg, nr, __i) \
> > - for (__i = 0, sg = (sglist); __i < nr; __i++, sg = sg_next(sg))
> > + for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg))
> > +
> > +/*
> > + * We could improve this by passing in the maximum size of an sglist, so
> > + * we could jump directly to the last table. That would eliminate this
> > + * (potentially) lengthy scan.
> > + */
> > +static inline struct scatterlist *sg_last(struct scatterlist *sgl,
> > + unsigned int nents)
> > +{
> > +#ifdef ARCH_HAS_SG_CHAIN
> > + struct scatterlist *ret = &sgl[nents - 1];
> > +#else
> > + struct scatterlist *sg, *ret = NULL;
> > + int i;
> > +
> > + for_each_sg(sgl, sg, nents, i)
> > + ret = sg;
> > +
> > +#endif
> > + return ret;
> > +}
>
> Looks too large to be inlined.
Yeah, I'm inclined to agree. Perhaps it would be better to put this
stuff in lib/scatterlist.c or something like that instead?
> > +/*
> > + * Chain previous sglist to this one
> > + */
> > +static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents,
> > + struct scatterlist *sgl)
> > +{
> > +#ifndef ARCH_HAS_SG_CHAIN
> > + BUG();
> > +#endif
>
> Can use BUILD_BUG_ON here. Or just #error.
Good idea, thanks!
--
Jens Axboe
next prev parent reply other threads:[~2007-05-10 10:45 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-10 10:21 [PATCH 0/13] Chaining sg lists for bio IO commands v3 Jens Axboe
2007-05-10 10:21 ` [PATCH 1/13] crypto: don't pollute the global namespace with sg_next() Jens Axboe
2007-05-10 10:21 ` [PATCH 2/13] Add sg helpers for iterating over a scatterlist table Jens Axboe
2007-05-10 10:39 ` Andrew Morton
2007-05-10 10:42 ` Jens Axboe
2007-05-10 10:21 ` [PATCH 3/13] libata: convert to using sg helpers Jens Axboe
2007-05-10 10:21 ` [PATCH 4/13] block: " Jens Axboe
2007-05-10 10:21 ` [PATCH 5/13] scsi: " Jens Axboe
2007-05-10 10:21 ` [PATCH 6/13] i386 dma_map_sg: " Jens Axboe
2007-05-10 10:21 ` [PATCH 7/13] i386 sg: add support for chaining scatterlists Jens Axboe
2007-05-10 10:43 ` Andrew Morton
2007-05-10 10:44 ` Jens Axboe [this message]
2007-05-10 10:46 ` Jens Axboe
2007-05-10 10:52 ` Andrew Morton
2007-05-10 11:21 ` Jens Axboe
2007-05-10 10:59 ` Benny Halevy
2007-05-10 11:23 ` Jens Axboe
2007-05-10 10:21 ` [PATCH 8/13] x86-64: update iommu/dma mapping functions to sg helpers Jens Axboe
2007-05-10 10:21 ` [PATCH 9/13] [PATCH] x86-64: enable sg chaining Jens Axboe
2007-05-10 10:21 ` [PATCH 10/13] scsi: simplify scsi_free_sgtable() Jens Axboe
2007-05-10 10:21 ` [PATCH 11/13] SCSI: support for allocating large scatterlists Jens Axboe
2007-05-10 10:48 ` Andrew Morton
2007-05-10 10:52 ` Jens Axboe
2007-05-10 12:38 ` Alan Cox
2007-05-10 10:21 ` [PATCH 12/13] ll_rw_blk: temporarily enable max_segments tweaking Jens Axboe
2007-05-10 10:49 ` Andrew Morton
2007-05-10 11:20 ` Jens Axboe
2007-05-10 10:21 ` [PATCH 13/13] scsi drivers: sg chaining Jens Axboe
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=20070510104454.GL4629@kernel.dk \
--to=jens.axboe@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
/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.