On Mon, Sep 24, 2012 at 07:58:04PM -0700, Andiry Xu wrote: > On Mon, Sep 24, 2012 at 3:35 PM, Sarah Sharp > <sarah.a.sharp@xxxxxxxxxxxxxxx> wrote: > > On Mon, Sep 24, 2012 at 01:05:08PM -0700, Sarah Sharp wrote: > >> On Mon, Sep 24, 2012 at 03:50:04PM -0400, Alan Stern wrote: > >> > On Mon, 24 Sep 2012, Sarah Sharp wrote: > >> > > >> > > When a device with an isochronous endpoint is behind a hub plugged into > >> > > the Intel Panther Point xHCI host controller, and the driver submits > >> > > multiple frames per URB, the xHCI driver will set the Block Event > >> > > Interrupt (BEI) flag on all but the last TD for the URB. This causes > >> > > the host controller to place an event on the event ring, but not send an > >> > > interrupt. When the last TD for the URB completes, BEI is cleared, and > >> > > we get an interrupt for the whole URB. > >> > > > >> > > However, under a Panther Point xHCI host controller, if the parent hub > >> > > is unplugged when one or more events from transfers with BEI set are on > >> > > the event ring, a port status change event is placed on the event ring, > >> > > but no interrupt is generated. This means URBs stop completing, and the > >> > > USB device disconnect is not noticed. Something like a USB headset will > >> > > cause mplayer to hang when the device is disconnected. > >> > > >> > Won't that also cause a problem for hot-unplug detection? How will the > >> > hub driver learn about the unplug event if there's no interrupt? > >> > >> There will be an interrupt if we don't use the BEI flag. That's what > >> this patch fixes. > >> > >> The BEI flag is only supposed to block isochronous interrupts, and only > >> if there was no error associated with the transfer. But the Panther > >> Point xHCI host is broken, and the BEI flag stops unrelated interrupts, > >> like the port status change event interrupt. > >> > >> > Also, does this same problem affect bulk transfers, in particular those > >> > using scatter-gather? > >> > >> Bulk transfers, including scatter-gather transfers, are always > >> translated into one TD, and the BEI flag is not used. AFAIK, this bug > >> only affects transfers with the BEI flag set, so bulk transfers should > >> be fine. > > > > Alan, any more questions on this patch? I'd like to get it (and a > > couple other bug fixes) pushed to Greg this week before the 3.7 merge > > window. > > > > Does this bug only affect isoc devices behind a hub? Can the > workaround be limited so devices connected to the root hub can still > use BEI? I don't think it's isolated to isoc devices behind a hub, but I'll double check with the hardware guys. Sarah Sharp -- 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