diff options
author | Takashi Iwai <tiwai@suse.de> | 2007-03-13 16:52:36 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2007-03-14 03:24:18 -0400 |
commit | 883be7936747f35479ecf94aebf3daf418b7f449 (patch) | |
tree | e3788bf3e132cea96ed541cdc80f50436b272252 /sound/pci/intel8x0.c | |
parent | 0a07acafd6127117db0c20e04302dd8ac9402bc0 (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.c | 5 |
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) | |||
725 | static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ichdev) | 725 | static 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 | } |