From: Takashi Iwai Fix bug 2052 "Badness in local_bh_enable at kernel/softirq.c:121". spin_unlock_bh() with local interrupts disabled is not allowed. --- 25-akpm/sound/drivers/vx/vx_core.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff -puN sound/drivers/vx/vx_core.c~alsa-vx_core-locking-fix sound/drivers/vx/vx_core.c --- 25/sound/drivers/vx/vx_core.c~alsa-vx_core-locking-fix Mon Feb 9 11:28:56 2004 +++ 25-akpm/sound/drivers/vx/vx_core.c Mon Feb 9 11:32:01 2004 @@ -355,11 +355,12 @@ int vx_send_msg_nolock(vx_core_t *chip, */ int vx_send_msg(vx_core_t *chip, struct vx_rmh *rmh) { + unsigned long flags; int err; - spin_lock_bh(&chip->lock); + spin_lock_irqsave(&chip->lock, flags); err = vx_send_msg_nolock(chip, rmh); - spin_unlock_bh(&chip->lock); + spin_unlock_irqrestore(&chip->lock, flags); return err; } @@ -415,10 +416,11 @@ int vx_send_rih_nolock(vx_core_t *chip, int vx_send_rih(vx_core_t *chip, int cmd) { int err; + unsigned long flags; - spin_lock_bh(&chip->lock); + spin_lock_irqsave(&chip->lock, flags); err = vx_send_rih_nolock(chip, cmd); - spin_unlock_bh(&chip->lock); + spin_unlock_irqrestore(&chip->lock, flags); return err; } _