[GIT PULL] MMC updates for 2.6.27-rc1 - Kernel

This is a discussion on [GIT PULL] MMC updates for 2.6.27-rc1 - Kernel ; Linus, please pull from git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc.git for-linus to receive the following updates: drivers/mmc/host/au1xmmc.c | 54 ++++++++++++++++++++++++++++++++++--------- drivers/mmc/host/pxamci.c | 2 +- drivers/mmc/host/s3cmci.c | 50 +++++++++++++++++++++++++--------------- 3 files changed, 74 insertions(+), 32 deletions(-) Ben Dooks (2): s3cmci: fixes for section mismatch warnings s3cmci: ...

+ Reply to Thread
Results 1 to 7 of 7

Thread: [GIT PULL] MMC updates for 2.6.27-rc1

  1. [GIT PULL] MMC updates for 2.6.27-rc1

    Linus, please pull from

    git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc.git for-linus

    to receive the following updates:

    drivers/mmc/host/au1xmmc.c | 54 ++++++++++++++++++++++++++++++++++---------
    drivers/mmc/host/pxamci.c | 2 +-
    drivers/mmc/host/s3cmci.c | 50 +++++++++++++++++++++++++---------------
    3 files changed, 74 insertions(+), 32 deletions(-)

    Ben Dooks (2):
    s3cmci: fixes for section mismatch warnings
    s3cmci: ensure host stopped on machine shutdown

    Karl Beldan (1):
    pxamci: trivial fix of DMA alignment register bit clearing

    Manuel Lauss (1):
    au1xmmc: suspend/resume implementation

    --
    -- Pierre Ossman

    Linux kernel, MMC maintainer http://www.kernel.org
    rdesktop, core developer http://www.rdesktop.org

    WARNING: This correspondence is being monitored by the
    Swedish government. Make sure your server uses encryption
    for SMTP traffic and consider using PGP for end-to-end
    encryption.

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v2.0.9 (GNU/Linux)

    iEYEARECAAYFAkiBLlIACgkQ7b8eESbyJLhIcACgjzPeSfgtq3 scU2hLdEPxJMgL
    NEwAoIi+RAR6LfK6gDM9Z3wBw9XYHDso
    =i8Ys
    -----END PGP SIGNATURE-----


  2. Re: [GIT PULL] MMC updates for 2.6.27-rc1

    On Sat, 19 Jul 2008 01:59:11 +0200
    Pierre Ossman wrote:

    > Linus, please pull from
    >
    > git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc.git for-linus
    >


    Since you haven't pulled yet, I've updated the list of patches to the
    following set:

    MAINTAINERS | 5 +-
    drivers/mmc/card/mmc_test.c | 225 ++++++++++++++++++++++++++++++++++++++++++-
    drivers/mmc/card/queue.c | 97 ++++++-------------
    drivers/mmc/host/au1xmmc.c | 54 ++++++++---
    drivers/mmc/host/pxamci.c | 2 +-
    drivers/mmc/host/s3cmci.c | 50 ++++++----
    drivers/mmc/host/sdhci.c | 167 ++++++++++++++------------------
    drivers/mmc/host/sdhci.h | 7 +-
    include/linux/scatterlist.h | 38 +++++++
    lib/scatterlist.c | 176 +++++++++++++++++++++++++---------
    10 files changed, 573 insertions(+), 248 deletions(-)

    Ben Dooks (2):
    s3cmci: fixes for section mismatch warnings
    s3cmci: ensure host stopped on machine shutdown

    Karl Beldan (1):
    pxamci: trivial fix of DMA alignment register bit clearing

    Manuel Lauss (1):
    au1xmmc: suspend/resume implementation

    Pierre Ossman (8):
    mmc_test: highmem tests
    mmc_test: test oversized sg lists
    sdhci: add warnings for bad buffers in ADMA path
    sdhci: fix bad warning from commit c8b3e02
    mmc_block: bounce buffer highmem support
    mmc: Remove Russell as primecell mci maintainer
    mmc_test: print message when attaching to card
    sdhci: highmem capable PIO routines

    Tejun Heo (1):
    sg: reimplement sg mapping iterator


    --
    -- Pierre Ossman

    Linux kernel, MMC maintainer http://www.kernel.org
    rdesktop, core developer http://www.rdesktop.org

    WARNING: This correspondence is being monitored by the
    Swedish government. Make sure your server uses encryption
    for SMTP traffic and consider using PGP for end-to-end
    encryption.

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v2.0.9 (GNU/Linux)

    iEYEARECAAYFAkiHK3MACgkQ7b8eESbyJLibsgCg7sRHnwVjvW X1gOVhAsmHVivP
    RJ8AoKW0gbRdTleOSwa5BzJ053tB81xY
    =j/Cb
    -----END PGP SIGNATURE-----


  3. Re: [GIT PULL] MMC updates for 2.6.27-rc1



    On Wed, 23 Jul 2008, Pierre Ossman wrote:
    >
    > include/linux/scatterlist.h | 38 +++++++
    > lib/scatterlist.c | 176 +++++++++++++++++++++++++---------
    >
    > Tejun Heo (1):
    > sg: reimplement sg mapping iterator


    I'd really have been a lot happier about this one if it had had a few
    Acked-by's from people like Jens and James.

    But I pulled, and pushed out. I think Jens is on vacation, but I'm adding
    him to the cc anyway.

    Linus
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  4. Re: [GIT PULL] MMC updates for 2.6.27-rc1

    On Wed, 2008-07-23 at 12:08 -0700, Linus Torvalds wrote:
    >
    > On Wed, 23 Jul 2008, Pierre Ossman wrote:
    > >
    > > include/linux/scatterlist.h | 38 +++++++
    > > lib/scatterlist.c | 176 +++++++++++++++++++++++++---------
    > >
    > > Tejun Heo (1):
    > > sg: reimplement sg mapping iterator

    >
    > I'd really have been a lot happier about this one if it had had a few
    > Acked-by's from people like Jens and James.
    >
    > But I pulled, and pushed out. I think Jens is on vacation, but I'm adding
    > him to the cc anyway.


    I was on the cc list, just not really paying attention. Anyway, I've
    copied tomo who did the previous scatterlist work. It actually looks
    fine to me other than a technical API violation: kunmap_atomic is
    supposed to be called on the page virtual address without offset. I
    think this is irrelevant since all implementations look to mask out the
    offset bits anyway.

    James

    ---

    >From 137d3edb48425f82a6a4226b664f90ed5e42eea5 Mon Sep 17 00:00:00 2001

    From: Tejun Heo
    Date: Sat, 19 Jul 2008 23:03:35 +0900
    Subject: sg: reimplement sg mapping iterator

    This is alternative implementation of sg content iterator introduced
    by commit 83e7d317... from Pierre Ossman in next-20080716. As there's
    already an sg iterator which iterates over sg entries themselves, name
    this sg_mapping_iterator.

    Slightly edited description from the original implementation follows.

    Iteration over a sg list is not that trivial when you take into
    account that memory pages might have to be mapped before being used.
    Unfortunately, that means that some parts of the kernel restrict
    themselves to directly accesible memory just to not have to deal with
    the mess.

    This patch adds a simple iterator system that allows any code to
    easily traverse an sg list and not have to deal with all the details.
    The user can decide to consume part of the iteration. Also, iteration
    can be stopped and resumed later if releasing the kmap between
    iteration steps is necessary. These features are useful to implement
    piecemeal sg copying for interrupt drive PIO for example.

    Signed-off-by: Tejun Heo
    Signed-off-by: Pierre Ossman
    ---
    include/linux/scatterlist.h | 38 +++++++++
    lib/scatterlist.c | 176 +++++++++++++++++++++++++++++++-----------
    2 files changed, 168 insertions(+), 46 deletions(-)

    diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h
    index 71fc813..e599698 100644
    --- a/include/linux/scatterlist.h
    +++ b/include/linux/scatterlist.h
    @@ -224,4 +224,42 @@ size_t sg_copy_to_buffer(struct scatterlist *sgl, unsigned int nents,
    */
    #define SG_MAX_SINGLE_ALLOC (PAGE_SIZE / sizeof(struct scatterlist))

    +
    +/*
    + * Mapping sg iterator
    + *
    + * Iterates over sg entries mapping page-by-page. On each successful
    + * iteration, @miter->page points to the mapped page and
    + * @miter->length bytes of data can be accessed at @miter->addr. As
    + * long as an interation is enclosed between start and stop, the user
    + * is free to choose control structure and when to stop.
    + *
    + * @miter->consumed is set to @miter->length on each iteration. It
    + * can be adjusted if the user can't consume all the bytes in one go.
    + * Also, a stopped iteration can be resumed by calling next on it.
    + * This is useful when iteration needs to release all resources and
    + * continue later (e.g. at the next interrupt).
    + */
    +
    +#define SG_MITER_ATOMIC (1 << 0) /* use kmap_atomic */
    +
    +struct sg_mapping_iter {
    + /* the following three fields can be accessed directly */
    + struct page *page; /* currently mapped page */
    + void *addr; /* pointer to the mapped area */
    + size_t length; /* length of the mapped area */
    + size_t consumed; /* number of consumed bytes */
    +
    + /* these are internal states, keep away */
    + struct scatterlist *__sg; /* current entry */
    + unsigned int __nents; /* nr of remaining entries */
    + unsigned int __offset; /* offset within sg */
    + unsigned int __flags;
    +};
    +
    +void sg_miter_start(struct sg_mapping_iter *miter, struct scatterlist *sgl,
    + unsigned int nents, unsigned int flags);
    +bool sg_miter_next(struct sg_mapping_iter *miter);
    +void sg_miter_stop(struct sg_mapping_iter *miter);
    +
    #endif /* _LINUX_SCATTERLIST_H */
    diff --git a/lib/scatterlist.c b/lib/scatterlist.c
    index b80c211..876ba6d 100644
    --- a/lib/scatterlist.c
    +++ b/lib/scatterlist.c
    @@ -295,6 +295,117 @@ int sg_alloc_table(struct sg_table *table, unsigned int nents, gfp_t gfp_mask)
    EXPORT_SYMBOL(sg_alloc_table);

    /**
    + * sg_miter_start - start mapping iteration over a sg list
    + * @miter: sg mapping iter to be started
    + * @sgl: sg list to iterate over
    + * @nents: number of sg entries
    + *
    + * Description:
    + * Starts mapping iterator @miter.
    + *
    + * Context:
    + * Don't care.
    + */
    +void sg_miter_start(struct sg_mapping_iter *miter, struct scatterlist *sgl,
    + unsigned int nents, unsigned int flags)
    +{
    + memset(miter, 0, sizeof(struct sg_mapping_iter));
    +
    + miter->__sg = sgl;
    + miter->__nents = nents;
    + miter->__offset = 0;
    + miter->__flags = flags;
    +}
    +EXPORT_SYMBOL(sg_miter_start);
    +
    +/**
    + * sg_miter_next - proceed mapping iterator to the next mapping
    + * @miter: sg mapping iter to proceed
    + *
    + * Description:
    + * Proceeds @miter@ to the next mapping. @miter@ should have been
    + * started using sg_miter_start(). On successful return,
    + * @miter@->page, @miter@->addr and @miter@->length point to the
    + * current mapping.
    + *
    + * Context:
    + * IRQ disabled if SG_MITER_ATOMIC. IRQ must stay disabled till
    + * @miter@ is stopped. May sleep if !SG_MITER_ATOMIC.
    + *
    + * Returns:
    + * true if @miter contains the next mapping. false if end of sg
    + * list is reached.
    + */
    +bool sg_miter_next(struct sg_mapping_iter *miter)
    +{
    + unsigned int off, len;
    +
    + /* check for end and drop resources from the last iteration */
    + if (!miter->__nents)
    + return false;
    +
    + sg_miter_stop(miter);
    +
    + /* get to the next sg if necessary. __offset is adjusted by stop */
    + if (miter->__offset == miter->__sg->length && --miter->__nents) {
    + miter->__sg = sg_next(miter->__sg);
    + miter->__offset = 0;
    + }
    +
    + /* map the next page */
    + off = miter->__sg->offset + miter->__offset;
    + len = miter->__sg->length - miter->__offset;
    +
    + miter->page = nth_page(sg_page(miter->__sg), off >> PAGE_SHIFT);
    + off &= ~PAGE_MASK;
    + miter->length = min_t(unsigned int, len, PAGE_SIZE - off);
    + miter->consumed = miter->length;
    +
    + if (miter->__flags & SG_MITER_ATOMIC)
    + miter->addr = kmap_atomic(miter->page, KM_BIO_SRC_IRQ) + off;
    + else
    + miter->addr = kmap(miter->page) + off;
    +
    + return true;
    +}
    +EXPORT_SYMBOL(sg_miter_next);
    +
    +/**
    + * sg_miter_stop - stop mapping iteration
    + * @miter: sg mapping iter to be stopped
    + *
    + * Description:
    + * Stops mapping iterator @miter. @miter should have been started
    + * started using sg_miter_start(). A stopped iteration can be
    + * resumed by calling sg_miter_next() on it. This is useful when
    + * resources (kmap) need to be released during iteration.
    + *
    + * Context:
    + * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise.
    + */
    +void sg_miter_stop(struct sg_mapping_iter *miter)
    +{
    + WARN_ON(miter->consumed > miter->length);
    +
    + /* drop resources from the last iteration */
    + if (miter->addr) {
    + miter->__offset += miter->consumed;
    +
    + if (miter->__flags & SG_MITER_ATOMIC) {
    + WARN_ON(!irqs_disabled());
    + kunmap_atomic(miter->addr, KM_BIO_SRC_IRQ);
    + } else
    + kunmap(miter->addr);
    +
    + miter->page = NULL;
    + miter->addr = NULL;
    + miter->length = 0;
    + miter->consumed = 0;
    + }
    +}
    +EXPORT_SYMBOL(sg_miter_stop);
    +
    +/**
    * sg_copy_buffer - Copy data between a linear buffer and an SG list
    * @sgl: The SG list
    * @nents: Number of SG entries
    @@ -309,56 +420,29 @@ EXPORT_SYMBOL(sg_alloc_table);
    static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents,
    void *buf, size_t buflen, int to_buffer)
    {
    - struct scatterlist *sg;
    - size_t buf_off = 0;
    - int i;
    -
    - WARN_ON(!irqs_disabled());
    -
    - for_each_sg(sgl, sg, nents, i) {
    - struct page *page;
    - int n = 0;
    - unsigned int sg_off = sg->offset;
    - unsigned int sg_copy = sg->length;
    -
    - if (sg_copy > buflen)
    - sg_copy = buflen;
    - buflen -= sg_copy;
    -
    - while (sg_copy > 0) {
    - unsigned int page_copy;
    - void *p;
    -
    - page_copy = PAGE_SIZE - sg_off;
    - if (page_copy > sg_copy)
    - page_copy = sg_copy;
    -
    - page = nth_page(sg_page(sg), n);
    - p = kmap_atomic(page, KM_BIO_SRC_IRQ);
    -
    - if (to_buffer)
    - memcpy(buf + buf_off, p + sg_off, page_copy);
    - else {
    - memcpy(p + sg_off, buf + buf_off, page_copy);
    - flush_kernel_dcache_page(page);
    - }
    -
    - kunmap_atomic(p, KM_BIO_SRC_IRQ);
    -
    - buf_off += page_copy;
    - sg_off += page_copy;
    - if (sg_off == PAGE_SIZE) {
    - sg_off = 0;
    - n++;
    - }
    - sg_copy -= page_copy;
    + unsigned int offset = 0;
    + struct sg_mapping_iter miter;
    +
    + sg_miter_start(&miter, sgl, nents, SG_MITER_ATOMIC);
    +
    + while (sg_miter_next(&miter) && offset < buflen) {
    + unsigned int len;
    +
    + len = min(miter.length, buflen - offset);
    +
    + if (to_buffer)
    + memcpy(buf + offset, miter.addr, len);
    + else {
    + memcpy(miter.addr, buf + offset, len);
    + flush_kernel_dcache_page(miter.page);
    }

    - if (!buflen)
    - break;
    + offset += len;
    }

    - return buf_off;
    + sg_miter_stop(&miter);
    +
    + return offset;
    }

    /**
    --
    1.5.5.1



    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  5. Re: [GIT PULL] MMC updates for 2.6.27-rc1

    On Wed, 23 Jul 2008 12:08:01 -0700 (PDT)
    Linus Torvalds wrote:

    >
    >
    > On Wed, 23 Jul 2008, Pierre Ossman wrote:
    > >
    > > include/linux/scatterlist.h | 38 +++++++
    > > lib/scatterlist.c | 176 +++++++++++++++++++++++++---------
    > >
    > > Tejun Heo (1):
    > > sg: reimplement sg mapping iterator

    >
    > I'd really have been a lot happier about this one if it had had a few
    > Acked-by's from people like Jens and James.
    >
    > But I pulled, and pushed out. I think Jens is on vacation, but I'm adding
    > him to the cc anyway.


    Yeah, I was hoping to get Jens' input on this aswell, but this fixes
    problems in the sdhci driver so it was pushed in the hope that he won't
    NAK it too badly when he gets back.

    (James just got casually poked, but I wasn't even aware he was a
    suitable person for this. lib/ and kernel/ are generally a bit
    problematic when it comes to determining maintainer :/)

    Rgds
    --
    -- Pierre Ossman

    Linux kernel, MMC maintainer http://www.kernel.org
    rdesktop, core developer http://www.rdesktop.org

    WARNING: This correspondence is being monitored by the
    Swedish government. Make sure your server uses encryption
    for SMTP traffic and consider using PGP for end-to-end
    encryption.

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v2.0.9 (GNU/Linux)

    iEYEARECAAYFAkiHphkACgkQ7b8eESbyJLjmsACgrqw8/pUIMP6Hdo0oSTmKif03
    B7oAoNOL6lvF0R5OoXLZ+R+ciQ0B8LhE
    =P9/e
    -----END PGP SIGNATURE-----


  6. Re: [GIT PULL] MMC updates for 2.6.27-rc1

    On Wed, Jul 23 2008, Pierre Ossman wrote:
    > On Wed, 23 Jul 2008 12:08:01 -0700 (PDT)
    > Linus Torvalds wrote:
    >
    > >
    > >
    > > On Wed, 23 Jul 2008, Pierre Ossman wrote:
    > > >
    > > > include/linux/scatterlist.h | 38 +++++++
    > > > lib/scatterlist.c | 176 +++++++++++++++++++++++++---------
    > > >
    > > > Tejun Heo (1):
    > > > sg: reimplement sg mapping iterator

    > >
    > > I'd really have been a lot happier about this one if it had had a few
    > > Acked-by's from people like Jens and James.
    > >
    > > But I pulled, and pushed out. I think Jens is on vacation, but I'm adding
    > > him to the cc anyway.

    >
    > Yeah, I was hoping to get Jens' input on this aswell, but this fixes
    > problems in the sdhci driver so it was pushed in the hope that he won't
    > NAK it too badly when he gets back.
    >
    > (James just got casually poked, but I wasn't even aware he was a
    > suitable person for this. lib/ and kernel/ are generally a bit
    > problematic when it comes to determining maintainer :/)


    (still pretty much off line, though not completely without internet
    anymore :-)

    The scatterlist iter commit looks sane to me. It's too late for an ack,
    but I have reviewed it now.

    --
    Jens Axboe

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  7. Re: [GIT PULL] MMC updates for 2.6.27-rc1

    On Wed, 23 Jul 2008 23:43:50 +0200
    Pierre Ossman wrote:

    > On Wed, 23 Jul 2008 12:08:01 -0700 (PDT)
    > Linus Torvalds wrote:
    >
    > >
    > >
    > > On Wed, 23 Jul 2008, Pierre Ossman wrote:
    > > >
    > > > include/linux/scatterlist.h | 38 +++++++
    > > > lib/scatterlist.c | 176 +++++++++++++++++++++++++---------
    > > >
    > > > Tejun Heo (1):
    > > > sg: reimplement sg mapping iterator

    > >
    > > I'd really have been a lot happier about this one if it had had a few
    > > Acked-by's from people like Jens and James.
    > >
    > > But I pulled, and pushed out. I think Jens is on vacation, but I'm adding
    > > him to the cc anyway.

    >
    > Yeah, I was hoping to get Jens' input on this aswell, but this fixes
    > problems in the sdhci driver so it was pushed in the hope that he won't
    > NAK it too badly when he gets back.
    >
    > (James just got casually poked, but I wasn't even aware he was a
    > suitable person for this. lib/ and kernel/ are generally a bit
    > problematic when it comes to determining maintainer :/)


    I think that you can see that James pushed the old sg buffer helper
    functions from the git log (because it was invented for SCSI drivers).

    Anyway, the new helper functions look fine though I'm too late for
    reviewing it.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread