Re: [PATCH] USB-sound: prevent kernel panic on disconnect

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

 



Alan Stern wrote:
> On Fri, 11 Feb 2011, Sarah Sharp wrote:
> > I suspect it might be the audio driver, as someone on the alsa mailing
> > list suggested the USB sound driver can't handle when one isochronous
> > buffer in an URB has an error, but the URB status is 0.
> 
> I don't think that can happen.  The URB status won't be 0 unless all 
> the individual buffers have 0 status.

In any case, the driver would then just copy garbage samples out of the
buffer; this wouldn't affect the driver's data structures.

> > From: Pierre-Louis Bossart <bossart.nospam@xxxxxxxxx>
> > 
> > Note that this is only a work-around, it does not address the
> > root cause of this inconsistency between urbs and PCM states. The
> > dmesg below shows two calls to snd_urb_complete, the substream is
> > NULL and the state is either running or stopped. This doesn't make
> > any sense.
> > ...
> > ALSA urb.c:492: frame 0 active: -84
> > ALSA urb.c:197: cannot submit urb (err = -19)
> > ALSA urb.c:186: NULL substream (subs->running 1) <- How is this possible?
> > ALSA urb.c:186: NULL substream (subs->running 0)
> 
> It's most likely a matter of the device being disconnected but the
> device file still being open.

subs->pcm_substream == NULL happens only when the device file _has_
been closed.

> Perhaps not everything gets cleaned up the way it should when that
> happens.

There seems to be a race between snd_usb_pcm_close() and
snd_usb_stream_disconnect().  I think a mutex taken by both functions
should fix this; and all functions that check 'shutdown' probably need
serializing.


Regards,
Clemens
--
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