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

    xhci: Avoid infinite loop when sg urb requires too many trbs

to the 3.12-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:
     xhci-avoid-infinite-loop-when-sg-urb-requires-too-many-trbs.patch
and it can be found in the queue-3.12 subdirectory.

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


>From d6c9ea9069af684358efedcaf2f2f687f51c58ee Mon Sep 17 00:00:00 2001
From: Ben Hutchings <[email protected]>
Date: Mon, 6 Jan 2014 03:16:32 +0000
Subject: xhci: Avoid infinite loop when sg urb requires too many trbs

From: Ben Hutchings <[email protected]>

commit d6c9ea9069af684358efedcaf2f2f687f51c58ee upstream.

Currently prepare_ring() returns -ENOMEM if the urb won't fit into a
single ring segment.  usb_sg_wait() treats this error as a temporary
condition and will keep retrying until something else goes wrong.

The number of retries should be limited in usb_sg_wait(), but also
prepare_ring() should not return an error code that suggests it might
be worth retrying.  Change it to -EINVAL.

Reported-by: [email protected]
References: http://bugs.debian.org/733907
Fixes: 35773dac5f86 ('usb: xhci: Link TRB must not occur within a USB payload 
burst')
Signed-off-by: Ben Hutchings <[email protected]>
Signed-off-by: Sarah Sharp <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 drivers/usb/host/xhci-ring.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -2964,7 +2964,7 @@ static int prepare_ring(struct xhci_hcd
                        if (num_trbs >= TRBS_PER_SEGMENT) {
                                xhci_err(xhci, "Too many fragments %d, max 
%d\n",
                                                num_trbs, TRBS_PER_SEGMENT - 1);
-                               return -ENOMEM;
+                               return -EINVAL;
                        }
 
                        nop_cmd = cpu_to_le32(TRB_TYPE(TRB_TR_NOOP) |


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

queue-3.12/xhci-avoid-infinite-loop-when-sg-urb-requires-too-many-trbs.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to