Re: usbhid control queue full, due to stuck control request

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

 



On Sat, 6 Feb 2010, David Fries wrote:

> I have a UPS plugged into USB being monitored by apcupsd, and once and
> a while a control in transfer is submitted which isn't completed.
> When not completed the usbhid control request queue fills up until no
> more control requests can be submitted (not that any of the previous
> ones are being serviced), preventing the UPS from being monitored.
> 
> As the control request doesn't complete the hid-core.c hid_ctrl
> completion handler doesn't get called, and things stop there.  Further
> control requests to the hid-core pile up in the queue until the queue
> is filled up, then it complains for each new request.  The only way
> out is to kill apcupsd (and wait for it exit), then reload the
> ohci_hcd module with the stock 2.6.31 kernel.  I've included a debug
> patch that will kill the urb when the queue is nearly full and
> resubmit it.  While it does work, I don't consider this the right
> solution and it still leaves the UPS unmonitored for the nearly hour
> that it takes the control queue to fill up and trigger my routine.  The
> usb monitor doesn't say why the control request doesn't complete, just
> that it was submitted and didn't complete.
> 
> Any ideas?  I can try changes or enable other debugging, just keep in
> mind the time for this to reproduce, which could be a week or a month
> between stuck control requests.

Really, the only valid reason for a control request not to complete in
a timely fashion is that the device refuses to accept or acknowledge
it.  In your case the device must be NAKing the status stage of the
control-IN transfer, since a data packet was received.  It's also
possible (but rather unlikely) that the USB hardware in your computer
is malfunctioning.

At any rate, the proper fix is for the submitting program (acupsd?)  
to include a proper timeout, maybe on the order of 10 seconds, when
submitting the control URB.

Alan Stern

--
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