[alsa-devel] MIDI on ice1724 - real-time kernel problem

Takashi Iwai tiwai at suse.de
Wed May 7 12:25:44 CEST 2008


At Sat, 03 May 2008 21:12:02 +0200,
Pavel Hofman wrote:
> 
> 
> 
> Takashi Iwai wrote:
> > At Wed, 30 Apr 2008 22:07:42 +0200,
> > Pavel Hofman wrote:
> >> Takashi Iwai wrote:
> >>> At Fri, 25 Apr 2008 09:06:19 +0200,
> >>> Pavel Hofman wrote:
> >> The code works fine on standard kernel.
> >>
> >> But in the RT kernel of Ubuntu 7.10 (2.6.22-14-rt, 1000HZ compared to
> >> 250HZ of the -generic kernel), MIDI interrupts get thrown continuously,
> >> hogging CPU with the IRQXX "process".
> >>
> >> When playing 44.1kHz audio with buffer size of 32768,
> >> snd_vt1724_interrupt is called every 185ms. With the buffer size of 
> >> 4096, it is every 23ms. So far so good.
> >>
> >> But when I try to output some midi, the routine gets called every 24us
> >> (i.e. 1000 times faster). Comparing the time difference between my
> >> several debug printk's in snd_vt1724_interrupt (approx. 5us between each
> >> printk record a few lines of code apart) and between each call of the
> >> method (24us), I thought there would be a loop somewhere in the
> >> interrupt handler calling code. But /proc/interrupts really shows over
> >> 40k interrupts a second for ICE1724.
> >>
> >> Changing the watermarks up to 0x1f makes no difference.
> > 
> > That looks bad.
> > 
> >> Masking the MIDI interrupts works, snd_vt1724_interrupt is called only
> >> during VT1724_IRQ_MTPCM interrupts, with the MIDI status bits
> >> MPU_TX/MPU_RX set when reading/writing with amidi.
> > 
> > Hm, is it TX or RX, or in both cases?
> > Could you check which one (TX or RX) causes this?
> > 
> 
> Both reading (amidi -p hw:0 -d) and writing (amidi -p hw:0 -S 
> F0411042110C000000000074FF0411042110C000000) starts the TX interrupt 
> flood (irq status: 0x20) immediately. Upon opening input as well as 
> output the method snd_mpu401_do_reset is called - is perhaps the culprit 
> somewhere there?

Possibly.  It write 0x00 to data at the beginning in
snd_mpu401_uart_cmd().  What happens if you remove it?


Takashi


More information about the Alsa-devel mailing list