All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: HU TAO-TGHK48 <taohu@motorola.com>
Cc: linux-omap@vger.kernel.org,
	Yang Fei-AFY095 <fei.yang@motorola.com>,
	jon-hunter@ti.com, Zhou Ming-a17711 <a17711@motorola.com>,
	"Ye Yuan.Bo-A22116" <yuan-bo.ye@motorola.com>,
	Venkatraman S <svenkatr@ti.com>
Subject: Re: [PATCH] Fix race condition in omap_request_dma()
Date: Mon, 9 Nov 2009 16:40:29 -0800	[thread overview]
Message-ID: <20091110004028.GO23952@atomide.com> (raw)
In-Reply-To: <F12CE1A68F023D498A2691C7B539311503B81862@ZMY16EXM66.ds.mot.com>

* HU TAO-TGHK48 <taohu@motorola.com> [091106 08:45]:
> Hi, Tony
> 
> Can we merge this patch in?

Yeah, let's try to get that in as a fix.

Tony


> Thanks.
>  
> -Hu Tao
> 
> > -----Original Message-----
> > From: svenkatr@gmail.com [mailto:svenkatr@gmail.com] On 
> > Behalf Of Venkatraman S
> > Sent: Friday, November 06, 2009 8:23 PM
> > To: HU TAO-TGHK48
> > Cc: linux-omap@vger.kernel.org; Tony Lindgren; Yang 
> > Fei-AFY095; jon-hunter@ti.com; Zhou Ming-a17711; Ye Yuan.Bo-A22116
> > Subject: Re: [PATCH] Fix race condition in omap_request_dma()
> > 
> > On Fri, Nov 6, 2009 at 12:45 AM, HU TAO-TGHK48 
> > <taohu@motorola.com> wrote:
> > >
> > > Any new comments?
> > >
> > > -Hu Tao
> > >
> > >
> > I am happy with this version.
> > Regards,
> > 
> > Venkatraman.
> > 
> > >
> > >> -----Original Message-----
> > >> From: linux-omap-owner@vger.kernel.org 
> > >> [mailto:linux-omap-owner@vger.kernel.org] On Behalf Of HU 
> > TAO-TGHK48
> > >> Sent: Saturday, October 31, 2009 5:33 AM
> > >> To: Venkatraman S
> > >> Cc: linux-omap@vger.kernel.org; Tony Lindgren; Yang Fei-AFY095; 
> > >> jon-hunter@ti.com; Zhou Ming-a17711; Ye Yuan.Bo-A22116
> > >> Subject: RE: [PATCH] Fix race condition in omap_request_dma()
> > >>
> > >> Hi, Venkatraman
> > >>
> > >> Agree with you. And just found omap_free_dma() need to be 
> > fixed too.
> > >> New patch attached.
> > >>
> > >> From 7aa22ece591365c2dcd73c799d93781497322ff1 Mon Sep 17 00:00:00 
> > >> 2001
> > >> From: Tao Hu <taohu@motorola.com>
> > >> Date: Fri, 30 Oct 2009 16:24:25 -0500
> > >> Subject: [PATCH] Fix race condition in omap dma driver
> > >>
> > >> The bug could cause irq enable bit of one DMA channel is 
> > cleared/set 
> > >> unexpectedly when 2 (or more) drivers are calling
> > >> omap_request_dma()/omap_free_dma() simultaneously
> > >>
> > >> Signed-off-by: Fei Yang <AFY095@motorola.com>
> > >> Signed-off-by: Tao Hu  <taohu@motorola.com>
> > >> ---
> > >>  arch/arm/plat-omap/dma.c |    6 ++++++
> > >>  1 files changed, 6 insertions(+), 0 deletions(-)
> > >>
> > >> diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c 
> > >> index cd53b28..5767899 100755
> > >> --- a/arch/arm/plat-omap/dma.c
> > >> +++ b/arch/arm/plat-omap/dma.c
> > >> @@ -673,13 +673,16 @@ static inline void disable_lnk(int lch)
> > >>  static inline void omap2_enable_irq_lch(int lch)  {
> > >>       u32 val;
> > >> +     unsigned long flags;
> > >>
> > >>       if (!cpu_class_is_omap2())
> > >>               return;
> > >>
> > >> +     spin_lock_irqsave(&dma_chan_lock, flags);
> > >>       val = dma_read(IRQENABLE_L0);
> > >>       val |= 1 << lch;
> > >>       dma_write(val, IRQENABLE_L0);
> > >> +     spin_unlock_irqrestore(&dma_chan_lock, flags);
> > >>  }
> > >>
> > >>  int omap_request_dma(int dev_id, const char *dev_name, @@ -788,10 
> > >> +791,13 @@ void omap_free_dma(int lch)
> > >>
> > >>       if (cpu_class_is_omap2()) {
> > >>               u32 val;
> > >> +
> > >> +             spin_lock_irqsave(&dma_chan_lock, flags);
> > >>               /* Disable interrupts */
> > >>               val = dma_read(IRQENABLE_L0);
> > >>               val &= ~(1 << lch);
> > >>               dma_write(val, IRQENABLE_L0);
> > >> +             spin_unlock_irqrestore(&dma_chan_lock, flags);
> > >>
> > >>               /* Clear the CSR register and IRQ status register */
> > >>               dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(lch));
> > >> --
> > >> 1.5.4.3
> > >>
> > >>
> > >>
> > >> > -----Original Message-----
> > >> > From: Venkatraman S [mailto:svenkatr@gmail.com]
> > >> > Sent: Saturday, October 31, 2009 1:22 AM
> > >> > To: HU TAO-TGHK48
> > >> > Cc: linux-omap@vger.kernel.org; Tony Lindgren; Yang Fei-AFY095; 
> > >> > jon-hunter@ti.com; Zhou Ming-a17711; Ye Yuan.Bo-A22116
> > >> > Subject: Re: [PATCH] Fix race condition in omap_request_dma()
> > >> >
> > >> > On Fri, Oct 30, 2009 at 9:00 AM, HU TAO-TGHK48 
> > <taohu@motorola.com>
> > >> > wrote:
> > >> > > From a36dac7ee6140ffa23f0adc024964aaf3e266e5f Mon Sep 17
> > >> > 00:00:00 2001
> > >> > > From: Tao Hu <taohu@motorola.com>
> > >> > > Date: Thu, 29 Oct 2009 17:17:21 -0500
> > >> > > Subject: [PATCH] Fix race condition in omap_request_dma()
> > >> > >
> > >> > > The bug could cause irq enable bit of one DMA channel 
> > is cleared 
> > >> > > unexpectedly when 2 (or more) drivers are calling
> > >> > > omap_request_dma() simultaneously
> > >> > >
> > >> > > Signed-off-by: Fei Yang <AFY095@motorola.com>
> > >> > > Signed-off-by: Tao Hu  <taohu@motorola.com>
> > >> > > ---
> > >> > >  arch/arm/plat-omap/dma.c |    2 ++
> > >> > >  1 files changed, 2 insertions(+), 0 deletions(-)
> > >> > >
> > >> > > diff --git a/arch/arm/plat-omap/dma.c
> > >> > b/arch/arm/plat-omap/dma.c index
> > >> > > cd53b28..6895484 100755
> > >> > > --- a/arch/arm/plat-omap/dma.c
> > >> > > +++ b/arch/arm/plat-omap/dma.c
> > >> > > @@ -749,11 +749,13 @@ int omap_request_dma(int dev_id, 
> > const char 
> > >> > > *dev_name,
> > >> > >        }
> > >> > >
> > >> > >        if (cpu_class_is_omap2()) {
> > >> > > +               spin_lock_irqsave(&dma_chan_lock, flags);
> > >> > >                omap2_enable_irq_lch(free_ch);
> > >> > >                omap_enable_channel_irq(free_ch);
> > >> > >                /* Clear the CSR register and IRQ status
> > >> register */
> > >> > >                dma_write(OMAP2_DMA_CSR_CLEAR_MASK, 
> > CSR(free_ch));
> > >> > >                dma_write(1 << free_ch, IRQSTATUS_L0);
> > >> > > +               spin_unlock_irqrestore(&dma_chan_lock, flags);
> > >> > >        }
> > >> >
> > >> > Nice catch. I think the lock needs to be applied only for
> > >> the global
> > >> > registers which are changed using the read - update - 
> > write method.
> > >> > The dma_write to per channel configuration registers need not be 
> > >> > locked.
> > >> > Hence the lock is better placed "within" omap2_enable_irq_lch 
> > >> > function. That way, if it's reused, the locking would also be in 
> > >> > place.
> > >> > Thank you !
> > >> >
> > >> --
> > >> To unsubscribe from this list: send the line "unsubscribe 
> > linux-omap" 
> > >> in the body of a message to majordomo@vger.kernel.org More 
> > majordomo 
> > >> info at  http://vger.kernel.org/majordomo-info.html
> > >>
> > >
> > 
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2009-11-10  0:40 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-30  3:30 [PATCH] Fix race condition in omap_request_dma() HU TAO-TGHK48
2009-10-30 17:22 ` Venkatraman S
2009-10-30 21:33   ` HU TAO-TGHK48
2009-11-05 19:15     ` HU TAO-TGHK48
2009-11-06 12:22       ` Venkatraman S
2009-11-06 16:45         ` HU TAO-TGHK48
2009-11-10  0:40           ` Tony Lindgren [this message]
2009-11-10  0:31     ` [APPLIED] >> > > " Tony Lindgren

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=20091110004028.GO23952@atomide.com \
    --to=tony@atomide.com \
    --cc=a17711@motorola.com \
    --cc=fei.yang@motorola.com \
    --cc=jon-hunter@ti.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=svenkatr@ti.com \
    --cc=taohu@motorola.com \
    --cc=yuan-bo.ye@motorola.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.