All of lore.kernel.org
 help / color / mirror / Atom feed
From: "S, Venkatraman" <svenkatr@ti.com>
To: Per Forlin <per.forlin@linaro.org>
Cc: linaro-dev@lists.linaro.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Santosh <santosh.shilimkar@ti.com>,
	Balaji T Krishnamoorthy <balajitk@ti.com>,
	Sourav Poddar <sourav.poddar@ti.com>, Chris Ball <cjb@laptop.org>,
	Nicolas Pitre <nicolas.pitre@linaro.org>
Subject: Re: [PATCH] mmc: omap_hsmmc: DMA unmap only once in case of MMC error
Date: Fri, 2 Sep 2011 00:49:21 +0530	[thread overview]
Message-ID: <CANfBPZ-azGV0H7asRHD5+vdFjCkrx=E2Oypnrk_SW9K5+DwTLQ@mail.gmail.com> (raw)
In-Reply-To: <1314569323-6886-1-git-send-email-per.forlin@linaro.org>

On Mon, Aug 29, 2011 at 3:38 AM, Per Forlin <per.forlin@linaro.org> wrote:
> Reported by Russell King:
> ------------
> mmcblk0: error -84 transferring data, sector 149201, nr 64,
> cmd response 0x900, card status 0xb00
> mmcblk0: retrying using single block read
>
> WARNING: at /home/rmk/git/linux-2.6-rmk/lib/dma-debug.c:811 check_unmap
> omap_hsmmc omap_hsmmc.0: DMA-API: device driver tries to free DMA memory
> it has not allocated [device address=0x0000000080933000] [size=20480 bytes]
> -------------
>
> In case of an error dma_unmap() is issued in omap_hsmmc_dma_cleanup()
> and then again in omap_hsmmc_post_req(). Resolve this by clearing the
> host_cookie to indicate there is no DMA mapped memory to unmap.
>
> Signed-off-by: Per Forlin <per.forlin@linaro.org>
> ---
> Bug fix on 3.1-rc3
>
>  drivers/mmc/host/omap_hsmmc.c |    7 +++++--
>  1 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
> index 21e4a79..31d9817 100644
> --- a/drivers/mmc/host/omap_hsmmc.c
> +++ b/drivers/mmc/host/omap_hsmmc.c
> @@ -1011,6 +1011,7 @@ static void omap_hsmmc_dma_cleanup(struct omap_hsmmc_host *host, int errno)
>                        host->data->sg_len,
>                        omap_hsmmc_get_dma_dir(host, host->data));
>                omap_free_dma(dma_ch);
> +               host->data->host_cookie = 0;
>        }
>        host->data = NULL;
>  }
> @@ -1576,8 +1577,10 @@ static void omap_hsmmc_post_req(struct mmc_host *mmc, struct mmc_request *mrq,
>        struct mmc_data *data = mrq->data;
>
>        if (host->use_dma) {
> -               dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
> -                            omap_hsmmc_get_dma_dir(host, data));
> +               if (data->host_cookie)
> +                       dma_unmap_sg(mmc_dev(host->mmc), data->sg,
> +                                    data->sg_len,
> +                                    omap_hsmmc_get_dma_dir(host, data));
>                data->host_cookie = 0;
>        }
>  }
> --
> 1.7.4.1
>
>

I just posted a patch [1] which just consolidates all unmapping to
just post_req.
This would obviously prevent double unmapping, and keeps all the related
dma operations at a single place. Let me know if that works better.

[1]: http://marc.info/?l=linux-mmc&m=131490406920616&w=2

WARNING: multiple messages have this Message-ID (diff)
From: svenkatr@ti.com (S, Venkatraman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] mmc: omap_hsmmc: DMA unmap only once in case of MMC error
Date: Fri, 2 Sep 2011 00:49:21 +0530	[thread overview]
Message-ID: <CANfBPZ-azGV0H7asRHD5+vdFjCkrx=E2Oypnrk_SW9K5+DwTLQ@mail.gmail.com> (raw)
In-Reply-To: <1314569323-6886-1-git-send-email-per.forlin@linaro.org>

