[RFC] usb: remove "clear_halt for a busy endpoint" warning

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

 



Hello,

We have lot of "clear_halt for a busy endpoint" warnings reported.

[  546.758270] WARNING: at drivers/usb/host/ehci-hcd.c:1051 ehci_endpoint_reset+0x113/0x120()
[  546.758272] clear_halt for a busy endpoint
...
[  546.758352]  [<ffffffff8105cdec>] warn_slowpath_fmt+0x4c/0x50
[  546.758355]  [<ffffffff81478cd3>] ehci_endpoint_reset+0x113/0x120
[  546.758359]  [<ffffffff8145f655>] usb_hcd_reset_endpoint+0x25/0x70
[  546.758362]  [<ffffffff81461568>] usb_reset_endpoint+0x28/0x40
[  546.758365]  [<ffffffff814615ee>] usb_clear_halt+0x6e/0x80
[  546.758369]  [<ffffffff8146c7ea>] usbdev_do_ioctl+0xb8a/0x1130
[  546.758372]  [<ffffffff8146cdbe>] usbdev_ioctl+0xe/0x20
[  546.758378]  [<ffffffff811aaef5>] do_vfs_ioctl+0x305/0x520
[  546.758380]  [<ffffffff811ab191>] sys_ioctl+0x81/0xa0
[  546.758384]  [<ffffffff8164dd19>] system_call_fastpath+0x16/0x1b

https://bugzilla.redhat.com/show_bug.cgi?id=928143

It is triggered when user space driver call CLEAR_HALT ioctl when
endpoint is not actually halted. Schould we request to fix that in
user space, or can we remove this warning like on below patch (call
CLEAR_HALT ioctl, does not seems to do any harm except printing a
warning) ?

Stanislaw

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 4711427..46156fd 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -1020,21 +1020,17 @@ ehci_endpoint_reset(struct usb_hcd *hcd, struct usb_host_endpoint *ep)
 	 * When an endpoint is reset by usb_clear_halt() we must reset
 	 * the toggle bit in the QH.
 	 */
-	if (qh) {
-		if (!list_empty(&qh->qtd_list)) {
-			WARN_ONCE(1, "clear_halt for a busy endpoint\n");
-		} else {
-			/* The toggle value in the QH can't be updated
-			 * while the QH is active.  Unlink it now;
-			 * re-linking will call qh_refresh().
-			 */
-			usb_settoggle(qh->ps.udev, epnum, is_out, 0);
-			qh->exception = 1;
-			if (eptype == USB_ENDPOINT_XFER_BULK)
-				start_unlink_async(ehci, qh);
-			else
-				start_unlink_intr(ehci, qh);
-		}
+	if (qh && list_empty(&qh->qtd_list)) {
+		/* The toggle value in the QH can't be updated
+		 * while the QH is active.  Unlink it now;
+		 * re-linking will call qh_refresh().
+		 */
+		usb_settoggle(qh->ps.udev, epnum, is_out, 0);
+		qh->exception = 1;
+		if (eptype == USB_ENDPOINT_XFER_BULK)
+			start_unlink_async(ehci, qh);
+		else
+			start_unlink_intr(ehci, qh);
 	}
 	spin_unlock_irqrestore(&ehci->lock, flags);
 }
--
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