ChangeSet 1.1587.3.22, 2004/04/30 22:19:00-07:00, [EMAIL PROTECTED]

[PATCH] USB: reject urb submissions to suspended devices

This patch rejects URB submissions to suspended devices, so
that they don't get hardware-specific fault reports.  Instead,
they get the same code (-EHOSTUNREACH) for all HCDs.

It also fixes a minor problem with colliding declarations of
the symbol USB_STATE_SUSPENDED.


 drivers/usb/core/hcd-pci.c |    6 +++---
 drivers/usb/core/hcd.h     |    2 +-
 drivers/usb/core/urb.c     |    2 ++
 3 files changed, 6 insertions(+), 4 deletions(-)


diff -Nru a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
--- a/drivers/usb/core/hcd-pci.c        Fri May 14 15:30:58 2004
+++ b/drivers/usb/core/hcd-pci.c        Fri May 14 15:30:58 2004
@@ -293,7 +293,7 @@
        case USB_STATE_HALT:
                dev_dbg (hcd->self.controller, "halted; hcd not suspended\n");
                break;
-       case USB_STATE_SUSPENDED:
+       case HCD_STATE_SUSPENDED:
                dev_dbg (hcd->self.controller, "hcd already suspended\n");
                break;
        default:
@@ -310,7 +310,7 @@
                                        "suspend fail, retval %d\n",
                                        retval);
                else
-                       hcd->state = USB_STATE_SUSPENDED;
+                       hcd->state = HCD_STATE_SUSPENDED;
        }
 
        pci_set_power_state (dev, state);
@@ -333,7 +333,7 @@
        dev_dbg (hcd->self.controller, "resume from state D%d\n",
                        dev->current_state);
 
-       if (hcd->state != USB_STATE_SUSPENDED) {
+       if (hcd->state != HCD_STATE_SUSPENDED) {
                dev_dbg (hcd->self.controller, 
                                "can't resume, not suspended!\n");
                return -EL3HLT;
diff -Nru a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h
--- a/drivers/usb/core/hcd.h    Fri May 14 15:30:58 2004
+++ b/drivers/usb/core/hcd.h    Fri May 14 15:30:58 2004
@@ -96,7 +96,7 @@
 #      define  USB_STATE_RUNNING       (__ACTIVE)
 #      define  USB_STATE_QUIESCING     (__SUSPEND|__TRANSIENT|__ACTIVE)
 #      define  USB_STATE_RESUMING      (__SUSPEND|__TRANSIENT)
-#      define  USB_STATE_SUSPENDED     (__SUSPEND)
+#      define  HCD_STATE_SUSPENDED     (__SUSPEND)
 
 #define        HCD_IS_RUNNING(state) ((state) & __ACTIVE)
 #define        HCD_IS_SUSPENDED(state) ((state) & __SUSPEND)
diff -Nru a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
--- a/drivers/usb/core/urb.c    Fri May 14 15:30:58 2004
+++ b/drivers/usb/core/urb.c    Fri May 14 15:30:58 2004
@@ -237,6 +237,8 @@
            (dev->state < USB_STATE_DEFAULT) ||
            (!dev->bus) || (dev->devnum <= 0))
                return -ENODEV;
+       if (dev->state == USB_STATE_SUSPENDED)
+               return -EHOSTUNREACH;
        if (!(op = dev->bus->op) || !op->submit_urb)
                return -ENODEV;
 



-------------------------------------------------------
This SF.Net email is sponsored by: SourceForge.net Broadband
Sign-up now for SourceForge Broadband and get the fastest
6.0/768 connection for only $19.95/mo for the first 3 months!
http://ads.osdn.com/?ad_id%62&alloc_ida84&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to