All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juha Yrjola <juha.yrjola@solidboot.com>
To: "Shilimkar, Santosh" <santosh.shilimkar@ti.com>
Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: Re: [PATCH] ARM OMAP: Fix race in OMAP2/3 DMA IRQ handling
Date: Thu, 22 Jan 2009 10:13:35 +0200	[thread overview]
Message-ID: <49782AAF.4070506@solidboot.com> (raw)
In-Reply-To: <EAF47CD23C76F840A9E7FCE10091EFAB02A39CE60B@dbde02.ent.ti.com>

Shilimkar, Santosh wrote:
>> --- a/arch/arm/plat-omap/dma.c
>> +++ b/arch/arm/plat-omap/dma.c
>> @@ -1898,11 +1898,11 @@ static int omap2_dma_handle_ch(int ch)
>>  		status = dma_read(CSR(ch));
>>  	}
>>  
>> +	dma_write(status, CSR(ch));
> This is not necessary. Refers line  "dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(ch));" just above.

Yes, the current DMA code is full of inconsistencies and illogic. In 
general, clearing a hard-coded mask of bits in an IRQ status register is 
a nice way to enter a race with the machine. And that's a race you 
cannot win every time, so you'll miss IRQs that you haven't handled yet.

A major cleanup should be done to the DMA code, but that's no reason not 
to fix bugs now.

> It will any way do the job of clearing. In a way, clear done after
> the  callback has no effect since the status reg and global IRQ_enable for
> the particular channel is already disabled before that.

Yes, in a way that completely ignores the code and hardware behaviour.

If you write a 1 to, say, the FRAME bit of the CSR *after* a transfer 
has been completed, *before* handling the event, you lose the CSR value, 
so the channel handling function complains (correctly) about a spurious 
IRQ and refuses to do anything more productive.

If you start a quick transfer from the callback function, the FRAME bit 
*will* get set before control returns from the callback function.

> So dma library is safe from the problem you have described.

Sounds like you're in denial, man. I didn't just randomly send a patch, 
I actually ran into the problem, fixed it, verified it indeed is fixed, 
and only after that did I send it.

Cheers,
Juha

  reply	other threads:[~2009-01-22  8:34 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-21 17:24 [PATCH] ARM OMAP: Fix race in OMAP2/3 DMA IRQ handling Juha Yrjölä
2009-01-22  3:51 ` Shilimkar, Santosh
2009-01-22  8:13   ` Juha Yrjola [this message]
2009-01-23  1:27     ` Tony Lindgren
2009-01-23  4:35     ` Shilimkar, Santosh

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=49782AAF.4070506@solidboot.com \
    --to=juha.yrjola@solidboot.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=santosh.shilimkar@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.