[alsa-devel] MIDI on ice1724 - real-time kernel problem
pavel.hofman at insite.cz
Sat May 3 21:12:02 CEST 2008
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
More information about the Alsa-devel