ChangeSet 1.1843.4.24, 2004/08/24 16:34:01-07:00, [EMAIL PROTECTED]
[PATCH] USB: Update unlink testing code in the usbtest driver
Greg:
This patch updates the part of the usbtest driver that tests URB
unlinking. The move to usb_kill_urb() invalidated some of the old tests.
There's a corresponding change to the UHCI driver, causing it to return a
more descriptive error code in the rare event that an URB is cancelled
after it has been linked but before it has been queued.
Signed-off-by: Alan Stern <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
drivers/usb/host/uhci-hcd.c | 5 +++--
drivers/usb/misc/usbtest.c | 31 +++++++++++++++++--------------
2 files changed, 20 insertions(+), 16 deletions(-)
diff -Nru a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
--- a/drivers/usb/host/uhci-hcd.c 2004-08-26 16:41:32 -07:00
+++ b/drivers/usb/host/uhci-hcd.c 2004-08-26 16:41:32 -07:00
@@ -1340,7 +1340,7 @@
static int uhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, int mem_flags)
{
- int ret = -EINVAL;
+ int ret;
struct uhci_hcd *uhci = hcd_to_uhci(hcd);
unsigned long flags;
struct urb *eurb;
@@ -1348,7 +1348,8 @@
spin_lock_irqsave(&uhci->schedule_lock, flags);
- if (urb->status != -EINPROGRESS) /* URB already unlinked! */
+ ret = urb->status;
+ if (ret != -EINPROGRESS) /* URB already unlinked! */
goto out;
eurb = uhci_find_urb_ep(uhci, urb);
diff -Nru a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
--- a/drivers/usb/misc/usbtest.c 2004-08-26 16:41:32 -07:00
+++ b/drivers/usb/misc/usbtest.c 2004-08-26 16:41:32 -07:00
@@ -1054,8 +1054,7 @@
urb = simple_alloc_urb (testdev_to_usbdev (dev), pipe, size);
if (!urb)
return -ENOMEM;
- if (async)
- urb->transfer_flags |= URB_ASYNC_UNLINK;
+ urb->transfer_flags |= URB_ASYNC_UNLINK;
urb->context = &completion;
urb->complete = unlink1_callback;
@@ -1074,17 +1073,20 @@
* hcd states and code paths, even with little other system load.
*/
msleep (jiffies % (2 * INTERRUPT_RATE));
+ if (async) {
retry:
- retval = usb_unlink_urb (urb);
- if (retval == -EBUSY || retval == -EIDRM) {
- /* we can't unlink urbs while they're completing.
- * or if they've completed, and we haven't resubmitted.
- * "normal" drivers would prevent resubmission, but
- * since we're testing unlink paths, we can't.
- */
- dev_dbg (&dev->intf->dev, "unlink retry\n");
- goto retry;
- }
+ retval = usb_unlink_urb (urb);
+ if (retval == -EBUSY || retval == -EIDRM) {
+ /* we can't unlink urbs while they're completing.
+ * or if they've completed, and we haven't resubmitted.
+ * "normal" drivers would prevent resubmission, but
+ * since we're testing unlink paths, we can't.
+ */
+ dev_dbg (&dev->intf->dev, "unlink retry\n");
+ goto retry;
+ }
+ } else
+ usb_kill_urb (urb);
if (!(retval == 0 || retval == -EINPROGRESS)) {
dev_dbg (&dev->intf->dev, "unlink fail %d\n", retval);
return retval;
@@ -1095,9 +1097,10 @@
simple_free_urb (urb);
if (async)
- return (retval != -ECONNRESET) ? -ECONNRESET : 0;
+ return (retval == -ECONNRESET) ? 0 : retval - 1000;
else
- return (retval != -ENOENT) ? -ENOENT : 0;
+ return (retval == -ENOENT || retval == -EPERM) ?
+ 0 : retval - 2000;
}
static int unlink_simple (struct usbtest_dev *dev, int pipe, int len)
-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel