At Mon, 10 May 2004 16:51:24 +0200 (CEST),
Giuliano Pochini wrote:
> 
> 
> On 10-May-2004 Takashi Iwai wrote:
> 
> >> > Some drivers use spin_lock_irq() a lot, while others always use
> >> > spin_lock_irqsave(). I can't see the difference. When it's safe
> >> > using the _irq() version ?
> >>
> >> Only when you know that you are not in interrupt context.
> >
> > also, not in the context which already disabled irq.
> 
> Yes, I read the famous Rusty's unreliable guide. My question
> was ALSA-specific. The point is that I don't know when those
> conditions are true. Can and_pcm_period_elapsed() call anything
> other than the pcm callbacks ?  Does the ALSA middle layer ever
> disable interrupts before calling a driver function ?  If it
> doesn't, I can replace spin_lock_irqsave() with spin_lock_irq()
> almost everything. Some callbacks are atomic according to the
> tutorial, but it doesn't say if interrupts are disabled too.
> Are irq (and preempt) disabled before calling .prepare and
> .trigger callbacks ?

prepare and trigger callbacks are already in irq-disabled.
i.e. you need only spin_lock() in them.
also, ioctl(SNDRV_PCM_IOCTL1_RESET) is in the irq-disabled context.

others are not.

some points to be noted:

- prepare can be non-atomic by setting SNDRV_PCM_INFO_NONATOMIC_OPS to
  pcm->info_flags.  (e.g. usbaudio.c)

- pointer callback is not protected.  but it's called also in the
  interrupt context, so you can't use spin_lock_irq() in general.


Takashi


-------------------------------------------------------
This SF.Net email is sponsored by Sleepycat Software
Learn developer strategies Cisco, Motorola, Ericsson & Lucent use to deliver
higher performing products faster, at low TCO.
http://www.sleepycat.com/telcomwpreg.php?From=osdnemail3
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to