public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usbnet: Activate the halt interrupt endpoint to fix endless "XactErr" error
@ 2012-06-05 14:12 Huajun Li
  2012-06-07 21:54 ` David Miller
       [not found] ` <CA+v9cxYHq4gcy11SDmsuHUhTSdLJM-G0sugYnOjSthbYWA+1Yg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 2 replies; 16+ messages in thread
From: Huajun Li @ 2012-06-05 14:12 UTC (permalink / raw)
  To: David S. Miller
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA,
	Huajun Li

There prints endless "XactErr" error msg once switch my device to the
configuration
 which needs cdc_ether driver, the root cause is the interrupt endpoint halts.
Maybe this is a common issue, so fix it by activating the endpoint
once the error occurs.

Signed-off-by: Huajun Li <huajun.li.lee-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
 drivers/net/usb/usbnet.c   |   33 +++++++++++++++++++++++++++++++++
 include/linux/usb/usbnet.h |   15 ++++++++-------
 2 files changed, 41 insertions(+), 7 deletions(-)

diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 9f58330..f13922b 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -537,6 +537,11 @@ static void intr_complete (struct urb *urb)
 			  "intr shutdown, code %d\n", status);
 		return;

+	case -EPIPE:
+	case -EPROTO:
+		usbnet_defer_kevent(dev, EVENT_STS_HALT);
+		return;
+
 	/* NOTE:  not throttling like RX/TX, since this endpoint
 	 * already polls infrequently
 	 */
@@ -967,6 +972,34 @@ fail_halt:
 		}
 	}

+	if (test_bit(EVENT_STS_HALT, &dev->flags)) {
+		unsigned pipe;
+		struct usb_endpoint_descriptor *desc;
+
+		desc = &dev->status->desc;
+		pipe = usb_rcvintpipe(dev->udev,
+			desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
+		status = usb_autopm_get_interface(dev->intf);
+		if (status < 0)
+			goto fail_sts;
+		status = usb_clear_halt(dev->udev, pipe);
+		usb_autopm_put_interface(dev->intf);
+
+		if (status < 0 && status != -EPIPE && status != -ESHUTDOWN) {
+fail_sts:
+			netdev_err(dev->net,
+				"can't clear intr halt, status %d\n", status);
+		} else {
+			clear_bit(EVENT_STS_HALT, &dev->flags);
+			memset(dev->interrupt->transfer_buffer, 0,
+				dev->interrupt->transfer_buffer_length);
+			status = usb_submit_urb(dev->interrupt, GFP_KERNEL);
+			if (status != 0)
+				netif_err(dev, timer, dev->net,
+					"intr resubmit --> %d\n", status);
+		}
+	}
+
 	/* tasklet could resubmit itself forever if memory is tight */
 	if (test_bit (EVENT_RX_MEMORY, &dev->flags)) {
 		struct urb	*urb = NULL;
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index 76f4396..c0bcb61 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -62,13 +62,14 @@ struct usbnet {
 	unsigned long		flags;
 #		define EVENT_TX_HALT	0
 #		define EVENT_RX_HALT	1
-#		define EVENT_RX_MEMORY	2
-#		define EVENT_STS_SPLIT	3
-#		define EVENT_LINK_RESET	4
-#		define EVENT_RX_PAUSED	5
-#		define EVENT_DEV_WAKING 6
-#		define EVENT_DEV_ASLEEP 7
-#		define EVENT_DEV_OPEN	8
+#		define EVENT_STS_HALT	2
+#		define EVENT_RX_MEMORY	3
+#		define EVENT_STS_SPLIT	4
+#		define EVENT_LINK_RESET	5
+#		define EVENT_RX_PAUSED	6
+#		define EVENT_DEV_WAKING 7
+#		define EVENT_DEV_ASLEEP 8
+#		define EVENT_DEV_OPEN	9
 };

 static inline struct usb_driver *driver_of(struct usb_interface *intf)
-- 
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2012-06-12 10:09 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-05 14:12 [PATCH] usbnet: Activate the halt interrupt endpoint to fix endless "XactErr" error Huajun Li
2012-06-07 21:54 ` David Miller
2012-06-11 14:41   ` Huajun Li
     [not found]     ` <CA+v9cxaLERjFKdE7joGgmpbxCUotdh=Nn4F4f-KeOXwp8nqMPg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-11 20:47       ` Bjørn Mork
     [not found]         ` <87sje1podo.fsf-lbf33ChDnrE/G1V5fR+Y7Q@public.gmane.org>
2012-06-12 10:09           ` Huajun Li
     [not found] ` <CA+v9cxYHq4gcy11SDmsuHUhTSdLJM-G0sugYnOjSthbYWA+1Yg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-08  3:29   ` Ming Lei
     [not found]     ` <CACVXFVMwhoYyJHAsK0xF0poZxoZv8ENHhquPVAiGnsow5-FH8Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-08  5:04       ` Huajun Li
2012-06-08  5:22         ` Ming Lei
     [not found]           ` <CACVXFVPj-4J2_UuOQ9NCW7wV_SLG50a-pEYqhd7K9sXuGmDmoQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-08  6:24             ` Huajun Li
     [not found]               ` <CA+v9cxbogzS7sVChqkRMgDUcs=aJgNDRH8ydoQ-_htfS2t52gQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-08 13:43                 ` Alan Stern
2012-06-08 15:24                   ` Huajun Li
     [not found]                     ` <CA+v9cxag9NV2ud+oupyziLN3nLgkgj+kyTcaOnEjYNjqXtM4Bw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-08 16:13                       ` Alan Stern
     [not found]                         ` <Pine.LNX.4.44L0.1206081212150.1360-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2012-06-08 16:36                           ` Huajun Li
2012-06-08 13:56               ` Ming Lei
2012-06-08 15:54                 ` Huajun Li
     [not found]                   ` <CACVXFVMGu2odRZdTRJo5_JDPMTMGWFy-NW+uLFnAqBO+3X=GJA@mail.gmail.com>
     [not found]                     ` <CA+v9cxZ6bDeNQ__tiPafiCau58dfvCgWmA1fbi_75uyySbtBAQ@mail.gmail.com>
     [not found]                       ` <CACVXFVPO+S5SPCzoyzCzjvh-wT4t2zh_naQ3GZ1B2fc9rmLJGw@mail.gmail.com>
     [not found]                         ` <CA+v9cxbd+PU--=o5T960fmOP1ZuxLc0+y1YgC_RLw-ivtZ8PRA@mail.gmail.com>
     [not found]                           ` <CACVXFVN4XB5V3N=CUpoN6Pcz7zVfQSoGQPQj508YnaueX1E3WA@mail.gmail.com>
     [not found]                             ` <CA+v9cxZd3W8BwWoxng0zPXe0-WA2pObre=Bjm4htJB_j-3YkJw@mail.gmail.com>
     [not found]                               ` <CA+v9cxZd3W8BwWoxng0zPXe0-WA2pObre=Bjm4htJB_j-3YkJw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-11  2:27                                 ` Ming Lei

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox