Unfortunately I have to correct my previous message. After a load test with jack + qsynth + rosegarden (sample rate=88200, frames/period=256, periods/buffer=3), using a 16 tracks midi file and a 29MB sound font, the following message appeared: [ 1098.445807] ALSA /home/marco/build/linux-2.6.24-19-rt/alsa-1.0.17/driver-patched/alsa-driver-1.0.17/usb/caiaq/../../alsa-kernel/usb/caiaq/caiaq-midi.c:84: snd-usb-caiaq log: snd_usb_caiaq_midi_send(f64c66c0): usb_submit_urb() failed, -22 Cheers, Marco 2009/1/8 Marco Santamaria <marco.santamaria@xxxxxxxxx> > No more errors in dmesg this time. Tomorrow I will apply the patch to the > latest stable version of the alsa-driver (1.0.18). > > Please let me know if there are more tests I can do with JACK, Rosegarden, > Ardour or something else. > > Do you think that this patch will go in the next version of the > alsa-driver? > > Thank you very much for your help, > Marco > > > 2009/1/7 Takashi Iwai <tiwai@xxxxxxx> > >> At Wed, 7 Jan 2009 21:06:23 +0100, >> >> Mysth-R wrote: >> > >> > Hi Takashi, >> > >> > I have almost the same problem as Marco. (that is why Marco forwarded me >> this >> > message). >> > >> > Well, Now it seems to be almost perfect. Just to explain to you : >> > >> > I had a problem with Pure data, each time I wanted to enable the alsa >> midi (in >> > pure data). Then I had some problem opening some of my patch, making pd >> > zombified and Jack output tons of "delay of 1666.000 usecs exceeds >> estimated >> > spare time of 1140.000; restart ..." until I stop it and run it again. >> > >> > Now pd works perfectly. I made some others jackd settings, and the >> "xruns" >> > messages seems to gone away. >> > >> > But like Marco I got this message in the output of dmesg : >> > >> > [ 20.269196] Adding 530136k swap on /dev/sda3. Priority:-1 extents:1 >> > across:530136k >> > [ 445.142031] snd-usb-caiaq log: >> snd_usb_caiaq_midi_send(ffff81007f9380c0): >> > usb_submit_urb() failed, -22 >> > [ 445.393030] snd-usb-caiaq log: >> snd_usb_caiaq_midi_send(ffff81007f9380c0): >> > usb_submit_urb() failed, -22 >> > [ 445.640986] snd-usb-caiaq log: >> snd_usb_caiaq_midi_send(ffff81007f9380c0): >> > usb_submit_urb() failed, -22 >> > [ 445.892008] snd-usb-caiaq log: >> snd_usb_caiaq_midi_send(ffff81007f9380c0): >> > usb_submit_urb() failed, -22 >> > [ 446.141982] snd-usb-caiaq log: >> snd_usb_caiaq_midi_send(ffff81007f9380c0): >> > usb_submit_urb() failed, -22 >> > [ 446.392962] snd-usb-caiaq log: >> snd_usb_caiaq_midi_send(ffff81007f9380c0): >> > usb_submit_urb() failed, -22 >> > [ 446.640967] snd-usb-caiaq log: >> snd_usb_caiaq_midi_send(ffff81007f9380c0): >> > usb_submit_urb() failed, -22 >> > [ 446.891986] snd-usb-caiaq log: >> snd_usb_caiaq_midi_send(ffff81007f9380c0): >> > usb_submit_urb() failed, -22 >> >> OK, what about this patch? Now it checks the URB existence before >> submission. >> >> >> thanks, >> >> Takashi >> >> --- >> diff --git a/sound/usb/caiaq/caiaq-device.h >> b/sound/usb/caiaq/caiaq-device.h >> index f9fbdba..ab56e73 100644 >> --- a/sound/usb/caiaq/caiaq-device.h >> +++ b/sound/usb/caiaq/caiaq-device.h >> @@ -75,6 +75,7 @@ struct snd_usb_caiaqdev { >> wait_queue_head_t ep1_wait_queue; >> wait_queue_head_t prepare_wait_queue; >> int spec_received, audio_parm_answer; >> + int midi_out_active; >> >> char vendor_name[CAIAQ_USB_STR_LEN]; >> char product_name[CAIAQ_USB_STR_LEN]; >> diff --git a/sound/usb/caiaq/caiaq-midi.c b/sound/usb/caiaq/caiaq-midi.c >> index 30b57f9..6b76f7f 100644 >> --- a/sound/usb/caiaq/caiaq-midi.c >> +++ b/sound/usb/caiaq/caiaq-midi.c >> @@ -69,7 +69,8 @@ static void snd_usb_caiaq_midi_send(struct >> snd_usb_caiaqdev *dev, >> >> dev->midi_out_buf[0] = EP1_CMD_MIDI_WRITE; >> dev->midi_out_buf[1] = 0; /* port */ >> - len = snd_rawmidi_transmit_peek(substream, dev->midi_out_buf+3, >> EP1_BUFSIZE-3); >> + len = snd_rawmidi_transmit(substream, dev->midi_out_buf + 3, >> + EP1_BUFSIZE - 3); >> >> if (len <= 0) >> return; >> @@ -81,22 +82,21 @@ static void snd_usb_caiaq_midi_send(struct >> snd_usb_caiaqdev *dev, >> if (ret < 0) >> log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed, >> %d\n", >> substream, ret); >> + else >> + dev->midi_out_active = 1; >> } >> >> static void snd_usb_caiaq_midi_output_trigger(struct >> snd_rawmidi_substream *substream, int up) >> { >> struct snd_usb_caiaqdev *dev = substream->rmidi->private_data; >> >> - if (dev->midi_out_substream != NULL) >> - return; >> - >> - if (!up) { >> + if (up) { >> + dev->midi_out_substream = substream; >> + if (!dev->midi_out_active) >> + snd_usb_caiaq_midi_send(dev, substream); >> + } else { >> dev->midi_out_substream = NULL; >> - return; >> } >> - >> - dev->midi_out_substream = substream; >> - snd_usb_caiaq_midi_send(dev, substream); >> } >> >> >> @@ -163,14 +163,13 @@ void snd_usb_caiaq_midi_output_done(struct urb* urb) >> struct snd_usb_caiaqdev *dev = urb->context; >> char *buf = urb->transfer_buffer; >> >> + dev->midi_out_active = 0; >> if (urb->status != 0) >> return; >> >> if (!dev->midi_out_substream) >> return; >> >> - snd_rawmidi_transmit_ack(dev->midi_out_substream, buf[2]); >> - dev->midi_out_substream = NULL; >> snd_usb_caiaq_midi_send(dev, dev->midi_out_substream); >> } >> >> > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel