diff options
author | Jaroslav Kysela <perex@suse.cz> | 2004-11-11 13:43:26 +0100 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2004-11-11 13:43:26 +0100 |
commit | 308ea20e31f2ecf95b59467a4fb5aeaa927f47de (patch) | |
tree | 08544051c58c0ce9392b75e79e8029c1ef16effd /sound | |
parent | 1148e9ae3618a4ce907cba6b5e727f32b50ee995 (diff) | |
download | history-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.c | 6 |
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 */ |