All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
To: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
Cc: "Sosnowski, Maciej" <maciej.sosnowski@intel.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"Williams, Dan J" <dan.j.williams@intel.com>
Subject: Re: [PATCH 2/2] dw_dmac: add cyclic API to DW DMA driver
Date: Wed, 1 Apr 2009 11:11:16 +0200	[thread overview]
Message-ID: <20090401111116.7c604530@hcegtvedt> (raw)
In-Reply-To: <20090401102830.6a749ad2@hskinnemoen-d830>

On Wed, 1 Apr 2009 10:28:30 +0200
Haavard Skinnemoen <haavard.skinnemoen@atmel.com> wrote:

> Sosnowski, Maciej wrote:
> > > +void dw_dma_cyclic_stop(struct dma_chan *chan)
> > > +{
> > > +	struct dw_dma_chan	*dwc = to_dw_dma_chan(chan);
> > > +	struct dw_dma		*dw =
> > > to_dw_dma(dwc->chan.device); +
> > > +	channel_clear_bit(dw, CH_EN, dwc->mask);
> > > +	while (dma_readl(dw, CH_EN) & dwc->mask)
> > > +		cpu_relax();
> > > +}  
> > 
> > Don't you need locks in dw_dma_cyclic_stop?
> 
> Good question. On one hand, if cyclic_start() can race with
> cyclic_stop(), the client probably has more serious issues to deal
> with. On the other hand, if something ever manages to set the CH_EN
> bit at the wrong moment, the loop may never finish.
> 
> So it's probably safest to wrap it in spin_lock_bh(). You should
> probably add a note that this function can not be called from
> interrupt context too.
> 

The problem then is when calling cyclic_stop from the trigger function
in an ALSA driver.

http://www.kernel.org/pub/linux/kernel/people/tiwai/docs/writing-an-alsa-driver/ch05s06.html#pcm-interface-operators-trigger-callback

This callback is atomic, and with interrupts disabled. So using
spin_lock_bh() is AFAICT not allowed.

I am going to brush up the interface and document that the _stop and
_start interface has to be called with interrupts disabled. Will post a
v2 shortly.

-- 
Best regards,
Hans-Christian Egtvedt

  reply	other threads:[~2009-04-01  9:11 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-24 11:35 [PATCH 1/2] dw_dmac: set CAP_PRIVATE capability for DW DMA controller Hans-Christian Egtvedt
2009-03-24 11:35 ` [PATCH 2/2] dw_dmac: add cyclic API to DW DMA driver Hans-Christian Egtvedt
2009-03-31 14:02   ` Sosnowski, Maciej
2009-03-31 14:03   ` Sosnowski, Maciej
2009-04-01  5:10     ` Hans-Christian Egtvedt
2009-04-01  8:28     ` Haavard Skinnemoen
2009-04-01  9:11       ` Hans-Christian Egtvedt [this message]
2009-04-01 13:28         ` [PATCH v2 1/1] " Hans-Christian Egtvedt
2009-04-01 13:39           ` Haavard Skinnemoen
2009-04-01 13:47             ` [PATCH v3 " Hans-Christian Egtvedt
2009-04-01 13:52               ` Haavard Skinnemoen
2009-04-01 22:46                 ` Dan Williams
2009-04-01 15:08               ` Sosnowski, Maciej
2009-03-31 14:01 ` [PATCH 1/2] dw_dmac: set CAP_PRIVATE capability for DW DMA controller Sosnowski, Maciej
2009-04-01  5:04   ` Hans-Christian Egtvedt
2009-04-01  5:30     ` Dan Williams
2009-04-01  8:33     ` Hans-Christian Egtvedt

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=20090401111116.7c604530@hcegtvedt \
    --to=hans-christian.egtvedt@atmel.com \
    --cc=dan.j.williams@intel.com \
    --cc=haavard.skinnemoen@atmel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maciej.sosnowski@intel.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.