diff options
33 files changed, 75 insertions, 731 deletions
diff --git a/driver-core/device-create-block-convert-device_create-to-device_create_drvdata.patch b/driver-core/device-create-block-convert-device_create-to-device_create_drvdata.patch index 13cd18c3c37130..e2488b3b05cb52 100644 --- a/driver-core/device-create-block-convert-device_create-to-device_create_drvdata.patch +++ b/driver-core/device-create-block-convert-device_create-to-device_create_drvdata.patch @@ -21,7 +21,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- a/block/bsg.c +++ b/block/bsg.c -@@ -1019,7 +1019,8 @@ int bsg_register_queue(struct request_qu +@@ -1020,7 +1020,8 @@ int bsg_register_queue(struct request_qu bcd->release = release; kref_init(&bcd->ref); dev = MKDEV(bsg_major, bcd->minor); diff --git a/driver-core/device-create-spi-convert-device_create-to-device_create_drvdata.patch b/driver-core/device-create-spi-convert-device_create-to-device_create_drvdata.patch index b5d2828f353564..aa5b567ba4b0b1 100644 --- a/driver-core/device-create-spi-convert-device_create-to-device_create_drvdata.patch +++ b/driver-core/device-create-spi-convert-device_create-to-device_create_drvdata.patch @@ -22,7 +22,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c -@@ -575,7 +575,8 @@ static int spidev_probe(struct spi_devic +@@ -573,7 +573,8 @@ static int spidev_probe(struct spi_devic struct device *dev; spidev->devt = MKDEV(SPIDEV_MAJOR, minor); @@ -32,7 +32,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> "spidev%d.%d", spi->master->bus_num, spi->chip_select); status = IS_ERR(dev) ? PTR_ERR(dev) : 0; -@@ -585,7 +586,6 @@ static int spidev_probe(struct spi_devic +@@ -583,7 +584,6 @@ static int spidev_probe(struct spi_devic } if (status == 0) { set_bit(minor, minors); diff --git a/driver-core/driver-core-add-ability-for-class_find_device-to-start-in-middle-of-list.patch b/driver-core/driver-core-add-ability-for-class_find_device-to-start-in-middle-of-list.patch index 9a2625e107a386..e0d5f086f7f2b4 100644 --- a/driver-core/driver-core-add-ability-for-class_find_device-to-start-in-middle-of-list.patch +++ b/driver-core/driver-core-add-ability-for-class_find_device-to-start-in-middle-of-list.patch @@ -118,7 +118,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ne = container_of(dev, struct node_entry, node_dev); --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c -@@ -265,7 +265,7 @@ struct rtc_device *rtc_class_open(char * +@@ -345,7 +345,7 @@ struct rtc_device *rtc_class_open(char * struct device *dev; struct rtc_device *rtc = NULL; @@ -18,19 +18,19 @@ driver-core.current/kobject-fix-kobject_rename-and-config_sysfs.patch ################################# # USB patches for 2.6.26 ################################# -usb.current/ohci-fix-problem-if-sm501-and-another-platform-driver-is-selected.patch -usb.current/usb-fix-cdc-acm-resume.patch -usb.current/usb-ehci-fix-timer-regression.patch -usb.current/usb-ohci-record-data-toggle-after-unlink.patch -usb.current/usb-mass-storage-new-id-for-us_sc_cyp_atacb.patch -usb.current/sisusbvga-fix-oops-on-disconnect.patch -usb.current/usb-new-device-id-for-ftdi_sio-driver.patch -usb.current/usb-fix-interrupt-disabling-for-hcds-with-shared-interrupt-handlers.patch -usb.current/usb-don-t-lose-disconnections-during-suspend.patch -usb.current/usb-another-option-device-id.patch -usb.current/usb-add-a-pl2303-device-id.patch -usb.current/usb-fix-oops-on-loading-ipaq-module-since-2.6.26.patch -usb.current/usb-adding-comment-for-ipaq-forcing-number-of-ports.patch +#usb.current/ohci-fix-problem-if-sm501-and-another-platform-driver-is-selected.patch +#usb.current/usb-fix-cdc-acm-resume.patch +#usb.current/usb-ehci-fix-timer-regression.patch +#usb.current/usb-ohci-record-data-toggle-after-unlink.patch +#usb.current/usb-mass-storage-new-id-for-us_sc_cyp_atacb.patch +#usb.current/sisusbvga-fix-oops-on-disconnect.patch +#usb.current/usb-new-device-id-for-ftdi_sio-driver.patch +#usb.current/usb-fix-interrupt-disabling-for-hcds-with-shared-interrupt-handlers.patch +#usb.current/usb-don-t-lose-disconnections-during-suspend.patch +#usb.current/usb-another-option-device-id.patch +#usb.current/usb-add-a-pl2303-device-id.patch +#usb.current/usb-fix-oops-on-loading-ipaq-module-since-2.6.26.patch +#usb.current/usb-adding-comment-for-ipaq-forcing-number-of-ports.patch ##################################################################### # Stuff to be merged after 2.6.26 is out diff --git a/usb.current/ohci-fix-problem-if-sm501-and-another-platform-driver-is-selected.patch b/usb.current/ohci-fix-problem-if-sm501-and-another-platform-driver-is-selected.patch deleted file mode 100644 index 7821beda1119b3..00000000000000 --- a/usb.current/ohci-fix-problem-if-sm501-and-another-platform-driver-is-selected.patch +++ /dev/null @@ -1,73 +0,0 @@ -From ben-linux@fluff.org Fri Jun 13 17:39:48 2008 -From: Ben Dooks <ben-linux@fluff.org> -Date: Sun, 08 Jun 2008 17:20:11 +0100 -Subject: OHCI: Fix problem if SM501 and another platform driver is selected -To: linux-usb@vger.kernel.org -Cc: Ben Dooks <ben-linux@fluff.org> -Message-ID: <20080608162011.190329883@fluff.org.uk> - -From: Ben Dooks <ben-linux@fluff.org> - -If the SM501 and another platform driver, such as the SM501 -then we end up defining PLATFORM_DRIVER twice. This patch -seperated the SM501 onto a seperate define of SM501_OHCI_DRIVER -so that it can be selected without overwriting the original -definition. - -Signed-off-by: Ben Dooks <ben-linux@fluff.org> -Acked-by: David Brownell <dbrownell@users.sourceforge.net> -Cc: stable <stable@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/host/ohci-hcd.c | 15 ++++++++++++++- - 1 file changed, 14 insertions(+), 1 deletion(-) - ---- a/drivers/usb/host/ohci-hcd.c -+++ b/drivers/usb/host/ohci-hcd.c -@@ -1054,7 +1054,7 @@ MODULE_LICENSE ("GPL"); - - #ifdef CONFIG_MFD_SM501 - #include "ohci-sm501.c" --#define PLATFORM_DRIVER ohci_hcd_sm501_driver -+#define SM501_OHCI_DRIVER ohci_hcd_sm501_driver - #endif - - #if !defined(PCI_DRIVER) && \ -@@ -1062,6 +1062,7 @@ MODULE_LICENSE ("GPL"); - !defined(OF_PLATFORM_DRIVER) && \ - !defined(SA1111_DRIVER) && \ - !defined(PS3_SYSTEM_BUS_DRIVER) && \ -+ !defined(SM501_OHCI_DRIVER) && \ - !defined(SSB_OHCI_DRIVER) - #error "missing bus glue for ohci-hcd" - #endif -@@ -1121,9 +1122,18 @@ static int __init ohci_hcd_mod_init(void - goto error_ssb; - #endif - -+#ifdef SM501_OHCI_DRIVER -+ retval = platform_driver_register(&SM501_OHCI_DRIVER); -+ if (retval < 0) -+ goto error_sm501; -+#endif -+ - return retval; - - /* Error path */ -+#ifdef SM501_OHCI_DRIVER -+ error_sm501: -+#endif - #ifdef SSB_OHCI_DRIVER - error_ssb: - #endif -@@ -1159,6 +1169,9 @@ module_init(ohci_hcd_mod_init); - - static void __exit ohci_hcd_mod_exit(void) - { -+#ifdef SM501_OHCI_DRIVER -+ platform_driver_unregister(&SM501_OHCI_DRIVER); -+#endif - #ifdef SSB_OHCI_DRIVER - ssb_driver_unregister(&SSB_OHCI_DRIVER); - #endif diff --git a/usb.current/sisusbvga-fix-oops-on-disconnect.patch b/usb.current/sisusbvga-fix-oops-on-disconnect.patch deleted file mode 100644 index 70633160bb1875..00000000000000 --- a/usb.current/sisusbvga-fix-oops-on-disconnect.patch +++ /dev/null @@ -1,35 +0,0 @@ -From will.newton@imgtec.com Fri Jun 27 14:34:47 2008 -From: Will Newton <will.newton@imgtec.com> -Date: Fri, 27 Jun 2008 13:08:08 +0100 -Subject: sisusbvga: Fix oops on disconnect. -To: linux-kernel@vger.kernel.org -Cc: linux-usb@vger.kernel.org, felipe.lima@indt.org.br, gregkh@suse.de, Will Newton <will.newton@gmail.com> -Message-ID: <1214568488-5356-1-git-send-email-will.newton@imgtec.com> - - -From: Will Newton <will.newton@gmail.com> - -Remove dev_info call on disconnect. The sisusb_dev pointer may have been -set to zero by sisusb_delete at this point causing an oops. - -The message does not provide any extra information over the standard USB -subsystem output so removing it does not affect functionality. - -Signed-off-by: Will Newton <will.newton@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/misc/sisusbvga/sisusb.c | 2 -- - 1 file changed, 2 deletions(-) - ---- a/drivers/usb/misc/sisusbvga/sisusb.c -+++ b/drivers/usb/misc/sisusbvga/sisusb.c -@@ -3264,8 +3264,6 @@ static void sisusb_disconnect(struct usb - - /* decrement our usage count */ - kref_put(&sisusb->kref, sisusb_delete); -- -- dev_info(&sisusb->sisusb_dev->dev, "Disconnected\n"); - } - - static struct usb_device_id sisusb_table [] = { diff --git a/usb.current/usb-add-a-pl2303-device-id.patch b/usb.current/usb-add-a-pl2303-device-id.patch deleted file mode 100644 index a9bef669043799..00000000000000 --- a/usb.current/usb-add-a-pl2303-device-id.patch +++ /dev/null @@ -1,36 +0,0 @@ -From foo@baz Tue Apr 9 12:12:43 2002 -Date: Wed, 2 Jul 2008 15:25:41 -0500 (CDT) -To: Greg KH <greg@kroah.com> -From: Greg Kroah-Hartman <gregkh@suse.de> -Subject: USB: add a pl2303 device id - -As reported by Ken A Scott <kscott9@sent.com> - -Cc: Ken A Scott <kscott9@sent.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/serial/pl2303.c | 1 + - drivers/usb/serial/pl2303.h | 1 + - 2 files changed, 2 insertions(+) - ---- a/drivers/usb/serial/pl2303.c -+++ b/drivers/usb/serial/pl2303.c -@@ -57,6 +57,7 @@ static struct usb_device_id id_table [] - { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, - { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, - { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, -+ { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) }, - { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, - { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, - { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, ---- a/drivers/usb/serial/pl2303.h -+++ b/drivers/usb/serial/pl2303.h -@@ -15,6 +15,7 @@ - #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 - #define PL2303_PRODUCT_ID_ALDIGA 0x0611 - #define PL2303_PRODUCT_ID_MMX 0x0612 -+#define PL2303_PRODUCT_ID_GPRS 0x0609 - - #define ATEN_VENDOR_ID 0x0557 - #define ATEN_VENDOR_ID2 0x0547 diff --git a/usb.current/usb-adding-comment-for-ipaq-forcing-number-of-ports.patch b/usb.current/usb-adding-comment-for-ipaq-forcing-number-of-ports.patch deleted file mode 100644 index 993ce4e867762c..00000000000000 --- a/usb.current/usb-adding-comment-for-ipaq-forcing-number-of-ports.patch +++ /dev/null @@ -1,33 +0,0 @@ -From oliver@neukum.org Thu Jul 3 13:09:29 2008 -From: Oliver Neukum <oliver@neukum.org> -Date: Thu, 3 Jul 2008 17:14:16 +0200 -Subject: USB: adding comment for ipaq forcing number of ports -To: Adrian Bunk <bunk@kernel.org> -Cc: Greg KH <greg@kroah.com>, linux-usb@vger.kernel.org -Message-ID: <200807031714.16617.oliver@neukum.org> -Content-Disposition: inline - - -The reason for forcing a number of ports should be documented. - -Signed-off-by: Oliver Neukum <oneukum@suse.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/serial/ipaq.c | 5 +++++ - 1 file changed, 5 insertions(+) - ---- a/drivers/usb/serial/ipaq.c -+++ b/drivers/usb/serial/ipaq.c -@@ -570,6 +570,11 @@ static struct usb_serial_driver ipaq_dev - .description = "PocketPC PDA", - .usb_driver = &ipaq_driver, - .id_table = ipaq_id_table, -+ /* -+ * some devices have an extra endpoint, which -+ * must be ignored as it would make the core -+ * create a second port which oopses when used -+ */ - .num_ports = 1, - .open = ipaq_open, - .close = ipaq_close, diff --git a/usb.current/usb-another-option-device-id.patch b/usb.current/usb-another-option-device-id.patch deleted file mode 100644 index 3ef3dd4c513fd4..00000000000000 --- a/usb.current/usb-another-option-device-id.patch +++ /dev/null @@ -1,25 +0,0 @@ -From foo@baz Tue Apr 9 12:12:43 2002 -Date: Tue, 1 Jul 2008 13:11:56 +0530 -To: Greg KH <greg@kroah.com> -From: Greg Kroah-Hartman <gregkh@suse.de> -Subject: USB: another option device id - -Thanks to umesh b <umesh.kollam@gmail.com> for the information here. - -Cc: umesh b <umesh.kollam@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/serial/option.c | 1 + - 1 file changed, 1 insertion(+) - ---- a/drivers/usb/serial/option.c -+++ b/drivers/usb/serial/option.c -@@ -306,6 +306,7 @@ static struct usb_device_id option_ids[] - { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, - { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) }, - { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, -+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ - { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ - { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ - { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, diff --git a/usb.current/usb-don-t-lose-disconnections-during-suspend.patch b/usb.current/usb-don-t-lose-disconnections-during-suspend.patch deleted file mode 100644 index 2c8061b12cdfbf..00000000000000 --- a/usb.current/usb-don-t-lose-disconnections-during-suspend.patch +++ /dev/null @@ -1,49 +0,0 @@ -From stern@rowland.harvard.edu Tue Jul 1 12:15:57 2008 -From: Alan Stern <stern@rowland.harvard.edu> -Date: Tue, 1 Jul 2008 10:45:51 -0400 (EDT) -Subject: USB: don't lose disconnections during suspend -To: Greg KH <greg@kroah.com> -Cc: Lukas Hejtmanek <xhejtman@ics.muni.cz>, USB list <linux-usb@vger.kernel.org> -Message-ID: <Pine.LNX.4.44L0.0807011043290.2780-100000@iolanthe.rowland.org> - - -This patch (as1111) fixes a bug in the hub driver. When a hub -resumes, disconnections that occurred while the hub was suspended are -lost. - -A completely different fix for this problem has already been accepted -for 2.6.27; however the problem still needs to be handled in 2.6.26. - -Signed-off-by: Alan Stern <stern@rowland.harvard.edu> -Tested-by: Lukas Hejtmanek <xhejtman@ics.muni.cz> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/core/hub.c | 15 ++++----------- - 1 file changed, 4 insertions(+), 11 deletions(-) - ---- a/drivers/usb/core/hub.c -+++ b/drivers/usb/core/hub.c -@@ -713,18 +713,11 @@ static void hub_restart(struct usb_hub * - } - - /* Was the power session lost while we were suspended? */ -- switch (type) { -- case HUB_RESET_RESUME: -- portstatus = 0; -- portchange = USB_PORT_STAT_C_CONNECTION; -- break; -+ status = hub_port_status(hub, port1, &portstatus, &portchange); - -- case HUB_RESET: -- case HUB_RESUME: -- status = hub_port_status(hub, port1, -- &portstatus, &portchange); -- break; -- } -+ /* If the device is gone, khubd will handle it later */ -+ if (status == 0 && !(portstatus & USB_PORT_STAT_CONNECTION)) -+ continue; - - /* For "USB_PERSIST"-enabled children we must - * mark the child device for reset-resume and diff --git a/usb.current/usb-ehci-fix-timer-regression.patch b/usb.current/usb-ehci-fix-timer-regression.patch deleted file mode 100644 index eef9b458b02ca0..00000000000000 --- a/usb.current/usb-ehci-fix-timer-regression.patch +++ /dev/null @@ -1,63 +0,0 @@ -From david-b@pacbell.net Thu Jun 19 11:57:42 2008 -From: David Brownell <david-b@pacbell.net> -Date: Fri, 13 Jun 2008 23:56:48 -0700 -Subject: USB: ehci - fix timer regression -To: Greg KH <greg@kroah.com> -Message-ID: <200806132356.48712.david-b@pacbell.net> -Content-Disposition: inline - - -This patch fixes a regression in the EHCI driver's TIMER_IO_WATCHDOG -behavior. The patch "USB: EHCI: add separate IAA watchdog timer" changed -how that timer is handled, so that short timeouts on the remaining -timer (unfortunately, overloaded) would never be used. - -This takes a more direct approach, reorganizing the code slightly to -be explicit about only the I/O watchdog role now being overridable. -It also replaces a now-obsolete comment describing older timer behavior. - -Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> -Cc: Alan Stern <stern@rowland.harvard.edu> -Cc: Leonid <leonidv11@gmail.com> -Cc: stable <stable@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/host/ehci.h | 19 ++++++++++--------- - 1 file changed, 10 insertions(+), 9 deletions(-) - ---- a/drivers/usb/host/ehci.h -+++ b/drivers/usb/host/ehci.h -@@ -177,6 +177,15 @@ timer_action_done (struct ehci_hcd *ehci - static inline void - timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) - { -+ /* Don't override timeouts which shrink or (later) disable -+ * the async ring; just the I/O watchdog. Note that if a -+ * SHRINK were pending, OFF would never be requested. -+ */ -+ if (timer_pending(&ehci->watchdog) -+ && ((BIT(TIMER_ASYNC_SHRINK) | BIT(TIMER_ASYNC_OFF)) -+ & ehci->actions)) -+ return; -+ - if (!test_and_set_bit (action, &ehci->actions)) { - unsigned long t; - -@@ -192,15 +201,7 @@ timer_action (struct ehci_hcd *ehci, enu - t = EHCI_SHRINK_JIFFIES; - break; - } -- t += jiffies; -- // all timings except IAA watchdog can be overridden. -- // async queue SHRINK often precedes IAA. while it's ready -- // to go OFF neither can matter, and afterwards the IO -- // watchdog stops unless there's still periodic traffic. -- if (time_before_eq(t, ehci->watchdog.expires) -- && timer_pending (&ehci->watchdog)) -- return; -- mod_timer (&ehci->watchdog, t); -+ mod_timer(&ehci->watchdog, t + jiffies); - } - } - diff --git a/usb.current/usb-fix-cdc-acm-resume.patch b/usb.current/usb-fix-cdc-acm-resume.patch deleted file mode 100644 index 9bcdddde2969b8..00000000000000 --- a/usb.current/usb-fix-cdc-acm-resume.patch +++ /dev/null @@ -1,33 +0,0 @@ -From oliver@neukum.org Thu Jun 19 12:06:07 2008 -From: Oliver Neukum <oliver@neukum.org> -Date: Tue, 17 Jun 2008 22:30:48 +0200 -Subject: USB: fix cdc-acm resume() -To: greg kh <greg@kroah.com>, Linux USB <linux-usb@vger.kernel.org> -Message-ID: <200806172230.49447.oliver@neukum.org> -Content-Disposition: inline - - -cdc-acm has -- a memory leak in resume() -- will fail to reactivate the read code path if this is needed. -his corrects it by deleting the useless relict code. - -Signed-off-by: Oliver Neukum <oneukum@suse.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/class/cdc-acm.c | 3 --- - 1 file changed, 3 deletions(-) - ---- a/drivers/usb/class/cdc-acm.c -+++ b/drivers/usb/class/cdc-acm.c -@@ -1125,9 +1125,6 @@ static void stop_data_traffic(struct acm - for (i = 0; i < acm->rx_buflimit; i++) - usb_kill_urb(acm->ru[i].urb); - -- INIT_LIST_HEAD(&acm->filled_read_bufs); -- INIT_LIST_HEAD(&acm->spare_read_bufs); -- - tasklet_enable(&acm->urb_task); - - cancel_work_sync(&acm->work); diff --git a/usb.current/usb-fix-interrupt-disabling-for-hcds-with-shared-interrupt-handlers.patch b/usb.current/usb-fix-interrupt-disabling-for-hcds-with-shared-interrupt-handlers.patch deleted file mode 100644 index d8c88d334ce6f0..00000000000000 --- a/usb.current/usb-fix-interrupt-disabling-for-hcds-with-shared-interrupt-handlers.patch +++ /dev/null @@ -1,95 +0,0 @@ -From Stefan.Becker@nokia.com Tue Jul 1 12:14:33 2008 -From: Stefan Becker <Stefan.Becker@nokia.com> -Date: Tue, 01 Jul 2008 19:19:22 +0300 -Subject: USB: fix interrupt disabling for HCDs with shared interrupt handlers -To: ext Alan Stern <stern@rowland.harvard.edu>, linux-usb@vger.kernel.org, ext Greg Kroah-Hartman <gregkh@suse.de> -Cc: ext David Brownell <david-b@pacbell.net>, linux-kernel@vger.kernel.org, Linus Torvalds <torvalds@linux-foundation.org>, ext Leonardo Chiquitto <leonardo.lists@gmail.com> -Message-ID: <486A590A.4090806@nokia.com> - -USB: fix interrupt disabling for HCDs with shared interrupt handlers - -As has been discussed several times on LKML, IRQF_SHARED | IRQF_DISABLED -doesn't work reliably, i.e. a shared interrupt handler CAN'T be certain to -be called with interrupts disabled. Most USB HCD handlers use IRQF_DISABLED -and therefore havoc can break out if they share their interrupt with a -handler that doesn't use it. - -On my test machine the yenta_socket interrupt handler (no IRQF_DISABLED) -was registered before ehci_hcd and one uhci_hcd instance. Therefore all -usb_hcd_irq() invocations for ehci_hcd and for one uhci_hcd instance -happened with interrupts enabled. That led to random lockups as USB core -HCD functions that acquire the same spinlock could be called twice -from interrupt handlers. - -This patch updates usb_hcd_irq() to always disable/restore interrupts. -usb_add_hcd() will silently remove any IRQF_DISABLED requested from HCD code. - -Signed-off-by: Stefan Becker <stefan.becker@nokia.com> -Cc: stable <stable@kernel.org> -Acked-by: David Brownell <david-b@pacbell.net> -Acked-by: Alan Stern <stern@rowland.harvard.edu> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/core/hcd.c | 42 ++++++++++++++++++++++++++++++------------ - 1 file changed, 30 insertions(+), 12 deletions(-) - ---- a/drivers/usb/core/hcd.c -+++ b/drivers/usb/core/hcd.c -@@ -1684,19 +1684,30 @@ EXPORT_SYMBOL_GPL(usb_bus_start_enum); - irqreturn_t usb_hcd_irq (int irq, void *__hcd) - { - struct usb_hcd *hcd = __hcd; -- int start = hcd->state; -+ unsigned long flags; -+ irqreturn_t rc; - -- if (unlikely(start == HC_STATE_HALT || -- !test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags))) -- return IRQ_NONE; -- if (hcd->driver->irq (hcd) == IRQ_NONE) -- return IRQ_NONE; -- -- set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags); -- -- if (unlikely(hcd->state == HC_STATE_HALT)) -- usb_hc_died (hcd); -- return IRQ_HANDLED; -+ /* IRQF_DISABLED doesn't work correctly with shared IRQs -+ * when the first handler doesn't use it. So let's just -+ * assume it's never used. -+ */ -+ local_irq_save(flags); -+ -+ if (unlikely(hcd->state == HC_STATE_HALT || -+ !test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags))) { -+ rc = IRQ_NONE; -+ } else if (hcd->driver->irq(hcd) == IRQ_NONE) { -+ rc = IRQ_NONE; -+ } else { -+ set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags); -+ -+ if (unlikely(hcd->state == HC_STATE_HALT)) -+ usb_hc_died(hcd); -+ rc = IRQ_HANDLED; -+ } -+ -+ local_irq_restore(flags); -+ return rc; - } - - /*-------------------------------------------------------------------------*/ -@@ -1860,6 +1871,13 @@ int usb_add_hcd(struct usb_hcd *hcd, - - /* enable irqs just before we start the controller */ - if (hcd->driver->irq) { -+ -+ /* IRQF_DISABLED doesn't work as advertised when used together -+ * with IRQF_SHARED. As usb_hcd_irq() will always disable -+ * interrupts we can remove it here. -+ */ -+ irqflags &= ~IRQF_DISABLED; -+ - snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", - hcd->driver->description, hcd->self.busnum); - if ((retval = request_irq(irqnum, &usb_hcd_irq, irqflags, diff --git a/usb.current/usb-fix-oops-on-loading-ipaq-module-since-2.6.26.patch b/usb.current/usb-fix-oops-on-loading-ipaq-module-since-2.6.26.patch deleted file mode 100644 index d365689a683aaf..00000000000000 --- a/usb.current/usb-fix-oops-on-loading-ipaq-module-since-2.6.26.patch +++ /dev/null @@ -1,30 +0,0 @@ -From oliver@neukum.org Thu Jul 3 13:08:17 2008 -From: Oliver Neukum <oliver@neukum.org> -Date: Thu, 3 Jul 2008 10:05:57 +0200 -Subject: USB: fix Oops on loading ipaq module since 2.6.26 -To: Adam Williamson <awilliamson@mandriva.com> -Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>, Adrian Bunk <bunk@kernel.org>, Arjan van de Ven <arjan@infradead.org>, "Rafael J. Wysocki" <rjw@sisk.pl>, Alan Cox <alan@redhat.com>, bugme-daemon@bugzilla.kernel.org, Greg KH <greg@kroah.com>, linux-usb@vger.kernel.org -Message-ID: <200807031005.59691.oliver@neukum.org> -Content-Disposition: inline - -Fixes bugzilla.kernel.org #10868 - -Signed-off-by: Oliver Neukum <oneukum@suse.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/usb/serial/ipaq.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/usb/serial/ipaq.c -+++ b/drivers/usb/serial/ipaq.c -@@ -570,7 +570,7 @@ static struct usb_serial_driver ipaq_dev - .description = "PocketPC PDA", - .usb_driver = &ipaq_driver, - .id_table = ipaq_id_table, -- .num_ports = 2, -+ .num_ports = 1, - .open = ipaq_open, - .close = ipaq_close, - .attach = ipaq_startup, diff --git a/usb.current/usb-mass-storage-new-id-for-us_sc_cyp_atacb.patch b/usb.current/usb-mass-storage-new-id-for-us_sc_cyp_atacb.patch deleted file mode 100644 index 17b502ebcd5234..00000000000000 --- a/usb.current/usb-mass-storage-new-id-for-us_sc_cyp_atacb.patch +++ /dev/null @@ -1,41 +0,0 @@ -From castet.matthieu@free.fr Thu Jun 19 13:21:53 2008 -From: matthieu castet <castet.matthieu@free.fr> -Date: Mon, 16 Jun 2008 19:49:06 +0200 -Subject: USB: mass storage: new id for US_SC_CYP_ATACB -To: linux-usb@vger.kernel.org -Message-ID: <4856A792.5020007@free.fr> - - - -CY7C68310 chip also support cypress atacb "ATA command" pass_thru. - - -Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/storage/unusual_devs.h | 8 ++++++++ - 1 file changed, 8 insertions(+) - ---- a/drivers/usb/storage/unusual_devs.h -+++ b/drivers/usb/storage/unusual_devs.h -@@ -402,11 +402,19 @@ UNUSUAL_DEV( 0x04a5, 0x3010, 0x0100, 0x - US_FL_IGNORE_RESIDUE ), - - #ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB -+/* CY7C68300 : support atacb */ - UNUSUAL_DEV( 0x04b4, 0x6830, 0x0000, 0x9999, - "Cypress", - "Cypress AT2LP", - US_SC_CYP_ATACB, US_PR_DEVICE, NULL, - 0), -+ -+/* CY7C68310 : support atacb and atacb2 */ -+UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x9999, -+ "Cypress", -+ "Cypress ISD-300LP", -+ US_SC_CYP_ATACB, US_PR_DEVICE, NULL, -+ 0), - #endif - - /* Reported by Simon Levitt <simon@whattf.com> diff --git a/usb.current/usb-new-device-id-for-ftdi_sio-driver.patch b/usb.current/usb-new-device-id-for-ftdi_sio-driver.patch deleted file mode 100644 index 075546fde1e358..00000000000000 --- a/usb.current/usb-new-device-id-for-ftdi_sio-driver.patch +++ /dev/null @@ -1,67 +0,0 @@ -From hellan@acm.org Fri Jun 27 15:17:23 2008 -From: Jon K Hellan <hellan@acm.org> -Date: Tue, 24 Jun 2008 11:43:13 +0200 -Subject: USB: New device ID for ftdi_sio driver -To: linux-usb@vger.kernel.org -Message-ID: <4860C1B1.4060001@acm.org> - -From: Jon K Hellan <hellan@acm.org> - -Here's a new device ID for the ftdio_sio driver. -The diff is with linus's tree as of this morning. - -The device is the RigExpert Tiny USB Soundcard Transceiver Interface for ham -radio. - -(I didn't actually test this. A fellow ham couldn't get the device to work, and -I suggested binding the device ID using sysfs - see -"http://jk.ufisa.uninett.no/usb/". However, he had had moved on to other things -by then. I guess adding the device ID to the kernel "on spec" won't hurt. -The relevant part of cat /proc/bus/usb/devices shows: - -T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 -D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 -P: Vendor=0403 ProdID=ed22 Rev= 5.00 -S: Manufacturer=FTDI -S: Product=MixW RigExpert Tiny -S: SerialNumber=00000000 -C:* #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA -I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) -E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms -E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms -I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) -E: Ad=83(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms -E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms -) - -From: Jon K Hellan <hellan@acm.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/usb/serial/ftdi_sio.c | 1 + - drivers/usb/serial/ftdi_sio.h | 3 +++ - 2 files changed, 4 insertions(+) - ---- a/drivers/usb/serial/ftdi_sio.c -+++ b/drivers/usb/serial/ftdi_sio.c -@@ -637,6 +637,7 @@ static struct usb_device_id id_table_com - { USB_DEVICE(FTDI_VID, FTDI_OOCDLINK_PID), - .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, - { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, -+ { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, - { }, /* Optional parameter entry */ - { } /* Terminating entry */ - }; ---- a/drivers/usb/serial/ftdi_sio.h -+++ b/drivers/usb/serial/ftdi_sio.h -@@ -828,6 +828,9 @@ - /* Propox devices */ - #define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 - -+/* Rig Expert Ukraine devices */ -+#define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ -+ - /* Commands */ - #define FTDI_SIO_RESET 0 /* Reset the port */ - #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ diff --git a/usb.current/usb-ohci-record-data-toggle-after-unlink.patch b/usb.current/usb-ohci-record-data-toggle-after-unlink.patch deleted file mode 100644 index 3c3305c95d8aa9..00000000000000 --- a/usb.current/usb-ohci-record-data-toggle-after-unlink.patch +++ /dev/null @@ -1,69 +0,0 @@ -From david-b@pacbell.net Thu Jun 19 11:58:10 2008 -From: David Brownell <david-b@pacbell.net> -Date: Fri, 13 Jun 2008 23:59:54 -0700 -Subject: USB: ohci - record data toggle after unlink -To: Greg KH <greg@kroah.com> -Message-ID: <200806132359.54466.david-b@pacbell.net> -Content-Disposition: inline - - -From: David Brownell <dbrownell@users.sourceforge.net> - -This patch fixes a problem with OHCI where canceling bulk or -interrupt URBs may lose track of the right data toggle. This -seems to be a longstanding bug, possibly dating back to the -Linux 2.4 kernel, which stayed hidden because - - (a) about half the time the data toggle bit was correct; - (b) canceling such URBs is unusual; and - (c) the few drivers which cancel these URBs either - [1] do it only as part of shutting down, or - [2] have fault recovery logic, which recovers. - -For those transfer types, the toggle is normally written back -into the ED when each TD is retired. But canceling bypasses -the mechanism used to retire TDs ... so on average, half the -time the toggle bit will be invalid after cancelation. - -The fix is simple: the toggle state of any canceled TDs are -propagated back to the ED in the finish_unlinks function. - -(Issue found by leonidv11@gmail.com ...) - -Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> -Cc: Leonid <leonidv11@gmail.com> -Cc: stable <stable@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/host/ohci-q.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - ---- a/drivers/usb/host/ohci-q.c -+++ b/drivers/usb/host/ohci-q.c -@@ -952,6 +952,7 @@ rescan_this: - struct urb *urb; - urb_priv_t *urb_priv; - __hc32 savebits; -+ u32 tdINFO; - - td = list_entry (entry, struct td, td_list); - urb = td->urb; -@@ -966,6 +967,17 @@ rescan_this: - savebits = *prev & ~cpu_to_hc32 (ohci, TD_MASK); - *prev = td->hwNextTD | savebits; - -+ /* If this was unlinked, the TD may not have been -+ * retired ... so manually save the data toggle. -+ * The controller ignores the value we save for -+ * control and ISO endpoints. -+ */ -+ tdINFO = hc32_to_cpup(ohci, &td->hwINFO); -+ if ((tdINFO & TD_T) == TD_T_DATA0) -+ ed->hwHeadP &= ~cpu_to_hc32(ohci, ED_C); -+ else if ((tdINFO & TD_T) == TD_T_DATA1) -+ ed->hwHeadP |= cpu_to_hc32(ohci, ED_C); -+ - /* HC may have partly processed this TD */ - td_done (ohci, urb, td); - urb_priv->td_cnt++; diff --git a/usb/usb-add-new-routine-for-checking-port-resume-type.patch b/usb/usb-add-new-routine-for-checking-port-resume-type.patch index a8008b22912cdd..2471d3e171e7a5 100644 --- a/usb/usb-add-new-routine-for-checking-port-resume-type.patch +++ b/usb/usb-add-new-routine-for-checking-port-resume-type.patch @@ -24,8 +24,8 @@ Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- - drivers/usb/core/hub.c | 90 ++++++++++++++++++++++++++++++++++--------------- - 1 file changed, 63 insertions(+), 27 deletions(-) + drivers/usb/core/hub.c | 89 ++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 63 insertions(+), 26 deletions(-) --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -83,7 +83,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> /* Skip the initial Clear-Suspend step for a remote wakeup */ status = hub_port_status(hub, port1, &portstatus, &portchange); -@@ -2054,33 +2092,20 @@ int usb_port_resume(struct usb_device *u +@@ -2054,35 +2092,23 @@ int usb_port_resume(struct usb_device *u */ status = hub_port_status(hub, port1, &portstatus, &portchange); @@ -96,7 +96,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - | USB_PORT_STAT_CONNECTION - | USB_PORT_STAT_ENABLE; - mask_flags = want_flags | USB_PORT_STAT_SUSPEND; -- ++ /* TRSMRCY = 10 msec */ ++ msleep(10); ++ } + - if (status < 0 || (portstatus & mask_flags) != want_flags) { - dev_dbg(hub->intfdev, - "port %d status %04x.%04x after resume, %d\n", @@ -110,24 +113,23 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - /* TRSMRCY = 10 msec */ - msleep(10); - } -+ /* TRSMRCY = 10 msec */ -+ msleep(10); - } - + SuspendCleared: + if (status == 0) { + if (portchange & USB_PORT_STAT_C_SUSPEND) + clear_port_feature(hub->hdev, port1, + USB_PORT_FEAT_C_SUSPEND); -+ } + } + clear_bit(port1, hub->busy_bits); + if (!hub->hdev->parent && !hub->busy_bits[0]) + usb_enable_root_hub_irq(hub->hdev->bus); + status = check_port_resume_type(udev, + hub, port1, status, portchange, portstatus); if (status == 0) status = finish_port_resume(udev); if (status < 0) { -@@ -2113,12 +2138,23 @@ int usb_port_suspend(struct usb_device * +@@ -2115,12 +2141,23 @@ int usb_port_suspend(struct usb_device * return 0; } diff --git a/usb/usb-au1xxx-usb-clean-up-ohci-ehci-bus-glue-sources.patch b/usb/usb-au1xxx-usb-clean-up-ohci-ehci-bus-glue-sources.patch index cd4041de667e8a..45581b508b7ca1 100644 --- a/usb/usb-au1xxx-usb-clean-up-ohci-ehci-bus-glue-sources.patch +++ b/usb/usb-au1xxx-usb-clean-up-ohci-ehci-bus-glue-sources.patch @@ -650,7 +650,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> static const struct hc_driver ohci_au1xxx_hc_driver = { .description = hcd_name, .product_desc = "Au1xxx OHCI", -@@ -295,18 +170,66 @@ static const struct hc_driver ohci_au1xx +@@ -296,18 +171,66 @@ static const struct hc_driver ohci_au1xx .start_port_reset = ohci_start_port_reset, }; @@ -722,7 +722,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> return ret; } -@@ -314,9 +237,16 @@ static int ohci_hcd_au1xxx_drv_remove(st +@@ -315,9 +238,16 @@ static int ohci_hcd_au1xxx_drv_remove(st { struct usb_hcd *hcd = platform_get_drvdata(pdev); diff --git a/usb/usb-au1xxx-usb-suspend-resume-support.patch b/usb/usb-au1xxx-usb-suspend-resume-support.patch index 6a0807d4d0f216..48ab159c3e287a 100644 --- a/usb/usb-au1xxx-usb-suspend-resume-support.patch +++ b/usb/usb-au1xxx-usb-suspend-resume-support.patch @@ -162,7 +162,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> .owner = THIS_MODULE, --- a/drivers/usb/host/ohci-au1xxx.c +++ b/drivers/usb/host/ohci-au1xxx.c -@@ -247,27 +247,68 @@ static int ohci_hcd_au1xxx_drv_remove(st +@@ -248,27 +248,68 @@ static int ohci_hcd_au1xxx_drv_remove(st return 0; } diff --git a/usb/usb-combine-hub_activate-and-hub_restart.patch b/usb/usb-combine-hub_activate-and-hub_restart.patch index 21d33a14bff817..e8383a86eaa64a 100644 --- a/usb/usb-combine-hub_activate-and-hub_restart.patch +++ b/usb/usb-combine-hub_activate-and-hub_restart.patch @@ -109,7 +109,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> return 0; fail: -@@ -2175,7 +2173,7 @@ static int hub_resume(struct usb_interfa +@@ -2178,7 +2176,7 @@ static int hub_resume(struct usb_interfa struct usb_hub *hub = usb_get_intfdata(intf); dev_dbg(&intf->dev, "%s\n", __func__); @@ -118,7 +118,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> return 0; } -@@ -2184,8 +2182,7 @@ static int hub_reset_resume(struct usb_i +@@ -2187,8 +2185,7 @@ static int hub_reset_resume(struct usb_i struct usb_hub *hub = usb_get_intfdata(intf); dev_dbg(&intf->dev, "%s\n", __func__); diff --git a/usb/usb-combine-hub_quiesce-and-hub_stop.patch b/usb/usb-combine-hub_quiesce-and-hub_stop.patch index 0a96428e2bc746..6966c43739085c 100644 --- a/usb/usb-combine-hub_quiesce-and-hub_stop.patch +++ b/usb/usb-combine-hub_quiesce-and-hub_stop.patch @@ -112,7 +112,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> usb_set_intfdata (intf, NULL); -@@ -2164,7 +2165,7 @@ static int hub_suspend(struct usb_interf +@@ -2167,7 +2168,7 @@ static int hub_suspend(struct usb_interf dev_dbg(&intf->dev, "%s\n", __func__); /* stop khubd and related activity */ @@ -121,7 +121,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> return 0; } -@@ -2911,7 +2912,7 @@ static void hub_events(void) +@@ -2914,7 +2915,7 @@ static void hub_events(void) /* If the hub has died, clean up after it */ if (hdev->state == USB_STATE_NOTATTACHED) { hub->error = -ENODEV; diff --git a/usb/usb-debounce-before-unregistering.patch b/usb/usb-debounce-before-unregistering.patch index 7888dc90007fce..d164430267c70d 100644 --- a/usb/usb-debounce-before-unregistering.patch +++ b/usb/usb-debounce-before-unregistering.patch @@ -31,7 +31,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -2670,9 +2670,10 @@ static void hub_port_connect_change(stru +@@ -2673,9 +2673,10 @@ static void hub_port_connect_change(stru struct usb_device *hdev = hub->hdev; struct device *hub_dev = hub->intfdev; struct usb_hcd *hcd = bus_to_hcd(hdev->bus); @@ -44,7 +44,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> dev_dbg (hub_dev, "port %d, status %04x, change %04x, %s\n", port1, portstatus, portchange, portspeed (portstatus)); -@@ -2681,30 +2682,36 @@ static void hub_port_connect_change(stru +@@ -2684,30 +2685,36 @@ static void hub_port_connect_change(stru set_port_led(hub, port1, HUB_LED_AUTO); hub->indicator[port1-1] = INDICATOR_AUTO; } diff --git a/usb/usb-fix-usb_reset_device-and-usb_reset_composite_device.patch b/usb/usb-fix-usb_reset_device-and-usb_reset_composite_device.patch index 8e10b4ccd083ab..4160fbd753106b 100644 --- a/usb/usb-fix-usb_reset_device-and-usb_reset_composite_device.patch +++ b/usb/usb-fix-usb_reset_device-and-usb_reset_composite_device.patch @@ -85,7 +85,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> * every effort to insure that the same device is present after the * reset as before, it cannot provide a 100% guarantee. Furthermore it's * quite possible for a device to remain unaltered but its media to be -@@ -2137,7 +2139,7 @@ int usb_port_resume(struct usb_device *u +@@ -2140,7 +2142,7 @@ int usb_port_resume(struct usb_device *u hub_port_logical_disconnect(hub, port1); } else if (udev->reset_resume) { dev_dbg(&udev->dev, "reset-resume\n"); @@ -94,7 +94,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> } return status; } -@@ -2318,7 +2320,7 @@ static int hub_set_address(struct usb_de +@@ -2321,7 +2323,7 @@ static int hub_set_address(struct usb_de * Returns device in USB_STATE_ADDRESS, except on error. * * If this is called for an already-existing device (as part of @@ -103,7 +103,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> * newly detected device that is not accessible through any global * pointers, it's not necessary to lock the device. */ -@@ -2635,7 +2637,7 @@ hub_power_remaining (struct usb_hub *hub +@@ -2638,7 +2640,7 @@ hub_power_remaining (struct usb_hub *hub * This routine is called when: * a port connection-change occurs; * a port enable-change occurs (often caused by EMI); @@ -112,7 +112,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> * a firmware download) * caller already locked the hub */ -@@ -2709,7 +2711,7 @@ static void hub_port_connect_change(stru +@@ -2712,7 +2714,7 @@ static void hub_port_connect_change(stru #endif } else { @@ -121,7 +121,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> } usb_unlock_device(udev); -@@ -2937,7 +2939,7 @@ static void hub_events(void) +@@ -2940,7 +2942,7 @@ static void hub_events(void) dev_dbg (hub_dev, "resetting for error %d\n", hub->error); @@ -130,7 +130,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> if (ret) { dev_dbg (hub_dev, "error resetting hub: %d\n", ret); -@@ -3225,12 +3227,12 @@ static int descriptors_changed(struct us +@@ -3235,12 +3237,12 @@ static int descriptors_changed(struct us } /** @@ -145,7 +145,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> * * Do a port reset, reassign the device's address, and establish its * former operating configuration. If the reset fails, or the device's -@@ -3254,7 +3256,7 @@ static int descriptors_changed(struct us +@@ -3264,7 +3266,7 @@ static int descriptors_changed(struct us * holding the device lock because these tasks should always call * usb_autopm_resume_device(), thereby preventing any unwanted autoresume. */ @@ -154,7 +154,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> { struct usb_device *parent_hdev = udev->parent; struct usb_hub *parent_hub; -@@ -3340,24 +3342,23 @@ re_enumerate: +@@ -3352,24 +3354,23 @@ re_enumerate: hub_port_logical_disconnect(parent_hub, port1); return -ENODEV; } @@ -182,7 +182,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> { int ret; int i; -@@ -3387,7 +3388,7 @@ int usb_reset_composite_device(struct us +@@ -3399,7 +3400,7 @@ int usb_reset_composite_device(struct us } } @@ -191,7 +191,7 @@ Signed-off-by: Ming Lei <tom.leiming@gmail.com> if (config) { for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) { -@@ -3406,4 +3407,4 @@ int usb_reset_composite_device(struct us +@@ -3418,4 +3419,4 @@ int usb_reset_composite_device(struct us usb_autosuspend_device(udev); return ret; } diff --git a/usb/usb-force-unbinding-of-drivers-lacking-reset_resume-or-other-methods.patch b/usb/usb-force-unbinding-of-drivers-lacking-reset_resume-or-other-methods.patch index da6aff2866ff38..644986a6da4834 100644 --- a/usb/usb-force-unbinding-of-drivers-lacking-reset_resume-or-other-methods.patch +++ b/usb/usb-force-unbinding-of-drivers-lacking-reset_resume-or-other-methods.patch @@ -241,7 +241,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> * it again. */ --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -3357,6 +3357,11 @@ re_enumerate: +@@ -3369,6 +3369,11 @@ re_enumerate: * this from a driver probe() routine after downloading new firmware. * For calls that might not occur during probe(), drivers should lock * the device using usb_lock_device_for_reset(). @@ -253,7 +253,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> */ int usb_reset_device(struct usb_device *udev) { -@@ -3378,12 +3383,17 @@ int usb_reset_device(struct usb_device * +@@ -3390,12 +3395,17 @@ int usb_reset_device(struct usb_device * for (i = 0; i < config->desc.bNumInterfaces; ++i) { struct usb_interface *cintf = config->interface[i]; struct usb_driver *drv; @@ -274,7 +274,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> } } } -@@ -3394,13 +3404,18 @@ int usb_reset_device(struct usb_device * +@@ -3406,13 +3416,18 @@ int usb_reset_device(struct usb_device * for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) { struct usb_interface *cintf = config->interface[i]; struct usb_driver *drv; diff --git a/usb/usb-handle-pci_name-being-const.patch b/usb/usb-handle-pci_name-being-const.patch index eba8832696e2df..7e3a5beae7b127 100644 --- a/usb/usb-handle-pci_name-being-const.patch +++ b/usb/usb-handle-pci_name-being-const.patch @@ -17,7 +17,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c -@@ -1755,7 +1755,7 @@ EXPORT_SYMBOL_GPL (usb_hc_died); +@@ -1764,7 +1764,7 @@ EXPORT_SYMBOL_GPL (usb_hc_died); * If memory is unavailable, returns NULL. */ struct usb_hcd *usb_create_hcd (const struct hc_driver *driver, @@ -28,7 +28,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- a/drivers/usb/core/hcd.h +++ b/drivers/usb/core/hcd.h -@@ -233,7 +233,7 @@ extern void usb_hcd_disable_endpoint(str +@@ -235,7 +235,7 @@ extern void usb_hcd_disable_endpoint(str extern int usb_hcd_get_frame_number(struct usb_device *udev); extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver, diff --git a/usb/usb-missing-usb_put_hcd-to-ohci-at91.patch b/usb/usb-missing-usb_put_hcd-to-ohci-at91.patch index 1cbcbb251ad28e..1a1d105396b497 100644 --- a/usb/usb-missing-usb_put_hcd-to-ohci-at91.patch +++ b/usb/usb-missing-usb_put_hcd-to-ohci-at91.patch @@ -53,7 +53,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> } /*-------------------------------------------------------------------------*/ -@@ -308,7 +308,8 @@ static int ohci_hcd_at91_drv_remove(stru +@@ -309,7 +309,8 @@ static int ohci_hcd_at91_drv_remove(stru } device_init_wakeup(&pdev->dev, 0); diff --git a/usb/usb-optimize-port-debouncing-during-hub-activation.patch b/usb/usb-optimize-port-debouncing-during-hub-activation.patch index 68e0098101028c..f9316d7769c305 100644 --- a/usb/usb-optimize-port-debouncing-during-hub-activation.patch +++ b/usb/usb-optimize-port-debouncing-during-hub-activation.patch @@ -85,7 +85,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> hub_activate(hub); } -@@ -2208,11 +2235,6 @@ static inline int remote_wakeup(struct u +@@ -2211,11 +2238,6 @@ static inline int remote_wakeup(struct u * every 25ms for transient disconnects. When the port status has been * unchanged for 100ms it returns the port status. */ diff --git a/usb/usb-remove-interface-parameter-of-usb_reset_composite_device.patch b/usb/usb-remove-interface-parameter-of-usb_reset_composite_device.patch index 3def541705b75b..2d151840e060ed 100644 --- a/usb/usb-remove-interface-parameter-of-usb_reset_composite_device.patch +++ b/usb/usb-remove-interface-parameter-of-usb_reset_composite_device.patch @@ -51,7 +51,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> static int proc_setintf(struct dev_state *ps, void __user *arg) --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -2709,7 +2709,7 @@ static void hub_port_connect_change(stru +@@ -2712,7 +2712,7 @@ static void hub_port_connect_change(stru #endif } else { @@ -60,7 +60,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> } usb_unlock_device(udev); -@@ -2937,7 +2937,7 @@ static void hub_events(void) +@@ -2940,7 +2940,7 @@ static void hub_events(void) dev_dbg (hub_dev, "resetting for error %d\n", hub->error); @@ -69,7 +69,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> if (ret) { dev_dbg (hub_dev, "error resetting hub: %d\n", ret); -@@ -3345,7 +3345,6 @@ EXPORT_SYMBOL_GPL(usb_reset_device); +@@ -3357,7 +3357,6 @@ EXPORT_SYMBOL_GPL(usb_reset_device); /** * usb_reset_composite_device - warn interface drivers and perform a USB port reset * @udev: device to reset (not in SUSPENDED or NOTATTACHED state) @@ -77,7 +77,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> * * Warns all drivers bound to registered interfaces (using their pre_reset * method), performs the port reset, and then lets the drivers know that -@@ -3358,8 +3357,7 @@ EXPORT_SYMBOL_GPL(usb_reset_device); +@@ -3370,8 +3369,7 @@ EXPORT_SYMBOL_GPL(usb_reset_device); * For calls that might not occur during probe(), drivers should lock * the device using usb_lock_device_for_reset(). */ @@ -87,7 +87,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> { int ret; int i; -@@ -3375,9 +3373,6 @@ int usb_reset_composite_device(struct us +@@ -3387,9 +3385,6 @@ int usb_reset_composite_device(struct us /* Prevent autosuspend during the reset */ usb_autoresume_device(udev); diff --git a/usb/usb-simplify-hub_restart-logic.patch b/usb/usb-simplify-hub_restart-logic.patch index 8eb76154d20af4..2bc641afa0758e 100644 --- a/usb/usb-simplify-hub_restart-logic.patch +++ b/usb/usb-simplify-hub_restart-logic.patch @@ -28,8 +28,8 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/usb/core/driver.c | 7 -- - drivers/usb/core/hub.c | 112 +++++++++++++++++++++------------------------- - 2 files changed, 53 insertions(+), 66 deletions(-) + drivers/usb/core/hub.c | 110 +++++++++++++++++++++------------------------- + 2 files changed, 53 insertions(+), 64 deletions(-) --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c @@ -222,7 +222,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> return 0; } -@@ -2900,7 +2899,7 @@ static void hub_events(void) +@@ -2903,7 +2902,7 @@ static void hub_events(void) continue; connect_change = test_bit(i, hub->change_bits); if (!test_and_clear_bit(i, hub->event_bits) && @@ -231,7 +231,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> continue; ret = hub_port_status(hub, i, -@@ -2908,11 +2907,6 @@ static void hub_events(void) +@@ -2911,11 +2910,6 @@ static void hub_events(void) if (ret < 0) continue; @@ -243,12 +243,3 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> if (portchange & USB_PORT_STAT_C_CONNECTION) { clear_port_feature(hdev, i, USB_PORT_FEAT_C_CONNECTION); -@@ -3008,8 +3002,6 @@ static void hub_events(void) - } - } - -- hub->activating = 0; -- - loop_autopm: - /* Allow autosuspend if we're not going to run again */ - if (list_empty(&hub->event_list)) diff --git a/usb/usb-try-to-salvage-lost-power-sessions.patch b/usb/usb-try-to-salvage-lost-power-sessions.patch index 2742721e3282cc..feed2805654be2 100644 --- a/usb/usb-try-to-salvage-lost-power-sessions.patch +++ b/usb/usb-try-to-salvage-lost-power-sessions.patch @@ -79,7 +79,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> } else { /* The power session is gone; tell khubd */ usb_set_device_state(udev, USB_STATE_NOTATTACHED); -@@ -2072,17 +2065,16 @@ int usb_port_resume(struct usb_device *u +@@ -2075,17 +2068,16 @@ int usb_port_resume(struct usb_device *u return status; } @@ -98,7 +98,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> return status; } -@@ -2629,6 +2621,7 @@ static void hub_port_connect_change(stru +@@ -2632,6 +2624,7 @@ static void hub_port_connect_change(stru struct usb_hcd *hcd = bus_to_hcd(hdev->bus); unsigned wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics); @@ -106,7 +106,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> int status, i; dev_dbg (hub_dev, -@@ -2663,8 +2656,45 @@ static void hub_port_connect_change(stru +@@ -2666,8 +2659,45 @@ static void hub_port_connect_change(stru } } @@ -153,7 +153,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> usb_disconnect(&hdev->children[port1-1]); clear_bit(port1, hub->change_bits); -@@ -2682,7 +2712,6 @@ static void hub_port_connect_change(stru +@@ -2685,7 +2715,6 @@ static void hub_port_connect_change(stru } for (i = 0; i < SET_CONFIG_TRIES; i++) { @@ -161,7 +161,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> /* reallocate for each attempt, since references * to the previous one can escape in various ways -@@ -2941,11 +2970,16 @@ static void hub_events(void) +@@ -2944,11 +2973,16 @@ static void hub_events(void) } if (portchange & USB_PORT_STAT_C_SUSPEND) { diff --git a/usb/usb-usb-dev_name-instead-of-dev-bus_id.patch b/usb/usb-usb-dev_name-instead-of-dev-bus_id.patch index c44d75721f380b..4a2a0aa85e776e 100644 --- a/usb/usb-usb-dev_name-instead-of-dev-bus_id.patch +++ b/usb/usb-usb-dev_name-instead-of-dev-bus_id.patch @@ -448,7 +448,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> goto err0; --- a/drivers/usb/host/ohci-pnx4008.c +++ b/drivers/usb/host/ohci-pnx4008.c -@@ -388,7 +388,7 @@ static int __devinit usb_hcd_pnx4008_pro +@@ -389,7 +389,7 @@ static int __devinit usb_hcd_pnx4008_pro while ((__raw_readl(USB_OTG_CLK_STAT) & USB_CLOCK_MASK) != USB_CLOCK_MASK) ; @@ -459,7 +459,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ret = -ENOMEM; --- a/drivers/usb/host/ohci-ps3.c +++ b/drivers/usb/host/ohci-ps3.c -@@ -128,7 +128,7 @@ static int ps3_ohci_probe(struct ps3_sys +@@ -129,7 +129,7 @@ static int ps3_ohci_probe(struct ps3_sys dev->core.dma_mask = &dummy_mask; /* FIXME: for improper usb code */ @@ -470,7 +470,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> dev_dbg(&dev->core, "%s:%d: usb_create_hcd failed\n", __func__, --- a/drivers/usb/host/ohci-sm501.c +++ b/drivers/usb/host/ohci-sm501.c -@@ -142,7 +142,7 @@ static int ohci_hcd_sm501_drv_probe(stru +@@ -143,7 +143,7 @@ static int ohci_hcd_sm501_drv_probe(stru goto err2; } @@ -481,7 +481,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> goto err2; --- a/drivers/usb/host/ohci-ssb.c +++ b/drivers/usb/host/ohci-ssb.c -@@ -112,7 +112,7 @@ static int ssb_ohci_attach(struct ssb_de +@@ -113,7 +113,7 @@ static int ssb_ohci_attach(struct ssb_de ssb_device_enable(dev, flags); hcd = usb_create_hcd(&ssb_ohci_hc_driver, dev->dev, @@ -503,7 +503,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> goto err5; --- a/drivers/usb/host/u132-hcd.c +++ b/drivers/usb/host/u132-hcd.c -@@ -3113,7 +3113,7 @@ static int __devinit u132_probe(struct p +@@ -3124,7 +3124,7 @@ static int __devinit u132_probe(struct p if (pdev->dev.dma_mask) return -EINVAL; @@ -1 +1 @@ -2.6.26-rc8-git3 +2.6.26 |
