From: Greg Kroah-Hartman Date: Tue, 31 Jan 2012 18:36:21 +0000 (-0800) Subject: 3.2-stable patches X-Git-Tag: v3.0.19~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=70d35e6be7362dd2c452471ea3148fb5c47941b2;p=thirdparty%2Fkernel%2Fstable-queue.git 3.2-stable patches added patches: drivers-usb-host-ehci-fsl.c-add-missing-iounmap.patch iwlwifi-fix-pci-e-transport-inta-race.patch jsm-fixed-eeh-recovery-error.patch serial-amba-pl011-lock-console-writes-against-interrupts.patch tty-fix-uv-serial-console-regression.patch usb-gadget-langwell-don-t-call-gadget-s-disconnect.patch usb-gadget-storage-endian-fix.patch usb-musb-davinci-fix-build-breakage.patch usb-realtek-cr-fix-autopm-scheduling-while-atomic.patch usb-usbsevseg-fix-max-length.patch vmwgfx-fix-assignment-in-vmw_framebuffer_create_handle.patch xhci-cleanup-isoc-transfer-ring-when-td-length-mismatch-found.patch xhci-fix-usb-3.0-device-restart-on-resume.patch --- diff --git a/queue-3.2/drivers-usb-host-ehci-fsl.c-add-missing-iounmap.patch b/queue-3.2/drivers-usb-host-ehci-fsl.c-add-missing-iounmap.patch new file mode 100644 index 00000000000..fa26939ad38 --- /dev/null +++ b/queue-3.2/drivers-usb-host-ehci-fsl.c-add-missing-iounmap.patch @@ -0,0 +1,52 @@ +From 2492c6e6454ff3edb11e273b071a6ea80a199c71 Mon Sep 17 00:00:00 2001 +From: Julia Lawall +Date: Thu, 12 Jan 2012 10:55:13 +0100 +Subject: drivers/usb/host/ehci-fsl.c: add missing iounmap + +From: Julia Lawall + +commit 2492c6e6454ff3edb11e273b071a6ea80a199c71 upstream. + +Add missing iounmap in error handling code, in a case where the function +already preforms iounmap on some other execution path. + +A simplified version of the semantic match that finds this problem is as +follows: (http://coccinelle.lip6.fr/) + +// +@@ +expression e; +statement S,S1; +int ret; +@@ +e = \(ioremap\|ioremap_nocache\)(...) +... when != iounmap(e) +if (<+...e...+>) S +... when any + when != iounmap(e) +*if (...) + { ... when != iounmap(e) + return ...; } +... when any +iounmap(e); +// + +Signed-off-by: Julia Lawall +Acked-by: Alan Stern +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/ehci-fsl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/host/ehci-fsl.c ++++ b/drivers/usb/host/ehci-fsl.c +@@ -125,7 +125,7 @@ static int usb_hcd_fsl_probe(const struc + */ + if (pdata->init && pdata->init(pdev)) { + retval = -ENODEV; +- goto err3; ++ goto err4; + } + + /* Enable USB controller, 83xx or 8536 */ diff --git a/queue-3.2/iwlwifi-fix-pci-e-transport-inta-race.patch b/queue-3.2/iwlwifi-fix-pci-e-transport-inta-race.patch new file mode 100644 index 00000000000..980de01284f --- /dev/null +++ b/queue-3.2/iwlwifi-fix-pci-e-transport-inta-race.patch @@ -0,0 +1,51 @@ +From b49ba04a3a0382e7314d990707c21094c410425a Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Thu, 19 Jan 2012 08:20:57 -0800 +Subject: iwlwifi: fix PCI-E transport "inta" race + +From: Johannes Berg + +commit b49ba04a3a0382e7314d990707c21094c410425a upstream. + +When an interrupt comes in, we read the reason +bits and collect them into "trans_pcie->inta". +This happens with the spinlock held. However, +there's a bug resetting this variable -- that +happens after the spinlock has been released. +This means that it is possible for interrupts +to be missed if the reset happens after some +other interrupt reasons were already added to +the variable. + +I found this by code inspection, looking for a +reason that we sometimes see random commands +time out. It seems possible that this causes +such behaviour, but I can't say for sure right +now since it happens extremely infrequently on +my test systems. + +Signed-off-by: Johannes Berg +Signed-off-by: Wey-Yi Guy +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c ++++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c +@@ -957,11 +957,11 @@ void iwl_irq_tasklet(struct iwl_trans *t + } + #endif + +- spin_unlock_irqrestore(&trans->shrd->lock, flags); +- + /* saved interrupt in inta variable now we can reset trans_pcie->inta */ + trans_pcie->inta = 0; + ++ spin_unlock_irqrestore(&trans->shrd->lock, flags); ++ + /* Now service all interrupt bits discovered above. */ + if (inta & CSR_INT_BIT_HW_ERR) { + IWL_ERR(trans, "Hardware error detected. Restarting.\n"); diff --git a/queue-3.2/jsm-fixed-eeh-recovery-error.patch b/queue-3.2/jsm-fixed-eeh-recovery-error.patch new file mode 100644 index 00000000000..a7d0135726d --- /dev/null +++ b/queue-3.2/jsm-fixed-eeh-recovery-error.patch @@ -0,0 +1,51 @@ +From 26aa38cafae0dbef3b2fe75ea487c83313c36d45 Mon Sep 17 00:00:00 2001 +From: Lucas Kannebley Tavares +Date: Mon, 9 Jan 2012 10:58:06 -0200 +Subject: jsm: Fixed EEH recovery error + +From: Lucas Kannebley Tavares + +commit 26aa38cafae0dbef3b2fe75ea487c83313c36d45 upstream. + +There was an error on the jsm driver that would cause it to be unable to +recover after a second error is detected. + +At the first error, the device recovers properly: + +[72521.485691] EEH: Detected PCI bus error on device 0003:02:00.0 +[72521.485695] EEH: This PCI device has failed 1 times in the last hour: +... +[72532.035693] ttyn3 at MMIO 0x0 (irq = 49) is a jsm +[72532.105689] jsm: Port 3 added + +However, at the second error, it cascades until EEH disables the device: + +[72631.229549] Call Trace: +... +[72641.725687] jsm: Port 3 added +[72641.725695] EEH: Detected PCI bus error on device 0003:02:00.0 +[72641.725698] EEH: This PCI device has failed 3 times in the last hour: + +It was caused because the PCI state was not being saved after the first +restore. Therefore, at the second recovery the PCI state would not be +restored. + +Signed-off-by: Lucas Kannebley Tavares +Signed-off-by: Breno Leitao +Acked-by: Thadeu Lima de Souza Cascardo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/serial/jsm/jsm_driver.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/tty/serial/jsm/jsm_driver.c ++++ b/drivers/tty/serial/jsm/jsm_driver.c +@@ -251,6 +251,7 @@ static void jsm_io_resume(struct pci_dev + struct jsm_board *brd = pci_get_drvdata(pdev); + + pci_restore_state(pdev); ++ pci_save_state(pdev); + + jsm_uart_port_init(brd); + } diff --git a/queue-3.2/serial-amba-pl011-lock-console-writes-against-interrupts.patch b/queue-3.2/serial-amba-pl011-lock-console-writes-against-interrupts.patch new file mode 100644 index 00000000000..56103c92546 --- /dev/null +++ b/queue-3.2/serial-amba-pl011-lock-console-writes-against-interrupts.patch @@ -0,0 +1,64 @@ +From ef605fdb33883d687cff5ba75095a91b313b4966 Mon Sep 17 00:00:00 2001 +From: Rabin Vincent +Date: Tue, 17 Jan 2012 11:52:28 +0100 +Subject: serial: amba-pl011: lock console writes against interrupts + +From: Rabin Vincent + +commit ef605fdb33883d687cff5ba75095a91b313b4966 upstream. + +Protect against pl011_console_write() and the interrupt for +the console UART running concurrently on different CPUs. + +Otherwise the console_write could spin for a long time +waiting for the UART to become not busy, while the other +CPU continuously services UART interrupts and keeps the +UART busy. + +The checks for sysrq and oops_in_progress are taken +from 8250.c. + +Signed-off-by: Rabin Vincent +Reviewed-by: Srinidhi Kasagar +Reviewed-by: Bibek Basu +Reviewed-by: Shreshtha Kumar Sahu +Signed-off-by: Linus Walleij +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/serial/amba-pl011.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +--- a/drivers/tty/serial/amba-pl011.c ++++ b/drivers/tty/serial/amba-pl011.c +@@ -1740,9 +1740,19 @@ pl011_console_write(struct console *co, + { + struct uart_amba_port *uap = amba_ports[co->index]; + unsigned int status, old_cr, new_cr; ++ unsigned long flags; ++ int locked = 1; + + clk_enable(uap->clk); + ++ local_irq_save(flags); ++ if (uap->port.sysrq) ++ locked = 0; ++ else if (oops_in_progress) ++ locked = spin_trylock(&uap->port.lock); ++ else ++ spin_lock(&uap->port.lock); ++ + /* + * First save the CR then disable the interrupts + */ +@@ -1762,6 +1772,10 @@ pl011_console_write(struct console *co, + } while (status & UART01x_FR_BUSY); + writew(old_cr, uap->port.membase + UART011_CR); + ++ if (locked) ++ spin_unlock(&uap->port.lock); ++ local_irq_restore(flags); ++ + clk_disable(uap->clk); + } + diff --git a/queue-3.2/series b/queue-3.2/series index 4f890cb1d64..3a40e9f0490 100644 --- a/queue-3.2/series +++ b/queue-3.2/series @@ -47,3 +47,16 @@ usb-cdc-wdm-use-two-mutexes-to-allow-simultaneous-read-and-write.patch qcaux-add-more-pantech-uml190-and-uml290-ports.patch usb-dwc3-ep0-tidy-up-pending-request-handling.patch usb-io_ti-make-edge_remove_sysfs_attrs-the-port_remove-method.patch +tty-fix-uv-serial-console-regression.patch +serial-amba-pl011-lock-console-writes-against-interrupts.patch +jsm-fixed-eeh-recovery-error.patch +iwlwifi-fix-pci-e-transport-inta-race.patch +vmwgfx-fix-assignment-in-vmw_framebuffer_create_handle.patch +usb-realtek-cr-fix-autopm-scheduling-while-atomic.patch +usb-usbsevseg-fix-max-length.patch +usb-gadget-langwell-don-t-call-gadget-s-disconnect.patch +usb-gadget-storage-endian-fix.patch +drivers-usb-host-ehci-fsl.c-add-missing-iounmap.patch +xhci-fix-usb-3.0-device-restart-on-resume.patch +xhci-cleanup-isoc-transfer-ring-when-td-length-mismatch-found.patch +usb-musb-davinci-fix-build-breakage.patch diff --git a/queue-3.2/tty-fix-uv-serial-console-regression.patch b/queue-3.2/tty-fix-uv-serial-console-regression.patch new file mode 100644 index 00000000000..da485c5add8 --- /dev/null +++ b/queue-3.2/tty-fix-uv-serial-console-regression.patch @@ -0,0 +1,70 @@ +From 0eee50af5b13e00b3fb7a5fe8480419a71b8235d Mon Sep 17 00:00:00 2001 +From: Jiri Slaby +Date: Thu, 12 Jan 2012 22:55:15 +0100 +Subject: TTY: fix UV serial console regression + +From: Jiri Slaby + +commit 0eee50af5b13e00b3fb7a5fe8480419a71b8235d upstream. + +Commit 74c2107759d (serial: Use block_til_ready helper) and its fixup +3f582b8c110 (serial: fix termios settings in open) introduced a +regression on UV systems. The serial eventually freezes while being +used. It's completely unpredictable and sometimes needs a heap of +traffic to happen first. + +To reproduce this, yast installation was used as it turned out to be +pretty reliable in reproducing. Especially during installation process +where one doesn't have an SSH daemon running. And no monitor as the HW +is completely headless. So this was fun to find. Given the machine +doesn't boot on vanilla before 2.6.36 final. (And the commits above +are older.) + +Unless there is some bad race in the code, the hardware seems to be +pretty broken. Otherwise pure MSR read should not cause such a bug, +or? + +So to prevent the bug, revert to the old behavior. I.e. read modem +status only if we really have to -- for non-CLOCAL set serials. +Non-CLOCAL works on this hardware OK, I tried. See? I don't. + +And document that shit. + +Signed-off-by: Jiri Slaby +References: https://lkml.org/lkml/2011/12/6/573 +References: https://bugzilla.novell.com/show_bug.cgi?id=718518 +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/tty_port.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +--- a/drivers/tty/tty_port.c ++++ b/drivers/tty/tty_port.c +@@ -227,7 +227,6 @@ int tty_port_block_til_ready(struct tty_ + int do_clocal = 0, retval; + unsigned long flags; + DEFINE_WAIT(wait); +- int cd; + + /* block if port is in the process of being closed */ + if (tty_hung_up_p(filp) || port->flags & ASYNC_CLOSING) { +@@ -284,11 +283,14 @@ int tty_port_block_til_ready(struct tty_ + retval = -ERESTARTSYS; + break; + } +- /* Probe the carrier. For devices with no carrier detect this +- will always return true */ +- cd = tty_port_carrier_raised(port); ++ /* ++ * Probe the carrier. For devices with no carrier detect ++ * tty_port_carrier_raised will always return true. ++ * Never ask drivers if CLOCAL is set, this causes troubles ++ * on some hardware. ++ */ + if (!(port->flags & ASYNC_CLOSING) && +- (do_clocal || cd)) ++ (do_clocal || tty_port_carrier_raised(port))) + break; + if (signal_pending(current)) { + retval = -ERESTARTSYS; diff --git a/queue-3.2/usb-gadget-langwell-don-t-call-gadget-s-disconnect.patch b/queue-3.2/usb-gadget-langwell-don-t-call-gadget-s-disconnect.patch new file mode 100644 index 00000000000..ce097e617ca --- /dev/null +++ b/queue-3.2/usb-gadget-langwell-don-t-call-gadget-s-disconnect.patch @@ -0,0 +1,91 @@ +From 37fd37108449d574da11aa9055c5c8afb39ff226 Mon Sep 17 00:00:00 2001 +From: Alexander Shishkin +Date: Wed, 21 Dec 2011 10:19:40 +0200 +Subject: usb: gadget: langwell: don't call gadget's disconnect() + +From: Alexander Shishkin + +commit 37fd37108449d574da11aa9055c5c8afb39ff226 upstream. + +UDC core will call disconnect() and unbind() for us upon the gadget +removal, so we should not do it ourselves. Otherwise, a composite +gadget will explode, for example. Others might too. + +This was introduced during conversion to new style gadget in 2c7f0989 +(usb: gadget: langwell: convert to new style). + +Signed-off-by: Alexander Shishkin +Cc: Heikki Krogerus +Cc: linux-usb@vger.kernel.org +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/gadget/langwell_udc.c | 18 ++++++++---------- + 1 file changed, 8 insertions(+), 10 deletions(-) + +--- a/drivers/usb/gadget/langwell_udc.c ++++ b/drivers/usb/gadget/langwell_udc.c +@@ -1522,8 +1522,7 @@ static void langwell_udc_stop(struct lan + + + /* stop all USB activities */ +-static void stop_activity(struct langwell_udc *dev, +- struct usb_gadget_driver *driver) ++static void stop_activity(struct langwell_udc *dev) + { + struct langwell_ep *ep; + dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__); +@@ -1535,9 +1534,9 @@ static void stop_activity(struct langwel + } + + /* report disconnect; the driver is already quiesced */ +- if (driver) { ++ if (dev->driver) { + spin_unlock(&dev->lock); +- driver->disconnect(&dev->gadget); ++ dev->driver->disconnect(&dev->gadget); + spin_lock(&dev->lock); + } + +@@ -1925,11 +1924,10 @@ static int langwell_stop(struct usb_gadg + + /* stop all usb activities */ + dev->gadget.speed = USB_SPEED_UNKNOWN; +- stop_activity(dev, driver); +- spin_unlock_irqrestore(&dev->lock, flags); +- + dev->gadget.dev.driver = NULL; + dev->driver = NULL; ++ stop_activity(dev); ++ spin_unlock_irqrestore(&dev->lock, flags); + + device_remove_file(&dev->pdev->dev, &dev_attr_function); + +@@ -2733,7 +2731,7 @@ static void handle_usb_reset(struct lang + dev->bus_reset = 1; + + /* reset all the queues, stop all USB activities */ +- stop_activity(dev, dev->driver); ++ stop_activity(dev); + dev->usb_state = USB_STATE_DEFAULT; + } else { + dev_vdbg(&dev->pdev->dev, "device controller reset\n"); +@@ -2741,7 +2739,7 @@ static void handle_usb_reset(struct lang + langwell_udc_reset(dev); + + /* reset all the queues, stop all USB activities */ +- stop_activity(dev, dev->driver); ++ stop_activity(dev); + + /* reset ep0 dQH and endptctrl */ + ep0_reset(dev); +@@ -3367,7 +3365,7 @@ static int langwell_udc_suspend(struct p + + spin_lock_irq(&dev->lock); + /* stop all usb activities */ +- stop_activity(dev, dev->driver); ++ stop_activity(dev); + spin_unlock_irq(&dev->lock); + + /* free dTD dma_pool and dQH */ diff --git a/queue-3.2/usb-gadget-storage-endian-fix.patch b/queue-3.2/usb-gadget-storage-endian-fix.patch new file mode 100644 index 00000000000..14054dbf0a3 --- /dev/null +++ b/queue-3.2/usb-gadget-storage-endian-fix.patch @@ -0,0 +1,41 @@ +From a85016390135d577c457876d0e905095600751de Mon Sep 17 00:00:00 2001 +From: Andiry Xu +Date: Wed, 4 Jan 2012 15:18:27 +0800 +Subject: usb: gadget: storage: endian fix + +From: Andiry Xu + +commit a85016390135d577c457876d0e905095600751de upstream. + +Fix some endian issues for storage gadgets. + +Signed-off-by: Andiry Xu +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/gadget/storage_common.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/usb/gadget/storage_common.c ++++ b/drivers/usb/gadget/storage_common.c +@@ -598,16 +598,16 @@ static __maybe_unused struct usb_ss_cap_ + | USB_5GBPS_OPERATION), + .bFunctionalitySupport = USB_LOW_SPEED_OPERATION, + .bU1devExitLat = USB_DEFAULT_U1_DEV_EXIT_LAT, +- .bU2DevExitLat = USB_DEFAULT_U2_DEV_EXIT_LAT, ++ .bU2DevExitLat = cpu_to_le16(USB_DEFAULT_U2_DEV_EXIT_LAT), + }; + + static __maybe_unused struct usb_bos_descriptor fsg_bos_desc = { + .bLength = USB_DT_BOS_SIZE, + .bDescriptorType = USB_DT_BOS, + +- .wTotalLength = USB_DT_BOS_SIZE ++ .wTotalLength = cpu_to_le16(USB_DT_BOS_SIZE + + USB_DT_USB_EXT_CAP_SIZE +- + USB_DT_USB_SS_CAP_SIZE, ++ + USB_DT_USB_SS_CAP_SIZE), + + .bNumDeviceCaps = 2, + }; diff --git a/queue-3.2/usb-musb-davinci-fix-build-breakage.patch b/queue-3.2/usb-musb-davinci-fix-build-breakage.patch new file mode 100644 index 00000000000..484b6a9f485 --- /dev/null +++ b/queue-3.2/usb-musb-davinci-fix-build-breakage.patch @@ -0,0 +1,39 @@ +From 006896fc612f11bf0624db7814a75d0d5410855f Mon Sep 17 00:00:00 2001 +From: Sekhar Nori +Date: Wed, 28 Dec 2011 12:02:57 +0530 +Subject: usb: musb: davinci: fix build breakage + +From: Sekhar Nori + +commit 006896fc612f11bf0624db7814a75d0d5410855f upstream. + +Commit 0020afb369859472a461ef4af6410732e929d402 (ARM: mach-davinci: +remove mach/memory.h) removed mach/memory.h for DaVinci which broke +DaVinci MUSB build. + +mach/memory.h is not actually needed in davinci.c, so remove it. +While at it, also remove some more machine specific inclulde +files which are not needed for build. + +Tested on DM644x EVM using USB card reader. + +Signed-off-by: Sekhar Nori +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/musb/davinci.c | 3 --- + 1 file changed, 3 deletions(-) + +--- a/drivers/usb/musb/davinci.c ++++ b/drivers/usb/musb/davinci.c +@@ -33,9 +33,6 @@ + #include + #include + +-#include +-#include +-#include + #include + + #include diff --git a/queue-3.2/usb-realtek-cr-fix-autopm-scheduling-while-atomic.patch b/queue-3.2/usb-realtek-cr-fix-autopm-scheduling-while-atomic.patch new file mode 100644 index 00000000000..310951fe2f5 --- /dev/null +++ b/queue-3.2/usb-realtek-cr-fix-autopm-scheduling-while-atomic.patch @@ -0,0 +1,34 @@ +From b3ef051db763b640d1ff724b616ffba940896b44 Mon Sep 17 00:00:00 2001 +From: Stanislaw Gruszka +Date: Thu, 26 Jan 2012 12:29:42 +0100 +Subject: USB: Realtek cr: fix autopm scheduling while atomic + +From: Stanislaw Gruszka + +commit b3ef051db763b640d1ff724b616ffba940896b44 upstream. + +Resolves: +https://bugzilla.redhat.com/show_bug.cgi?id=784345 + +Reported-by: Francis Moreau +Reported-and-tested-by: Christian D +Reported-and-tested-by: Jimmy Dorff +Reported-and-tested-by: collura@ieee.org +Signed-off-by: Stanislaw Gruszka +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/storage/realtek_cr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/storage/realtek_cr.c ++++ b/drivers/usb/storage/realtek_cr.c +@@ -791,7 +791,7 @@ static void rts51x_suspend_timer_fn(unsi + rts51x_set_stat(chip, RTS51X_STAT_SS); + /* ignore mass storage interface's children */ + pm_suspend_ignore_children(&us->pusb_intf->dev, true); +- usb_autopm_put_interface(us->pusb_intf); ++ usb_autopm_put_interface_async(us->pusb_intf); + US_DEBUGP("%s: RTS51X_STAT_SS 01," + "intf->pm_usage_cnt:%d, power.usage:%d\n", + __func__, diff --git a/queue-3.2/usb-usbsevseg-fix-max-length.patch b/queue-3.2/usb-usbsevseg-fix-max-length.patch new file mode 100644 index 00000000000..e0789afc6ee --- /dev/null +++ b/queue-3.2/usb-usbsevseg-fix-max-length.patch @@ -0,0 +1,32 @@ +From 1097ccebe630170080c41df0edcf88e0626e9c75 Mon Sep 17 00:00:00 2001 +From: Harrison Metzger +Date: Sun, 15 Jan 2012 08:43:24 -0600 +Subject: USB: usbsevseg: fix max length + +From: Harrison Metzger + +commit 1097ccebe630170080c41df0edcf88e0626e9c75 upstream. + +This changes the max length for the usb seven segment delcom device to 8 +from 6. Delcom has both 6 and 8 variants and having 8 works fine with +devices which are only 6. + +Signed-off-by: Harrison Metzger +Signed-off-by: Stuart Pook +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/misc/usbsevseg.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/misc/usbsevseg.c ++++ b/drivers/usb/misc/usbsevseg.c +@@ -24,7 +24,7 @@ + + #define VENDOR_ID 0x0fc5 + #define PRODUCT_ID 0x1227 +-#define MAXLEN 6 ++#define MAXLEN 8 + + /* table of devices that work with this driver */ + static const struct usb_device_id id_table[] = { diff --git a/queue-3.2/vmwgfx-fix-assignment-in-vmw_framebuffer_create_handle.patch b/queue-3.2/vmwgfx-fix-assignment-in-vmw_framebuffer_create_handle.patch new file mode 100644 index 00000000000..14ac217e51b --- /dev/null +++ b/queue-3.2/vmwgfx-fix-assignment-in-vmw_framebuffer_create_handle.patch @@ -0,0 +1,31 @@ +From bf9c05d5b6d19b3e4c9fe21047694e94f48db89b Mon Sep 17 00:00:00 2001 +From: Ryan Mallon +Date: Sat, 28 Jan 2012 08:51:40 +1100 +Subject: vmwgfx: Fix assignment in vmw_framebuffer_create_handle + +From: Ryan Mallon + +commit bf9c05d5b6d19b3e4c9fe21047694e94f48db89b upstream. + +The assignment of handle in vmw_framebuffer_create_handle doesn't actually do anything useful and is incorrectly assigning an integer value to a pointer argument. It appears that this is a typo and should be dereferencing handle rather than assigning to it directly. This fixes a bug where an undefined handle value is potentially returned to user-space. + +Signed-off-by: Ryan Mallon +Reviewed-by: Jakob Bornecrantz +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +@@ -378,7 +378,7 @@ int vmw_framebuffer_create_handle(struct + unsigned int *handle) + { + if (handle) +- handle = 0; ++ *handle = 0; + + return 0; + } diff --git a/queue-3.2/xhci-cleanup-isoc-transfer-ring-when-td-length-mismatch-found.patch b/queue-3.2/xhci-cleanup-isoc-transfer-ring-when-td-length-mismatch-found.patch new file mode 100644 index 00000000000..c16ef0f0de5 --- /dev/null +++ b/queue-3.2/xhci-cleanup-isoc-transfer-ring-when-td-length-mismatch-found.patch @@ -0,0 +1,37 @@ +From cf840551a884360841bd3d3ce1ad0868ff0b759a Mon Sep 17 00:00:00 2001 +From: Andiry Xu +Date: Wed, 18 Jan 2012 17:47:12 +0800 +Subject: xHCI: Cleanup isoc transfer ring when TD length mismatch found + +From: Andiry Xu + +commit cf840551a884360841bd3d3ce1ad0868ff0b759a upstream. + +When a TD length mismatch is found during isoc TRB enqueue, it directly +returns -EINVAL. However, isoc transfer is partially enqueued at this time, +and the ring should be cleared. + +This should be backported to kernels as old as 2.6.36, which contain the +commit 522989a27c7badb608155b1f1dea3487ed431f74 "xhci: Fix failed +enqueue in the middle of isoch TD." + +Signed-off-by: Andiry Xu +Signed-off-by: Sarah Sharp +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/xhci-ring.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/usb/host/xhci-ring.c ++++ b/drivers/usb/host/xhci-ring.c +@@ -3373,7 +3373,8 @@ static int xhci_queue_isoc_tx(struct xhc + /* Check TD length */ + if (running_total != td_len) { + xhci_err(xhci, "ISOC TD length unmatch\n"); +- return -EINVAL; ++ ret = -EINVAL; ++ goto cleanup; + } + } + diff --git a/queue-3.2/xhci-fix-usb-3.0-device-restart-on-resume.patch b/queue-3.2/xhci-fix-usb-3.0-device-restart-on-resume.patch new file mode 100644 index 00000000000..35e259098d6 --- /dev/null +++ b/queue-3.2/xhci-fix-usb-3.0-device-restart-on-resume.patch @@ -0,0 +1,49 @@ +From d0cd5d482b8a6dc92c6c69a5387baf72ea84f23a Mon Sep 17 00:00:00 2001 +From: Sarah Sharp +Date: Mon, 14 Nov 2011 17:51:39 -0800 +Subject: xhci: Fix USB 3.0 device restart on resume. + +From: Sarah Sharp + +commit d0cd5d482b8a6dc92c6c69a5387baf72ea84f23a upstream. + +The xHCI hub port code gets passed a zero-based port number by the USB +core. It then adds one to in order to find a device slot by port number +and device speed by calling xhci_find_slot_id_by_port. That function +clearly states it requires a one-based port number. The xHCI port +status change event handler was using a zero-based port number that it +got from find_faked_portnum_from_hw_portnum, not a one-based port +number. This lead to the doorbells never being rung for a device after +a resume, or worse, a different device with the same speed having its +doorbell rung (which could lead to bad power management in the xHCI host +controller). + +This patch should be backported to kernels as old as 2.6.39. + +Signed-off-by: Sarah Sharp +Acked-by: Andiry Xu +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/xhci-ring.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/usb/host/xhci-ring.c ++++ b/drivers/usb/host/xhci-ring.c +@@ -1215,6 +1215,7 @@ static void handle_vendor_event(struct x + * + * Returns a zero-based port number, which is suitable for indexing into each of + * the split roothubs' port arrays and bus state arrays. ++ * Add one to it in order to call xhci_find_slot_id_by_port. + */ + static unsigned int find_faked_portnum_from_hw_portnum(struct usb_hcd *hcd, + struct xhci_hcd *xhci, u32 port_id) +@@ -1335,7 +1336,7 @@ static void handle_port_status(struct xh + xhci_set_link_state(xhci, port_array, faked_port_index, + XDEV_U0); + slot_id = xhci_find_slot_id_by_port(hcd, xhci, +- faked_port_index); ++ faked_port_index + 1); + if (!slot_id) { + xhci_dbg(xhci, "slot_id is zero\n"); + goto cleanup;