aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/intel8x0.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2007-03-13 16:52:36 -0400
committerJaroslav Kysela <perex@suse.cz>2007-03-14 03:24:18 -0400
commit883be7936747f35479ecf94aebf3daf418b7f449 (patch)
treee3788bf3e132cea96ed541cdc80f50436b272252 /sound/pci/intel8x0.c
parent0a07acafd6127117db0c20e04302dd8ac9402bc0 (diff)
[ALSA] intel8x0 - Fix Oops at kdump crash kernel
Fixed Oops at crash kernel from intel8x0 driver that is triggered from interrupt handler. Proper irqsave version seems needed for kexec/kdump. Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound/pci/intel8x0.c')
-rw-r--r--sound/pci/intel8x0.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
index ff65e049114b..7cf2dcb9d8d4 100644
--- a/sound/pci/intel8x0.c
+++ b/sound/pci/intel8x0.c
@@ -725,10 +725,11 @@ static void fill_nocache(void *buf, int size, int nocache)
725static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ichdev) 725static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ichdev)
726{ 726{
727 unsigned long port = ichdev->reg_offset; 727 unsigned long port = ichdev->reg_offset;
728 unsigned long flags;
728 int status, civ, i, step; 729 int status, civ, i, step;
729 int ack = 0; 730 int ack = 0;
730 731
731 spin_lock(&chip->reg_lock); 732 spin_lock_irqsave(&chip->reg_lock, flags);
732 status = igetbyte(chip, port + ichdev->roff_sr); 733 status = igetbyte(chip, port + ichdev->roff_sr);
733 civ = igetbyte(chip, port + ICH_REG_OFF_CIV); 734 civ = igetbyte(chip, port + ICH_REG_OFF_CIV);
734 if (!(status & ICH_BCIS)) { 735 if (!(status & ICH_BCIS)) {
@@ -768,7 +769,7 @@ static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ich
768 ack = 1; 769 ack = 1;
769 } 770 }
770 } 771 }
771 spin_unlock(&chip->reg_lock); 772 spin_unlock_irqrestore(&chip->reg_lock, flags);
772 if (ack && ichdev->substream) { 773 if (ack && ichdev->substream) {
773 snd_pcm_period_elapsed(ichdev->substream); 774 snd_pcm_period_elapsed(ichdev->substream);
774 } 775 }