Hi, I tried the last patch, and I think we got it. I made some few tests, and every thing is Ok for me now. No more crash, no more messages in dmesg. I just had a warning during compilation, but I think this is not really important : sound/usb/caiaq/caiaq-midi.c: In function \u2018snd_usb_caiaq_midi_output_done\u2019: sound/usb/caiaq/caiaq-midi.c:170: attention : unused variable \u2018buf\u2019 Perhaps this is not the same line (170) as you but, in my file, it concerns the last function. Thank you very much for your help ! Cheers, Mysth-R 2009/1/8 Takashi Iwai <tiwai@xxxxxxx> > At Thu, 8 Jan 2009 02:34:46 +0100, > Marco Santamaria wrote: > > > > 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 > > Hmm... what about this version? > > > 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..18bbe38 100644 > --- a/sound/usb/caiaq/caiaq-midi.c > +++ b/sound/usb/caiaq/caiaq-midi.c > @@ -59,6 +59,11 @@ static int snd_usb_caiaq_midi_output_open(struct > snd_rawmidi_substream *substrea > > static int snd_usb_caiaq_midi_output_close(struct snd_rawmidi_substream > *substream) > { > + struct snd_usb_caiaqdev *dev = substream->rmidi->private_data; > + if (dev->midi_out_active) { > + usb_kill_urb(&dev->midi_out_urb); > + dev->midi_out_active = 0; > + } > return 0; > } > > @@ -69,7 +74,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; > @@ -79,24 +85,24 @@ static void snd_usb_caiaq_midi_send(struct > snd_usb_caiaqdev *dev, > > ret = usb_submit_urb(&dev->midi_out_urb, GFP_ATOMIC); > if (ret < 0) > - log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed, > %d\n", > - substream, ret); > + log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed," > + "ret=%d, len=%d\n", > + substream, ret, len); > + 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 +169,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); > } > > -- * *************************************************************************************** * {^_^} Mysth-R {^_^} * <= Aide Auditive => * * http://myspace.com/mysthr * http://myspace.com/aideauditive * http://mysthr.free.fr/Joomla => Site dédié à l'audio sous Fedora/PlanetCCRMA. * *************************************************************************************** _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel