Browse Source

ALSA: hda: read CORBWP inside reg_lock

This converts the last CORBWP access outside of reg_lock.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Wu Fengguang 15 years ago
parent
commit
c32649feb4
1 changed files with 3 additions and 1 deletions
  1. 3 1
      sound/pci/hda/hda_intel.c

+ 3 - 1
sound/pci/hda/hda_intel.c

@@ -588,15 +588,17 @@ static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
 	unsigned int addr = azx_command_addr(val);
 	unsigned int addr = azx_command_addr(val);
 	unsigned int wp;
 	unsigned int wp;
 
 
+	spin_lock_irq(&chip->reg_lock);
+
 	/* add command to corb */
 	/* add command to corb */
 	wp = azx_readb(chip, CORBWP);
 	wp = azx_readb(chip, CORBWP);
 	wp++;
 	wp++;
 	wp %= ICH6_MAX_CORB_ENTRIES;
 	wp %= ICH6_MAX_CORB_ENTRIES;
 
 
-	spin_lock_irq(&chip->reg_lock);
 	chip->rirb.cmds[addr]++;
 	chip->rirb.cmds[addr]++;
 	chip->corb.buf[wp] = cpu_to_le32(val);
 	chip->corb.buf[wp] = cpu_to_le32(val);
 	azx_writel(chip, CORBWP, wp);
 	azx_writel(chip, CORBWP, wp);
+
 	spin_unlock_irq(&chip->reg_lock);
 	spin_unlock_irq(&chip->reg_lock);
 
 
 	return 0;
 	return 0;