aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@suse.cz>2004-11-11 13:43:26 +0100
committerJaroslav Kysela <perex@suse.cz>2004-11-11 13:43:26 +0100
commit308ea20e31f2ecf95b59467a4fb5aeaa927f47de (patch)
tree08544051c58c0ce9392b75e79e8029c1ef16effd /sound
parent1148e9ae3618a4ce907cba6b5e727f32b50ee995 (diff)
downloadhistory-308ea20e31f2ecf95b59467a4fb5aeaa927f47de.tar.gz
[ALSA] removes unneeded spin_lock_irqsave()s from snd-es1968
ES1968 driver spin_lock_irqsave(&chip->reg_lock) was called a second time in sequence from snd_es1968_bob_start() called from es1968_measure_clock(). While this didn't cause harm on my UP laptop with mainline kernels, it made 'insmod snd-es1968' hang on kernel 2.6.9-mm1-RT-V0.6.9. The patch assumes that 2 callpaths don't need explicit spinlock protection: 1: The trigger callback, because it is called with IRQs disabled. 2. PM's suspend/resume callbacks, because those are called while ortdinary user processes are frozen. Thus the spin_lock_irqsave(&chip->reg_lock) calls in snd_es1968_bob_start() / snd_es1968_bob_stop() are not needed. Signed-off-by: Karsten Wiese <annabellesgarden@yahoo.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/es1968.c6
1 files changed, 0 insertions, 6 deletions
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
index 3e568cb2ea1814..806f496147fb09 100644
--- a/sound/pci/es1968.c
+++ b/sound/pci/es1968.c
@@ -837,23 +837,19 @@ static u16 wave_get_register(es1968_t *chip, u16 reg)
static void snd_es1968_bob_stop(es1968_t *chip)
{
u16 reg;
- unsigned long flags;
- spin_lock_irqsave(&chip->reg_lock, flags);
reg = __maestro_read(chip, 0x11);
reg &= ~ESM_BOB_ENABLE;
__maestro_write(chip, 0x11, reg);
reg = __maestro_read(chip, 0x17);
reg &= ~ESM_BOB_START;
__maestro_write(chip, 0x17, reg);
- spin_unlock_irqrestore(&chip->reg_lock, flags);
}
static void snd_es1968_bob_start(es1968_t *chip)
{
int prescale;
int divide;
- unsigned long flags;
/* compute ideal interrupt frequency for buffer size & play rate */
/* first, find best prescaler value to match freq */
@@ -882,13 +878,11 @@ static void snd_es1968_bob_start(es1968_t *chip)
} else if (divide > 1)
divide--;
- spin_lock_irqsave(&chip->reg_lock, flags);
__maestro_write(chip, 6, 0x9000 | (prescale << 5) | divide); /* set reg */
/* Now set IDR 11/17 */
__maestro_write(chip, 0x11, __maestro_read(chip, 0x11) | 1);
__maestro_write(chip, 0x17, __maestro_read(chip, 0x17) | 1);
- spin_unlock_irqrestore(&chip->reg_lock, flags);
}
/* call with substream spinlock */