lkml.org 
[lkml]   [2010]   [Apr]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Ooops when working with USB MIDI (2.6.33.1)
    Tvrtko Ursulin wrote:
    > On Thursday 08 Apr 2010 13:22:36 Takashi Iwai wrote:
    > > > Takashi, do you remember what the original problem was?
    > >
    > > Well, I have only a vague memory -- it's a similar scenario that some app
    > > still accessing after disconnection. The URB can't be handled after
    > > the disconnection is finished.
    > >
    > > I think the patch below might fix in this case. You can try it
    > > instead of reverting the commit above.
    > >
    > > --- a/sound/usb/usbmidi.c
    > > +++ b/sound/usb/usbmidi.c
    > > @@ -986,6 +986,8 @@ static void snd_usbmidi_output_drain(struct
    > > snd_rawmidi_substream *substream) DEFINE_WAIT(wait);
    > > long timeout = msecs_to_jiffies(50);
    > >
    > > + if (ep->umidi->disconnected)
    > > + return;
    > > ...
    > > @@ -1275,6 +1277,11 @@ void snd_usbmidi_disconnect(struct list_head* p)
    > > snd_usbmidi_in_endpoint_delete(ep->in);
    > > ep->in = NULL;
    > > }
    > > + ep->active_urbs = 0;
    > > + if (ep->drain_urbs) {
    > > + ep->drain_urbs = 0;
    > > + wake_up(&ep->drain_wait);
    > > + }
    >
    > For the second hunk, do you think ep->out->... and so on? That would be more
    > in-line with code present in 2.6.33.

    ep->out has been just freed. And in the first hunk, in _drain, the ep
    pointer is the same as ep->out in _disconnect.

    In _disconnect, we must not free ep->in and ep->out because those
    structures might still be accessed by all the functions called from
    user space.

    I'll write separate disconnect functions for the endpoint structures
    when I find time.


    Regards,
    Clemens


    \
     
     \ /
      Last update: 2010-04-09 09:21    [W:0.025 / U:0.124 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site