ALSA: ctxfi - Replace atc lock to mutex
authorTakashi Iwai <tiwai@suse.de>
Sat, 13 Jun 2009 08:12:59 +0000 (10:12 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sat, 13 Jun 2009 08:12:59 +0000 (10:12 +0200)
commit635c265f32d8a3f73402813d6a8dd47f2a363df5
treef86815481d55d7b844468e4cca92211daea800e2
parenta5990dc5b96f537618b0f057c8723a6a0b0cdc74
ALSA: ctxfi - Replace atc lock to mutex

The spinlock in atc can cause a sleep in lock:

Kernel failure message 1:
BUG: sleeping function called from invalid context at mm/slub.c:1599
in_atomic(): 0, irqs_disabled(): 1, pid: 2537, name: gstreamer-prope
Pid: 2537, comm: gstreamer-prope Tainted: P
2.6.29.4-167.fc11.x86_64 #1
Call Trace:
  [<ffffffff8103ff0f>] __might_sleep+0x10b/0x110
  [<ffffffff810cd734>] __kmalloc+0x73/0x130
  [<ffffffffa0b4b142>] ? daio_rsc_init+0xaa/0x125 [snd_ctxfi]
  [<ffffffffa0b4b212>] dao_rsc_init+0x55/0x1c0 [snd_ctxfi]
  [<ffffffffa0b4b3d2>] dao_rsc_reinit+0x55/0x5d [snd_ctxfi]
  [<ffffffff813abd6c>] ? _spin_lock_irqsave+0x32/0x3b
  [<ffffffffa0b454fe>] atc_spdif_out_passthru+0x92/0x136 [snd_ctxfi]
  ...

Since the lock path is no critical path, it can be gracefully
replaced with a mutex.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ctxfi/ctatc.c
sound/pci/ctxfi/ctatc.h