From: Takashi Iwai <tiwai@suse.de>

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;
 }
 

_