All of lore.kernel.org
 help / color / mirror / Atom feed
From: s.hauer@pengutronix.de (Sascha Hauer)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: mx3: Fix a race condition in mxcmmc
Date: Mon, 17 May 2010 11:45:12 +0200	[thread overview]
Message-ID: <20100517094512.GS31199@pengutronix.de> (raw)
In-Reply-To: <20100514100742.GK30801@buzzloop.caiaq.de>

On Fri, May 14, 2010 at 12:07:42PM +0200, Daniel Mack wrote:
> Sascha, any chance to get this in for the next merge window?

Applied to mxc-master. Sorry for the delay.

Sascha

> 
> Thanks,
> Daniel
> 
> On Sat, May 08, 2010 at 12:24:05PM +0200, Daniel Mack wrote:
> > Any comments on this one?
> > 
> > Thanks,
> > Daniel
> > 
> > On Mon, May 03, 2010 at 01:26:42PM +0200, Daniel Mack wrote:
> > > 
> > > On Tue, Apr 27, 2010 at 12:24:42PM +0200, Daniel Mack wrote:
> > > > From cefcdab08d1c9636c4a7290bc2bbe937d051bce4 Mon Sep 17 00:00:00 2001
> > > > From: Volker Ernst <volker.ernst@txtr.com>
> > > > Date: Mon, 26 Apr 2010 22:51:07 +0200
> > > > Subject: [PATCH] ARM: mx3: Fix a race condition in mxcmmc
> > > > 
> > > > This fixes a race condition regarding interrupt bits in the SDHC
> > > > controller driver code.
> > > > 
> > > > In case of PIO-transfer it does not clear SDHC-status bit#11/12
> > > > in the INT-handler anymore. INT-handler might be called during
> > > > an ongoing PIO-data-transfer (with some other INT-flag set) and
> > > > PIO-transfer depends on these bits being set to detect the end
> > > > of the data-transfer. This also means that at the end of PIO-
> > > > transfer that PIO-software has to clear these bits itself.
> > > > 
> > > > However in case of DMA-transfer these bits have to be cleared
> > > > in the INT-handler, because they are used to generate INTs then.
> > > > 
> > > > Works solid, no more problems here, can transfer big files.
> > > > 
> > > > Signed-off-by: Volker Ernst <volker.ernst@txtr.com>
> > > > Acked-by: Daniel Mack <daniel@caiaq.de>
> > > > Cc: Andy Green <andy@warmcat.com>
> > > > ---
> > > >  drivers/mmc/host/mxcmmc.c |   13 ++++++++++++-
> > > >  1 files changed, 12 insertions(+), 1 deletions(-)
> > > > 
> > > > diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
> > > > index 2c53024..ec18e3b 100644
> > > > --- a/drivers/mmc/host/mxcmmc.c
> > > > +++ b/drivers/mmc/host/mxcmmc.c
> > > > @@ -489,6 +489,9 @@ static void mxcmci_datawork(struct work_struct *work)
> > > >  	struct mxcmci_host *host = container_of(work, struct mxcmci_host,
> > > >  						  datawork);
> > > >  	int datastat = mxcmci_transfer_data(host);
> > > > +
> > > > +	writel(STATUS_READ_OP_DONE | STATUS_WRITE_OP_DONE,
> > > > +		host->base + MMC_REG_STATUS);
> > > >  	mxcmci_finish_data(host, datastat);
> > > >  
> > > >  	if (host->req->stop) {
> > > > @@ -553,7 +556,8 @@ static irqreturn_t mxcmci_irq(int irq, void *devid)
> > > >  	u32 stat;
> > > >  
> > > >  	stat = readl(host->base + MMC_REG_STATUS);
> > > > -	writel(stat & ~STATUS_SDIO_INT_ACTIVE, host->base + MMC_REG_STATUS);
> > > > +	writel(stat & ~(STATUS_SDIO_INT_ACTIVE | STATUS_DATA_TRANS_DONE |
> > > > +			STATUS_WRITE_OP_DONE), host->base + MMC_REG_STATUS);
> > > >  
> > > >  	dev_dbg(mmc_dev(host->mmc), "%s: 0x%08x\n", __func__, stat);
> > > >  
> > > > @@ -561,6 +565,13 @@ static irqreturn_t mxcmci_irq(int irq, void *devid)
> > > >  	sdio_irq = (stat & STATUS_SDIO_INT_ACTIVE) && host->use_sdio;
> > > >  	spin_unlock_irqrestore(&host->lock, flags);
> > > >  
> > > > +#ifdef HAS_DMA
> > > > +	if (mxcmci_use_dma(host) &&
> > > > +	    (stat & (STATUS_READ_OP_DONE | STATUS_WRITE_OP_DONE)))
> > > > +		writel(STATUS_READ_OP_DONE | STATUS_WRITE_OP_DONE,
> > > > +			host->base + MMC_REG_STATUS);
> > > > +#endif
> > > > +
> > > >  	if (sdio_irq) {
> > > >  		writel(STATUS_SDIO_INT_ACTIVE, host->base + MMC_REG_STATUS);
> > > >  		mmc_signal_sdio_irq(host->mmc);
> > > > -- 
> > > > 1.7.0.3
> > > > 
> > > > 
> > > > _______________________________________________
> > > > linux-arm-kernel mailing list
> > > > linux-arm-kernel at lists.infradead.org
> > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> > > 
> > > _______________________________________________
> > > linux-arm-kernel mailing list
> > > linux-arm-kernel at lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> > 
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel at lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

  reply	other threads:[~2010-05-17  9:45 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-27  7:50 [PATCH] ARM: mx3: Fix a race condition in mxcmmc Daniel Mack
2010-04-27 10:07 ` Paulius Zaleckas
2010-04-27 10:14 ` Sergei Shtylyov
2010-04-27 10:24 ` Daniel Mack
2010-05-03 11:26   ` Daniel Mack
2010-05-08 10:24     ` Daniel Mack
2010-05-14 10:07       ` Daniel Mack
2010-05-17  9:45         ` Sascha Hauer [this message]
  -- strict thread matches above, loose matches on Subject: below --
2010-04-26 20:51 Volker Ernst
2010-04-26 20:51 Volker Ernst

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=20100517094512.GS31199@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.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.