From: Greg Kroah-Hartman Date: Fri, 20 Mar 2009 21:43:12 +0000 (-0700) Subject: .27 patches X-Git-Tag: v2.6.28.9~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1ecc702d4ac22618af87bd7642e5cd2504922ba;p=thirdparty%2Fkernel%2Fstable-queue.git .27 patches --- diff --git a/queue-2.6.27/fix-misreporting-of-cores-as-hyperthreads-for-q9550.patch b/queue-2.6.27/fix-misreporting-of-cores-as-hyperthreads-for-q9550.patch new file mode 100644 index 00000000000..d96ae8bfe7e --- /dev/null +++ b/queue-2.6.27/fix-misreporting-of-cores-as-hyperthreads-for-q9550.patch @@ -0,0 +1,125 @@ +From joe.korty@ccur.com Fri Mar 20 14:26:10 2009 +From: Joe Korty +Date: Thu, 19 Mar 2009 13:27:44 -0400 +Subject: Fix misreporting of #cores as #hyperthreads for Q9550 +To: stable@kernel.org +Cc: Ingo Molnar , "H. Peter Anvin" +Message-ID: <20090319172744.GA2600@tsunami.ccur.com> + +From: Joe Korty + +Fix misreporting of #cores for the Intel Quad Core Q9550. + +For the Q9550, in x86_64 mode, /proc/cpuinfo mistakenly +reports the #cores present as the #hyperthreads present. +i386 mode was not examined but is assumed to have the +same problem. + +A backport of the following three 2.6.29-rc1 patches +fixes the problem: + 066941bd4eeb159307a5d7d795100d0887c00442: + [PATCH] x86: unmask CPUID levels on Intel CPUs + 99fb4d349db7e7dacb2099c5cc320a9e2d31c1ef: + [PATCH] x86: unmask CPUID levels on Intel CPUs, fix + bdf21a49bab28f0d9613e8d8724ef9c9168b61b9: + [PATCH] x86: add MSR_IA32_MISC_ENABLE bits to + +From the first patch: "If the CPUID limit bit in +MSR_IA32_MISC_ENABLE is set, clear it to make all CPUID +information available. This is required for some features +to work, in particular XSAVE." + +Originally-Developed-by: H. Peter Anvin +Backported-by: Joe Korty +Cc: Ingo Molnar +Signed-off-by: Joe Korty +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/cpu/intel.c | 13 +++++++++++++ + arch/x86/kernel/cpu/intel_64.c | 13 +++++++++++++ + include/asm-x86/msr-index.h | 29 +++++++++++++++++++++++++++++ + 3 files changed, 55 insertions(+) + +--- a/arch/x86/kernel/cpu/intel_64.c ++++ b/arch/x86/kernel/cpu/intel_64.c +@@ -9,6 +9,19 @@ + + static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) + { ++ /* Unmask CPUID levels if masked: */ ++ if (c->x86 == 6 && c->x86_model >= 15) { ++ u64 misc_enable; ++ ++ rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); ++ ++ if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) { ++ misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID; ++ wrmsrl(MSR_IA32_MISC_ENABLE, misc_enable); ++ c->cpuid_level = cpuid_eax(0); ++ } ++ } ++ + if ((c->x86 == 0xf && c->x86_model >= 0x03) || + (c->x86 == 0x6 && c->x86_model >= 0x0e)) + set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); +--- a/arch/x86/kernel/cpu/intel.c ++++ b/arch/x86/kernel/cpu/intel.c +@@ -32,6 +32,19 @@ struct movsl_mask movsl_mask __read_most + + static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) + { ++ /* Unmask CPUID levels if masked: */ ++ if (c->x86 == 6 && c->x86_model >= 15) { ++ u64 misc_enable; ++ ++ rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); ++ ++ if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) { ++ misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID; ++ wrmsrl(MSR_IA32_MISC_ENABLE, misc_enable); ++ c->cpuid_level = cpuid_eax(0); ++ } ++ } ++ + /* Netburst reports 64 bytes clflush size, but does IO in 128 bytes */ + if (c->x86 == 15 && c->x86_cache_alignment == 64) + c->x86_cache_alignment = 128; +--- a/include/asm-x86/msr-index.h ++++ b/include/asm-x86/msr-index.h +@@ -196,6 +196,35 @@ + #define MSR_IA32_THERM_STATUS 0x0000019c + #define MSR_IA32_MISC_ENABLE 0x000001a0 + ++/* MISC_ENABLE bits: architectural */ ++#define MSR_IA32_MISC_ENABLE_FAST_STRING (1ULL << 0) ++#define MSR_IA32_MISC_ENABLE_TCC (1ULL << 1) ++#define MSR_IA32_MISC_ENABLE_EMON (1ULL << 7) ++#define MSR_IA32_MISC_ENABLE_BTS_UNAVAIL (1ULL << 11) ++#define MSR_IA32_MISC_ENABLE_PEBS_UNAVAIL (1ULL << 12) ++#define MSR_IA32_MISC_ENABLE_ENHANCED_SPEEDSTEP (1ULL << 16) ++#define MSR_IA32_MISC_ENABLE_MWAIT (1ULL << 18) ++#define MSR_IA32_MISC_ENABLE_LIMIT_CPUID (1ULL << 22) ++#define MSR_IA32_MISC_ENABLE_XTPR_DISABLE (1ULL << 23) ++#define MSR_IA32_MISC_ENABLE_XD_DISABLE (1ULL << 34) ++ ++/* MISC_ENABLE bits: model-specific, meaning may vary from core to core */ ++#define MSR_IA32_MISC_ENABLE_X87_COMPAT (1ULL << 2) ++#define MSR_IA32_MISC_ENABLE_TM1 (1ULL << 3) ++#define MSR_IA32_MISC_ENABLE_SPLIT_LOCK_DISABLE (1ULL << 4) ++#define MSR_IA32_MISC_ENABLE_L3CACHE_DISABLE (1ULL << 6) ++#define MSR_IA32_MISC_ENABLE_SUPPRESS_LOCK (1ULL << 8) ++#define MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE (1ULL << 9) ++#define MSR_IA32_MISC_ENABLE_FERR (1ULL << 10) ++#define MSR_IA32_MISC_ENABLE_FERR_MULTIPLEX (1ULL << 10) ++#define MSR_IA32_MISC_ENABLE_TM2 (1ULL << 13) ++#define MSR_IA32_MISC_ENABLE_ADJ_PREF_DISABLE (1ULL << 19) ++#define MSR_IA32_MISC_ENABLE_SPEEDSTEP_LOCK (1ULL << 20) ++#define MSR_IA32_MISC_ENABLE_L1D_CONTEXT (1ULL << 24) ++#define MSR_IA32_MISC_ENABLE_DCU_PREF_DISABLE (1ULL << 37) ++#define MSR_IA32_MISC_ENABLE_TURBO_DISABLE (1ULL << 38) ++#define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE (1ULL << 39) ++ + /* Intel Model 6 */ + #define MSR_P6_EVNTSEL0 0x00000186 + #define MSR_P6_EVNTSEL1 0x00000187 diff --git a/queue-2.6.27/powerpc-remove-extra-semicolon-in-fsl_soc.c.patch b/queue-2.6.27/powerpc-remove-extra-semicolon-in-fsl_soc.c.patch new file mode 100644 index 00000000000..a93362e9394 --- /dev/null +++ b/queue-2.6.27/powerpc-remove-extra-semicolon-in-fsl_soc.c.patch @@ -0,0 +1,36 @@ +From jdaniel@computer.org Fri Mar 20 14:18:34 2009 +From: Johns Daniel +Date: Sat, 14 Mar 2009 10:03:51 -0500 +Subject: powerpc: Remove extra semicolon in fsl_soc.c +To: greg@kroah.com +Cc: grant.likely@secretlab.ca, afleming@freescale.com, linuxppc-dev@ozlabs.org, stable@kernel.org +Message-ID: <49BBC757.7090001@computer.org> + +From: Johns Daniel + +TSEC/MDIO will not work with older device trees because of a semicolon +at the end of a macro resulting in an empty for loop body. + +This fix only applies to 2.6.28; this code is gone in 2.6.29, according +to Grant Likely! + +Signed-off-by: Johns Daniel +Acked-by: Grant Likely +Signed-off-by: Greg Kroah-Hartman + + +--- + arch/powerpc/sysdev/fsl_soc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/powerpc/sysdev/fsl_soc.c ++++ b/arch/powerpc/sysdev/fsl_soc.c +@@ -255,7 +255,7 @@ static int __init gfar_mdio_of_init(void + gfar_mdio_of_init_one(np); + + /* try the deprecated version */ +- for_each_compatible_node(np, "mdio", "gianfar"); ++ for_each_compatible_node(np, "mdio", "gianfar") + gfar_mdio_of_init_one(np); + + return 0; diff --git a/queue-2.6.27/series b/queue-2.6.27/series index 24c5d0c8ae0..7127420b2ca 100644 --- a/queue-2.6.27/series +++ b/queue-2.6.27/series @@ -15,3 +15,18 @@ eventfd-remove-fput-call-from-possible-irq-context.patch s390-__div64_31-broken-for-config_march_g5.patch thinkpad-acpi-fix-module-autoloading-for-older-models.patch v4l-dvb-cx23885-fix-oops-for-mixed-install-of-analog-and-digital-only-cards.patch +fix-misreporting-of-cores-as-hyperthreads-for-q9550.patch +powerpc-remove-extra-semicolon-in-fsl_soc.c.patch +usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch +usb-ehci-fix-isochronous-urb-leak.patch +usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch +usb-option.c-add-zte-622-modem-device.patch +usb-add-device-id-for-option-gtm380-to-option-driver.patch +usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch +usb-serial-add-ftdi-usb-serial-converter-devices.patch +usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch +usb-serial-new-cp2101-device-id.patch +usb-storage-unusual-usb-device-prolific-2507-variation-added.patch +usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch +usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch +usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch diff --git a/queue-2.6.27/usb-add-device-id-for-option-gtm380-to-option-driver.patch b/queue-2.6.27/usb-add-device-id-for-option-gtm380-to-option-driver.patch new file mode 100644 index 00000000000..61194bf59da --- /dev/null +++ b/queue-2.6.27/usb-add-device-id-for-option-gtm380-to-option-driver.patch @@ -0,0 +1,37 @@ +From e7f2f0d77a7b483a26054f29ba8393831b25a8a4 Mon Sep 17 00:00:00 2001 +From: Achilleas Kotsis +Date: Mon, 16 Mar 2009 16:35:02 +0200 +Subject: USB: Add device id for Option GTM380 to option driver + +From: Achilleas Kotsis + +commit e7f2f0d77a7b483a26054f29ba8393831b25a8a4 upstream. + +Option GTM380 in Modem mode uses Product ID 0x7201. This has been tested and works +on production systems for over 6 months. + +Signed-off-by: Achilleas Kotsis +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -89,6 +89,7 @@ static int option_send_setup(struct tty + #define OPTION_PRODUCT_ETNA_MODEM_GT 0x7041 + #define OPTION_PRODUCT_ETNA_MODEM_EX 0x7061 + #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100 ++#define OPTION_PRODUCT_GTM380_MODEM 0x7201 + + #define HUAWEI_VENDOR_ID 0x12D1 + #define HUAWEI_PRODUCT_E600 0x1001 +@@ -319,6 +320,7 @@ static struct usb_device_id option_ids[] + { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) }, + { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) }, + { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, ++ { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GTM380_MODEM) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, diff --git a/queue-2.6.27/usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch b/queue-2.6.27/usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch new file mode 100644 index 00000000000..6004e9ce979 --- /dev/null +++ b/queue-2.6.27/usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch @@ -0,0 +1,38 @@ +From 56a21827439a4d715b510bfaf488534e6f4ad2f8 Mon Sep 17 00:00:00 2001 +From: Dirk Hohndel +Date: Sat, 14 Mar 2009 20:47:39 -0700 +Subject: USB: Add Vendor/Product ID for new CDMA U727 to option driver + +From: Dirk Hohndel + +commit 56a21827439a4d715b510bfaf488534e6f4ad2f8 upstream. + +* newer versions of the Novatel Wireless U727 CDMA 3G USB stick + have a different Product ID (0x5010); adding this ID makes them + work just fine with the option driver + +Signed-off-by: Dirk Hohndel +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -190,6 +190,7 @@ static int option_send_setup(struct tty + /* OVATION PRODUCTS */ + #define NOVATELWIRELESS_PRODUCT_MC727 0x4100 + #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400 ++#define NOVATELWIRELESS_PRODUCT_U727 0x5010 + + /* FUTURE NOVATEL PRODUCTS */ + #define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0X6000 +@@ -402,6 +403,7 @@ static struct usb_device_id option_ids[] + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */ + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */ + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */ ++ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel MC727/U727/USB727 */ + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */ + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */ + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */ diff --git a/queue-2.6.27/usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch b/queue-2.6.27/usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch new file mode 100644 index 00000000000..f3d8f7526d6 --- /dev/null +++ b/queue-2.6.27/usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch @@ -0,0 +1,42 @@ +From 391016f6e2fe3b9979b4c6880a76e5e434d6947c Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Mon, 16 Mar 2009 14:21:56 -0400 +Subject: USB: EHCI: expedite unlinks when the root hub is suspended + +From: Alan Stern + +commit 391016f6e2fe3b9979b4c6880a76e5e434d6947c upstream. + +This patch (as1225) fixes a bug in ehci-hcd. The condition for +whether unlinked QHs can become IDLE should not be that the controller +is halted, but rather that the controller isn't running. In other +words when the root hub is suspended, the hardware doesn't own any +QHs. + +This fixes a problem that can show up during hibernation: If a QH is +only partially unlinked when the root hub is frozen, then when the +root hub is thawed the QH won't be in the IDLE state. As a result it +can't be used properly for new URB submissions. + +Signed-off-by: Alan Stern +Reported-by: Brandon Philips +Tested-by: Brandon Philips +Acked-by: David Brownell +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/ehci-q.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/usb/host/ehci-q.c ++++ b/drivers/usb/host/ehci-q.c +@@ -1095,7 +1095,8 @@ static void start_unlink_async (struct e + prev->qh_next = qh->qh_next; + wmb (); + +- if (unlikely (ehci_to_hcd(ehci)->state == HC_STATE_HALT)) { ++ /* If the controller isn't running, we don't have to wait for it */ ++ if (unlikely(!HC_IS_RUNNING(ehci_to_hcd(ehci)->state))) { + /* if (unlikely (qh->reclaim != 0)) + * this will recurse, probably not much + */ diff --git a/queue-2.6.27/usb-ehci-fix-isochronous-urb-leak.patch b/queue-2.6.27/usb-ehci-fix-isochronous-urb-leak.patch new file mode 100644 index 00000000000..17a993f489d --- /dev/null +++ b/queue-2.6.27/usb-ehci-fix-isochronous-urb-leak.patch @@ -0,0 +1,80 @@ +From 508db8c954d55ed30f870d2c24d741ba6269d13c Mon Sep 17 00:00:00 2001 +From: Karsten Wiese +Date: Thu, 26 Feb 2009 01:47:48 +0100 +Subject: USB: EHCI: Fix isochronous URB leak + +From: Karsten Wiese + +commit 508db8c954d55ed30f870d2c24d741ba6269d13c upstream. + +ehci-hcd uses usb_get_urb() and usb_put_urb() in an unbalanced way causing +isochronous URB's kref.counts incrementing once per usb_submit_urb() call. +The culprit is *usb being set to NULL when usb_put_urb() is called after URB +is given back. +Due to other fixes there is no need for ehci-hcd to deal with usb_get_urb() +nor usb_put_urb() anymore, so patch removes their usages in ehci-hcd. +Patch also makes ehci_to_hcd(ehci)->self.bandwidth_allocated adjust, if a +stream finishes. + +Signed-off-by: Karsten Wiese +Cc: David Brownell +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/ehci-sched.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +--- a/drivers/usb/host/ehci-sched.c ++++ b/drivers/usb/host/ehci-sched.c +@@ -1536,7 +1536,7 @@ itd_link_urb ( + struct ehci_itd, itd_list); + list_move_tail (&itd->itd_list, &stream->td_list); + itd->stream = iso_stream_get (stream); +- itd->urb = usb_get_urb (urb); ++ itd->urb = urb; + itd_init (ehci, stream, itd); + } + +@@ -1645,7 +1645,7 @@ itd_complete ( + (void) disable_periodic(ehci); + ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; + +- if (unlikely (list_empty (&stream->td_list))) { ++ if (unlikely(list_is_singular(&stream->td_list))) { + ehci_to_hcd(ehci)->self.bandwidth_allocated + -= stream->bandwidth; + ehci_vdbg (ehci, +@@ -1656,7 +1656,6 @@ itd_complete ( + iso_stream_put (ehci, stream); + + done: +- usb_put_urb(urb); + itd->urb = NULL; + if (ehci->clock_frame != itd->frame || itd->index[7] != -1) { + /* OK to recycle this ITD now. */ +@@ -1949,7 +1948,7 @@ sitd_link_urb ( + struct ehci_sitd, sitd_list); + list_move_tail (&sitd->sitd_list, &stream->td_list); + sitd->stream = iso_stream_get (stream); +- sitd->urb = usb_get_urb (urb); ++ sitd->urb = urb; + + sitd_patch(ehci, stream, sitd, sched, packet); + sitd_link (ehci, (next_uframe >> 3) % ehci->periodic_size, +@@ -2034,7 +2033,7 @@ sitd_complete ( + (void) disable_periodic(ehci); + ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; + +- if (list_empty (&stream->td_list)) { ++ if (list_is_singular(&stream->td_list)) { + ehci_to_hcd(ehci)->self.bandwidth_allocated + -= stream->bandwidth; + ehci_vdbg (ehci, +@@ -2045,7 +2044,6 @@ sitd_complete ( + iso_stream_put (ehci, stream); + /* OK to recycle this SITD now that its completion callback ran. */ + done: +- usb_put_urb(urb); + sitd->urb = NULL; + sitd->stream = NULL; + list_move(&sitd->sitd_list, &stream->free_list); diff --git a/queue-2.6.27/usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch b/queue-2.6.27/usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch new file mode 100644 index 00000000000..3a283aa829b --- /dev/null +++ b/queue-2.6.27/usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch @@ -0,0 +1,50 @@ +From 0cc6bfe901b946df125d8e37186d8e45f876457d Mon Sep 17 00:00:00 2001 +From: Dan Williams +Date: Thu, 12 Mar 2009 06:53:00 -0400 +Subject: USB: Option: let cdc-acm handle Sony Ericsson F3507g / Dell 5530 + +From: Dan Williams + +commit 0cc6bfe901b946df125d8e37186d8e45f876457d upstream. + +The generic cdc-acm driver is now the best one to handle Sony Ericsson +F3507g-based devices (which the Dell 5530 is a rebrand of), now that all +the pieces are in place (ie, cac477e8f1038c41b6f29d3161ce351462ef3df7). +Removing the IDs from option allows cdc-acm to handle the device. + +Signed-off-by: Dan Williams +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 6 ------ + 1 file changed, 6 deletions(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -288,10 +288,6 @@ static int option_send_setup(struct tty + #define ZTE_PRODUCT_MF626 0x0031 + #define ZTE_PRODUCT_CDMA_TECH 0xfffe + +-/* Ericsson products */ +-#define ERICSSON_VENDOR_ID 0x0bdb +-#define ERICSSON_PRODUCT_F3507G 0x1900 +- + #define BENQ_VENDOR_ID 0x04a5 + #define BENQ_PRODUCT_H10 0x4068 + +@@ -434,7 +430,6 @@ static struct usb_device_id option_ids[] + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) }, /* Dell Wireless HSDPA 5520 */ + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */ +- { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */ + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ +@@ -506,7 +501,6 @@ static struct usb_device_id option_ids[] + { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) }, + { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, + { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, +- { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G) }, + { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, + { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */ + { } /* Terminating entry */ diff --git a/queue-2.6.27/usb-option.c-add-zte-622-modem-device.patch b/queue-2.6.27/usb-option.c-add-zte-622-modem-device.patch new file mode 100644 index 00000000000..1a1212a0619 --- /dev/null +++ b/queue-2.6.27/usb-option.c-add-zte-622-modem-device.patch @@ -0,0 +1,37 @@ +From 9ea19b82f3126da4e47d6b94563a3c2cd586f6e2 Mon Sep 17 00:00:00 2001 +From: Albert Pauw +Date: Sun, 1 Mar 2009 09:37:52 +0100 +Subject: USB: option.c: add ZTE 622 modem device + +From: Albert Pauw + +commit 9ea19b82f3126da4e47d6b94563a3c2cd586f6e2 upstream. + +Please consider this small patch for the usb option-card driver. +This patch adds the ZTE 622 usb modem device. + +Signed-off-by: Albert Pauw +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -282,6 +282,7 @@ static int option_send_setup(struct tty + + /* ZTE PRODUCTS */ + #define ZTE_VENDOR_ID 0x19d2 ++#define ZTE_PRODUCT_MF622 0x0001 + #define ZTE_PRODUCT_MF628 0x0015 + #define ZTE_PRODUCT_MF626 0x0031 + #define ZTE_PRODUCT_CDMA_TECH 0xfffe +@@ -499,6 +500,7 @@ static struct usb_device_id option_ids[] + { 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) }, ++ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622) }, + { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) }, + { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, + { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, diff --git a/queue-2.6.27/usb-serial-add-ftdi-usb-serial-converter-devices.patch b/queue-2.6.27/usb-serial-add-ftdi-usb-serial-converter-devices.patch new file mode 100644 index 00000000000..8408205e6a1 --- /dev/null +++ b/queue-2.6.27/usb-serial-add-ftdi-usb-serial-converter-devices.patch @@ -0,0 +1,64 @@ +From 7f82b6dd7015aabca2fd55fb690248f742cd67f3 Mon Sep 17 00:00:00 2001 +From: Axel Wachtler +Date: Thu, 5 Mar 2009 14:09:22 -0800 +Subject: USB: serial: add FTDI USB/Serial converter devices + +From: Axel Wachtler + +commit 7f82b6dd7015aabca2fd55fb690248f742cd67f3 upstream. + +Add the following devices to the USB FTDI SIO device table: + + Bus 001 Device 009: ID 03eb:2109 Atmel Corp. + http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4187 + + Bus 001 Device 008: ID 1cf1:0001 + http://www.dresden-elektronik.de/shop/prod75.html + + Bus 001 Device 007: ID 1c1f:0004 + http://www.dresden-elektronik.de/shop/prod64.html + +Signed-off-by: Axel Wachtler +Signed-off-by: Robert Richter +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 3 +++ + drivers/usb/serial/ftdi_sio.h | 13 +++++++++++++ + 2 files changed, 16 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -657,6 +657,9 @@ static struct usb_device_id id_table_com + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, ++ { USB_DEVICE(ATMEL_VID, STK541_PID) }, ++ { USB_DEVICE(DE_VID, STB_PID) }, ++ { USB_DEVICE(DE_VID, WHT_PID) }, + { }, /* Optional parameter entry */ + { } /* Terminating entry */ + }; +--- a/drivers/usb/serial/ftdi_sio.h ++++ b/drivers/usb/serial/ftdi_sio.h +@@ -870,6 +870,19 @@ + #define RATOC_PRODUCT_ID_USB60F 0xb020 + + /* ++ * Atmel STK541 ++ */ ++#define ATMEL_VID 0x03eb /* Vendor ID */ ++#define STK541_PID 0x2109 /* Zigbee Controller */ ++ ++/* ++ * Dresden Elektronic Sensor Terminal Board ++ */ ++#define DE_VID 0x1cf1 /* Vendor ID */ ++#define STB_PID 0x0001 /* Sensor Terminal Board */ ++#define WHT_PID 0x0004 /* Wireless Handheld Terminal */ ++ ++/* + * BmRequestType: 1100 0000b + * bRequest: FTDI_E2_READ + * wValue: 0 diff --git a/queue-2.6.27/usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch b/queue-2.6.27/usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch new file mode 100644 index 00000000000..da90c883263 --- /dev/null +++ b/queue-2.6.27/usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch @@ -0,0 +1,46 @@ +From b0d659002168146ec6b03d1ef062d8dcf05ff510 Mon Sep 17 00:00:00 2001 +From: Michael Hennerich +Date: Fri, 6 Mar 2009 14:07:43 -0800 +Subject: USB: serial: ftdi: enable UART detection on gnICE JTAG adaptors blacklist interface0 + +From: Michael Hennerich + +commit b0d659002168146ec6b03d1ef062d8dcf05ff510 upstream. + +Signed-off-by: Michael Hennerich +Signed-off-by: Bryan Wu +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 2 ++ + drivers/usb/serial/ftdi_sio.h | 7 +++++++ + 2 files changed, 9 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -660,6 +660,8 @@ static struct usb_device_id id_table_com + { USB_DEVICE(ATMEL_VID, STK541_PID) }, + { USB_DEVICE(DE_VID, STB_PID) }, + { USB_DEVICE(DE_VID, WHT_PID) }, ++ { USB_DEVICE(ADI_VID, ADI_GNICE_PID), ++ .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, + { }, /* Optional parameter entry */ + { } /* Terminating entry */ + }; +--- a/drivers/usb/serial/ftdi_sio.h ++++ b/drivers/usb/serial/ftdi_sio.h +@@ -883,6 +883,13 @@ + #define WHT_PID 0x0004 /* Wireless Handheld Terminal */ + + /* ++ * Blackfin gnICE JTAG ++ * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice ++ */ ++#define ADI_VID 0x0456 ++#define ADI_GNICE_PID 0xF000 ++ ++/* + * BmRequestType: 1100 0000b + * bRequest: FTDI_E2_READ + * wValue: 0 diff --git a/queue-2.6.27/usb-serial-new-cp2101-device-id.patch b/queue-2.6.27/usb-serial-new-cp2101-device-id.patch new file mode 100644 index 00000000000..5795f3b1b69 --- /dev/null +++ b/queue-2.6.27/usb-serial-new-cp2101-device-id.patch @@ -0,0 +1,26 @@ +From c6535668798b0644e1af5934c2aec0e912280449 Mon Sep 17 00:00:00 2001 +From: Robert M. Kenney +Date: Thu, 26 Feb 2009 14:58:39 -0500 +Subject: USB: serial: new cp2101 device id + +From: Robert M. Kenney + +commit c6535668798b0644e1af5934c2aec0e912280449 upstream. + +From: Robert M. Kenney +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/cp2101.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/cp2101.c ++++ b/drivers/usb/serial/cp2101.c +@@ -77,6 +77,7 @@ static struct usb_device_id id_table [] + { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ + { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ + { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ ++ { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */ + { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */ + { USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */ + { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */ diff --git a/queue-2.6.27/usb-storage-unusual-usb-device-prolific-2507-variation-added.patch b/queue-2.6.27/usb-storage-unusual-usb-device-prolific-2507-variation-added.patch new file mode 100644 index 00000000000..ef10ec92288 --- /dev/null +++ b/queue-2.6.27/usb-storage-unusual-usb-device-prolific-2507-variation-added.patch @@ -0,0 +1,48 @@ +From 8a0845c51b2e300f5204a323b874f7f58ea0eff7 Mon Sep 17 00:00:00 2001 +From: Thomas Bartosik +Date: Mon, 16 Mar 2009 16:04:38 +0100 +Subject: USB: storage: Unusual USB device Prolific 2507 variation added + +From: Thomas Bartosik + +commit 8a0845c51b2e300f5204a323b874f7f58ea0eff7 upstream. + +The "c-enter" USB to Toshiba 1.8" IDE enclosure needs special treatment +to work flawlessly. This patch is absolutely trivial, as the integrated +USB-IDE bridge is already identified to be an "unusual" device, only the +bcdDevice is different (lower) to the bcdDeviceMin already included in +the kernel. +It is a Prolific 2507 bridge. + +T: Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 4 Spd=480 MxCh= 0 +D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 +P: Vendor=067b ProdID=2507 Rev= 0.01 +S: Manufacturer=Prolific Technology Inc. +S: Product=ATAPI-6 Bridge Controller +S: SerialNumber=00000272 +C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA +I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms + + +Signed-off-by: Thomas Bartosik +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/storage/unusual_devs.h | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/usb/storage/unusual_devs.h ++++ b/drivers/usb/storage/unusual_devs.h +@@ -990,7 +990,9 @@ UNUSUAL_DEV( 0x066f, 0x8000, 0x0001, 0x0 + US_FL_FIX_CAPACITY ), + + /* Reported by Richard -=[]=- */ +-UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100, ++/* Change to bcdDeviceMin (0x0100 to 0x0001) reported by ++ * Thomas Bartosik */ ++UNUSUAL_DEV( 0x067b, 0x2507, 0x0001, 0x0100, + "Prolific Technology Inc.", + "Mass Storage Device", + US_SC_DEVICE, US_PR_DEVICE, NULL, diff --git a/queue-2.6.27/usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch b/queue-2.6.27/usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch new file mode 100644 index 00000000000..4e9f15c93c2 --- /dev/null +++ b/queue-2.6.27/usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch @@ -0,0 +1,83 @@ +From c497e715f93d148d751c055401568684eea0bf6b Mon Sep 17 00:00:00 2001 +From: Jan Dumon +Date: Tue, 10 Mar 2009 17:29:47 +0100 +Subject: USB: unusual_devs: Add support for GI 0431 SD-Card interface + +From: Jan Dumon + +commit c497e715f93d148d751c055401568684eea0bf6b upstream. + +Enable the SD-Card interface on the GI 0431 HSUPA stick from Option. + +The unusual_devs.h entry is necessary because the device descriptor is +vendor-specific. That prevents usb-storage from binding to it as an +interface driver. + +T: Bus=07 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 15 Spd=480 MxCh= 0 +D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs= 1 +P: Vendor=0af0 ProdID=7501 Rev= 0.00 +S: Manufacturer=Option N.V. +S: Product=Globetrotter HSUPA Modem +C:* #Ifs=11 Cfg#= 1 Atr=a0 MxPwr=500mA +I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso +E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) +E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso +E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) +E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) +E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso +E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso +E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) +E: Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 9 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso +E: Ad=8a(I) Atr=03(Int.) MxPS= 64 Ivl=2ms +E: Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=0a(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#=10 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage +E: Ad=0b(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms + +Signed-off-by: Jan Dumon +Signed-off-by: Phil Dibowitz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/storage/unusual_devs.h | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- a/drivers/usb/storage/unusual_devs.h ++++ b/drivers/usb/storage/unusual_devs.h +@@ -1407,6 +1407,16 @@ UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0 + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + ++/* Reported by Jan Dumon ++ * This device (wrongly) has a vendor-specific device descriptor. ++ * The entry is needed so usb-storage can bind to it's mass-storage ++ * interface as an interface driver */ ++UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000, ++ "Option", ++ "GI 0431 SD-Card", ++ US_SC_DEVICE, US_PR_DEVICE, NULL, ++ 0 ), ++ + #ifdef CONFIG_USB_STORAGE_ISD200 + UNUSUAL_DEV( 0x0bf6, 0xa001, 0x0100, 0x0110, + "ATI", diff --git a/queue-2.6.27/usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch b/queue-2.6.27/usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch new file mode 100644 index 00000000000..c0421d398af --- /dev/null +++ b/queue-2.6.27/usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch @@ -0,0 +1,34 @@ +From 716a9c8561d9c50ec454f4fbd39a265892feda2c Mon Sep 17 00:00:00 2001 +From: Moritz Muehlenhoff +Date: Sat, 14 Mar 2009 00:43:21 +0100 +Subject: USB: Updated unusual-devs entry for USB mass storage on Nokia 6233 + +From: Moritz Muehlenhoff + +commit 716a9c8561d9c50ec454f4fbd39a265892feda2c upstream. + +Current firmware revision 5.60 still behaves the same, +so update the quirk up a (non-existing) 99.99 revision. + +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=493415 + +Signed-off-by: Moritz Muehlenhoff +Tested-by: Jan Heitkoetter +Signed-off-by: Phil Dibowitz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/storage/unusual_devs.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/storage/unusual_devs.h ++++ b/drivers/usb/storage/unusual_devs.h +@@ -219,7 +219,7 @@ UNUSUAL_DEV( 0x0421, 0x047c, 0x0370, 0x + US_FL_MAX_SECTORS_64 ), + + /* Reported by Manuel Osdoba */ +-UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x0452, ++UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x9999, + "Nokia", + "Nokia 6233", + US_SC_DEVICE, US_PR_DEVICE, NULL, diff --git a/queue-2.6.27/usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch b/queue-2.6.27/usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch new file mode 100644 index 00000000000..c4392f6f105 --- /dev/null +++ b/queue-2.6.27/usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch @@ -0,0 +1,69 @@ +From 6ff10464096540e14d7575a72c50d0316d003714 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Mon, 9 Mar 2009 13:44:02 -0400 +Subject: USB: usbfs: keep async URBs until the device file is closed + +From: Alan Stern + +commit 6ff10464096540e14d7575a72c50d0316d003714 upstream. + +The usbfs driver manages a list of completed asynchronous URBs. But +it is too eager to free the entries on this list: destroy_async() gets +called whenever an interface is unbound or a device is removed, and it +deallocates the outstanding struct async entries for all URBs on that +interface or device. This is wrong; the user program should be able +to reap an URB any time after it has completed, regardless of whether +or not the interface is still bound or the device is still present. + +This patch (as1222) moves the code for deallocating the completed list +entries from destroy_async() to usbdev_release(). The outstanding +entries won't be freed until the user program has closed the device +file, thereby eliminating any possibility that the remaining URBs +might still be reaped. + +This fixes a bug in which a program can hang in the USBDEVFS_REAPURB +ioctl when the device is unplugged. + +Reported-and-tested-by: Martin Poupe +Signed-off-by: Alan Stern +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/core/devio.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +--- a/drivers/usb/core/devio.c ++++ b/drivers/usb/core/devio.c +@@ -359,11 +359,6 @@ static void destroy_async(struct dev_sta + spin_lock_irqsave(&ps->lock, flags); + } + spin_unlock_irqrestore(&ps->lock, flags); +- as = async_getcompleted(ps); +- while (as) { +- free_async(as); +- as = async_getcompleted(ps); +- } + } + + static void destroy_async_on_interface(struct dev_state *ps, +@@ -639,6 +634,7 @@ static int usbdev_release(struct inode * + struct dev_state *ps = file->private_data; + struct usb_device *dev = ps->dev; + unsigned int ifnum; ++ struct async *as; + + usb_lock_device(dev); + +@@ -657,6 +653,12 @@ static int usbdev_release(struct inode * + usb_unlock_device(dev); + usb_put_dev(dev); + put_pid(ps->disc_pid); ++ ++ as = async_getcompleted(ps); ++ while (as) { ++ free_async(as); ++ as = async_getcompleted(ps); ++ } + kfree(ps); + return 0; + }