Re: USB MIDI ehci timing/latency/jitter problem introduced 2.6.23.17->2.6.24

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



You found it.  I just got around to tinkering with it again since last
weekend.  Although I remember your e-mail, I forgot about your suggested
patch.  I came up with the same patch you did after adding some debugging
that showed that the value for out_interval was all over the place, with the
symptoms particularly bad for large values.

The uninitialized state of out_interval only occurs with the midiman series
of interfaces -- it looks like all others wil have out_interval initialized
with the value from ep->bInterval in snd_usbmidi_detect_endpoints().

In any case, the patch works great!

Thanks for the help everybody!

David

On Mon, Feb 09, 2009 at 11:43:57AM +0100, Clemens Ladisch wrote:
> David wrote:
> > I've isolated it to a patch made on the alsa side under commit:
> > 
> > commit a6a712aeb17ff30206ae1bc827d50497d884602a
> > Author: Clemens Ladisch <clemens@xxxxxxxxxx>
> > Date:   Tue Aug 21 08:56:08 2007 +0200
> > 
> >     [ALSA] usb-audio: allow output interrupt transfers for MIDI
> >     
> >     Allow output interrupt transfers for some MIDI devices that require
> >     them.
> > 
> > The patch effectively changed how alsa interfaces with my midi dongle, going
> > from using the bulk endpoint to the interrupt one for output.
> 
> This is because of an uninitialized variable in another part of the code,
> which makes the snd_usbmidi_out_endpoint_create() function believe that
> it has to use an interrupt pipe.
> 
> Please try the (untested) patch below.
> 
> > Why would interrupt transfers behave differently when using ehci and a hub's
> > TT vice being native to the ohci hcd?
> 
> Perhaps the OHCI HCD doesn't use interrupt transfers when the endpoint
> is actually a bulk endpoint, or it doesn't use transfer intervals that
> are as high as those used by EHCI, or the random stack contents are just
> different.
> 
> 
> Best regards,
> Clemens
> 
> 
> diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
> index 320641a..26bad37 100644
> --- a/sound/usb/usbmidi.c
> +++ b/sound/usb/usbmidi.c
> @@ -1625,6 +1625,7 @@ static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi* umidi,
>  	}
>  
>  	ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
> +	ep_info.out_interval = 0;
>  	ep_info.out_cables = endpoint->out_cables & 0x5555;
>  	err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]);
>  	if (err < 0)
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux