diff options
author | Wu Fengguang <fengguang.wu@intel.com> | 2009-08-01 12:48:12 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-08-03 08:26:55 +0200 |
commit | c32649feb4573b31f0a2bfdf35cbe1351256c764 (patch) | |
tree | 5e5cdcca68be562481daf2db3eaf74cc0f029ab2 /sound | |
parent | ALSA: hda: take reg_lock in azx_init_cmd_io/azx_free_cmd_io (diff) | |
download | linux-c32649feb4573b31f0a2bfdf35cbe1351256c764.tar.xz linux-c32649feb4573b31f0a2bfdf35cbe1351256c764.zip |
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>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/hda_intel.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index b6e6314d0069..df6d9820efad 100644 --- a/sound/pci/hda/hda_intel.c +++ b/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 wp; + spin_lock_irq(&chip->reg_lock); + /* add command to corb */ wp = azx_readb(chip, CORBWP); wp++; wp %= ICH6_MAX_CORB_ENTRIES; - spin_lock_irq(&chip->reg_lock); chip->rirb.cmds[addr]++; chip->corb.buf[wp] = cpu_to_le32(val); azx_writel(chip, CORBWP, wp); + spin_unlock_irq(&chip->reg_lock); return 0; |