On Mon, Aug 29, 2011 at 3:38 AM, Per Forlin <per.forlin@linaro.org> wrote:
> Reported by Russell King:
> ------------
> mmcblk0: error -84 transferring data, sector 149201, nr 64,
> cmd response 0x900, card status 0xb00
> mmcblk0: retrying using single block read
>
> WARNING: at /home/rmk/git/linux-2.6-rmk/lib/dma-debug.c:811 check_unmap
> omap_hsmmc omap_hsmmc.0: DMA-API: device driver tries to free DMA memory
> it has not allocated [device address=0x0000000080933000] [size=20480 bytes]
> -------------
>
> In case of an error dma_unmap() is issued in omap_hsmmc_dma_cleanup()
> and then again in omap_hsmmc_post_req(). Resolve this by clearing the
> host_cookie to indicate there is no DMA mapped memory to unmap.
>
> Signed-off-by: Per Forlin <per.forlin@linaro.org>
> ---
> Bug fix on 3.1-rc3
>
> ?drivers/mmc/host/omap_hsmmc.c | ? ?7 +++++--
> ?1 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
> index 21e4a79..31d9817 100644
> --- a/drivers/mmc/host/omap_hsmmc.c
> +++ b/drivers/mmc/host/omap_hsmmc.c
> @@ -1011,6 +1011,7 @@ static void omap_hsmmc_dma_cleanup(struct omap_hsmmc_host *host, int errno)
> ? ? ? ? ? ? ? ? ? ? ? ?host->data->sg_len,
> ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_dma_dir(host, host->data));
> ? ? ? ? ? ? ? ?omap_free_dma(dma_ch);
> + ? ? ? ? ? ? ? host->data->host_cookie = 0;
> ? ? ? ?}
> ? ? ? ?host->data = NULL;
> ?}
> @@ -1576,8 +1577,10 @@ static void omap_hsmmc_post_req(struct mmc_host *mmc, struct mmc_request *mrq,
> ? ? ? ?struct mmc_data *data = mrq->data;
>
> ? ? ? ?if (host->use_dma) {
> - ? ? ? ? ? ? ? dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_dma_dir(host, data));
> + ? ? ? ? ? ? ? if (data->host_cookie)
> + ? ? ? ? ? ? ? ? ? ? ? dma_unmap_sg(mmc_dev(host->mmc), data->sg,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?data->sg_len,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_dma_dir(host, data));
> ? ? ? ? ? ? ? ?data->host_cookie = 0;
> ? ? ? ?}
> ?}
> --
> 1.7.4.1
>
>

I just posted a patch [1] which just consolidates all unmapping to
just post_req.
This would obviously prevent double unmapping, and keeps all the related
dma operations at a single place. Let me know if that works better.

[1]: http://marc.info/?l=linux-mmc&m=131490406920616&w=2

  reply	other threads:[~2011-09-01 19:19 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-28 22:08 [PATCH] mmc: omap_hsmmc: DMA unmap only once in case of MMC error Per Forlin
2011-08-28 22:08 ` Per Forlin
2011-08-28 22:08 ` Per Forlin
2011-09-01 19:19 ` S, Venkatraman [this message]
2011-09-01 19:19   ` S, Venkatraman
2011-09-12  8:34   ` Per Forlin
2011-09-12  8:34     ` Per Forlin

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='CANfBPZ-azGV0H7asRHD5+vdFjCkrx=E2Oypnrk_SW9K5+DwTLQ@mail.gmail.com' \
    --to=svenkatr@ti.com \
    --cc=balajitk@ti.com \
    --cc=cjb@laptop.org \
    --cc=linaro-dev@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=nicolas.pitre@linaro.org \
    --cc=per.forlin@linaro.org \
    --cc=santosh.shilimkar@ti.com \
    --cc=sourav.poddar@ti.com \
    /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.