At Fri, 27 Jun 2008 15:54:41 +0200, Pavel Hofman wrote: > > Martin Krüger wrote: > > Martin Krüger schrieb: > >> Hi Pavel, > >> > >> sorry for the long break, i was really busy at studying. > >> > >> ---snip--- > >> > >> Thanks a lot, > >> Martin > >> _______________________________________________ > >> Alsa-devel mailing list > >> Alsa-devel@xxxxxxxxxxxxxxxx > >> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel > >> > > > > Hi again, > > > > i did some other playing around this evening. (Debugging would be a word > > much too big...) > > > > I commented out the logic stuff in the following subroutines of the > > ice1724.c: > > > > - static int vt1724_midi_output_open(struct snd_rawmidi_substream *s) > > - static int vt1724_midi_output_close(struct snd_rawmidi_substream *s) > > - static void vt1724_midi_output_trigger(struct snd_rawmidi_substream > > *s, int up) > > - static void vt1724_midi_output_drain(struct snd_rawmidi_substream *s) > > > > The vt1724_enable_midi_irq(s, VT1724_IRQ_MPU_TX, 1) is killing my > > kernel, i don't know why. > > So enabling the MPU TX interrupt causes lockup. Very similar to my > experience with the previous version of the MIDI driver. Please put a > debug line to snd_vt1724_interrupt, listing status bits for each > interrupt. That was the place I experienced loops etc. In my case the > flood eventually fooled the logging facility, but I could still read the > first few logs. > > > > On the input side everything works, so i am a bit confused. Again. ;-) > > I was also getting only TX interrupt floods, RX was OK. If it's about TX, the patch below might stop lockup (but TX must be still buggy)... Takashi --- diff --git a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c index e596d77..b499328 100644 --- a/sound/pci/ice1712/ice1724.c +++ b/sound/pci/ice1712/ice1724.c @@ -382,23 +382,25 @@ static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id) unsigned char status_mask = VT1724_IRQ_MPU_RX | VT1724_IRQ_MPU_TX | VT1724_IRQ_MTPCM; int handled = 0; -#ifdef CONFIG_SND_DEBUG int timeout = 0; -#endif while (1) { status = inb(ICEREG1724(ice, IRQSTAT)); status &= status_mask; if (status == 0) break; -#ifdef CONFIG_SND_DEBUG if (++timeout > 10) { - printk(KERN_ERR - "ice1724: Too long irq loop, status = 0x%x\n", - status); + status = inb(ICEREG1724(ice, IRQSTAT)); + printk(KERN_ERR "ice1724: Too long irq loop, " + "status = 0x%x\n", status); + if (status & VT1724_IRQ_MPU_TX) { + printk(KERN_ERR "ice1724: Disabling MPU_TX\n"); + outb(inb(ICEREG1724(ice, IRQMASK)) & + ~VT1724_IRQ_MPU_TX, + ICEREG1724(ice, IRQMASK)); + } break; } -#endif handled = 1; if (status & VT1724_IRQ_MPU_TX) { spin_lock(&ice->reg_lock); @@ -2410,8 +2412,10 @@ static int __devinit snd_vt1724_create(struct snd_card *card, } /* unmask used interrupts */ +#if 0 /* these are enabled/disabled dynamically */ mask = VT1724_IRQ_MPU_RX | VT1724_IRQ_MPU_TX; outb(mask, ICEREG1724(ice, IRQMASK)); +#endif /* don't handle FIFO overrun/underruns (just yet), * since they cause machine lockups */ _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel