Skip to contentSkip to conversation

Patch "usb: gadget: function: u_ether: don't starve tx request queue" has been added to the 4.4-stable tree

PATCH [email protected] 1 participant 1 message Nov 7, 2016

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

usb: gadget: function: u_ether: don't starve tx request queue

to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
usb-gadget-function-u_ether-don-t-starve-tx-request-queue.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 6c83f77278f17a7679001027e9231291c20f0d8a Mon Sep 17 00:00:00 2001

From: Felipe Balbi <[email protected]>
Date: Tue, 4 Oct 2016 15:14:43 +0300
Subject: usb: gadget: function: u_ether: don't starve tx request queue
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

From: Felipe Balbi <[email protected]>

commit 6c83f77278f17a7679001027e9231291c20f0d8a upstream.

If we don't guarantee that we will always get an interrupt at least when we're queueing our very last request, we could fall into situation where we queue every request with 'no_interrupt' set. This will cause the link to get stuck.

The behavior above has been triggered with g_ether and dwc3.

---
 drivers/usb/gadget/function/u_ether.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/usb/gadget/function/u_ether.c +3 -2
@@ -596,8 +596,9 @@ static netdev_tx_t eth_start_xmit(struct
 
 	/* throttle high/super speed IRQ rate back slightly */
 	if (gadget_is_dualspeed(dev->gadget))
-		req->no_interrupt = (dev->gadget->speed == USB_SPEED_HIGH ||
-				     dev->gadget->speed == USB_SPEED_SUPER)
+		req->no_interrupt = (((dev->gadget->speed == USB_SPEED_HIGH ||
+				       dev->gadget->speed == USB_SPEED_SUPER)) &&
+					!list_empty(&dev->tx_reqs))
 			? ((atomic_read(&dev->tx_qlen) % dev->qmult) != 0)
 			: 0;
 

Patches currently in stable-queue which might be from [email protected] are

queue-4.4/usb-gadget-function-u_ether-don-t-starve-tx-request-queue.patch