From: Greg Kroah-Hartman Date: Wed, 11 Aug 2010 00:31:41 +0000 (-0700) Subject: .34 patches X-Git-Tag: v2.6.32.19~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac0dd8b41a1fe3f5d94e117849ac903427396534;p=thirdparty%2Fkernel%2Fstable-queue.git .34 patches --- diff --git a/queue-2.6.34/char-nozomi-fix-tty-count-counting.patch b/queue-2.6.34/char-nozomi-fix-tty-count-counting.patch new file mode 100644 index 00000000000..02ba4e1280a --- /dev/null +++ b/queue-2.6.34/char-nozomi-fix-tty-count-counting.patch @@ -0,0 +1,33 @@ +From ee78bb95b7bea08b7774a02073ea2bb45611a9e1 Mon Sep 17 00:00:00 2001 +From: Jiri Slaby +Date: Thu, 29 Jul 2010 11:09:47 +0200 +Subject: Char: nozomi, fix tty->count counting + +From: Jiri Slaby + +commit ee78bb95b7bea08b7774a02073ea2bb45611a9e1 upstream. + +Currently ntty_install omits to increment tty count and we get the +following warnings: +Warning: dev (noz2) tty->count(0) != #fd's(1) in tty_open + +So to fix that, add one tty->count++ there. + +Signed-off-by: Jiri Slaby +Cc: Alan Cox +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/char/nozomi.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/char/nozomi.c ++++ b/drivers/char/nozomi.c +@@ -1611,6 +1611,7 @@ static int ntty_install(struct tty_drive + ret = tty_init_termios(tty); + if (ret == 0) { + tty_driver_kref_get(driver); ++ tty->count++; + driver->ttys[tty->index] = tty; + } + return ret; diff --git a/queue-2.6.34/char-nozomi-set-tty-driver_data-appropriately.patch b/queue-2.6.34/char-nozomi-set-tty-driver_data-appropriately.patch new file mode 100644 index 00000000000..8af5440f2ab --- /dev/null +++ b/queue-2.6.34/char-nozomi-set-tty-driver_data-appropriately.patch @@ -0,0 +1,60 @@ +From bf9c1fca9ae9a79ed209e7ab2c10b3862f3f6f72 Mon Sep 17 00:00:00 2001 +From: Jiri Slaby +Date: Thu, 29 Jul 2010 11:46:32 +0200 +Subject: Char: nozomi, set tty->driver_data appropriately + +From: Jiri Slaby + +commit bf9c1fca9ae9a79ed209e7ab2c10b3862f3f6f72 upstream. + +Sorry, one more fix, this one depends on the other, so this is rather 2/2. +-- + +tty->driver_data is used all over the code, but never set. This +results in oopses like: +BUG: unable to handle kernel NULL pointer dereference at 0000000000000130 +IP: [] mutex_lock+0x10/0x40 +... +Pid: 2157, comm: modem-manager Not tainted 2.6.34.1-0.1-desktop #1 2768DR7/2768DR7 +RIP: 0010:[] [] mutex_lock+0x10/0x40 +RSP: 0018:ffff88007b16fa50 EFLAGS: 00010286 +RAX: 0000000000000000 RBX: 0000000000000130 RCX: 0000000000000003 +RDX: 0000000000000003 RSI: 0000000000000286 RDI: 0000000000000130 +RBP: 0000000000001000 R08: 0000000000000000 R09: 0000000000000000 +R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000130 +R13: 0000000000000001 R14: 0000000000000000 R15: ffff88007b16feb4 +... +Call Trace: + [] ntty_write_room+0x4d/0x90 [nozomi] +... + +Set tty->driver_data to the computed port in .install to not recompute it in +every place where needed. Switch .open to use driver_data too. + +Signed-off-by: Jiri Slaby +Cc: Alan Cox +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/char/nozomi.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/char/nozomi.c ++++ b/drivers/char/nozomi.c +@@ -1612,6 +1612,7 @@ static int ntty_install(struct tty_drive + if (ret == 0) { + tty_driver_kref_get(driver); + tty->count++; ++ tty->driver_data = port; + driver->ttys[tty->index] = tty; + } + return ret; +@@ -1640,7 +1641,7 @@ static int ntty_activate(struct tty_port + + static int ntty_open(struct tty_struct *tty, struct file *filp) + { +- struct port *port = get_port_by_tty(tty); ++ struct port *port = tty->driver_data; + return tty_port_open(&port->port, tty, filp); + } + diff --git a/queue-2.6.34/drivers-video-w100fb.c-ignore-void-return-value-fix-build-failure.patch b/queue-2.6.34/drivers-video-w100fb.c-ignore-void-return-value-fix-build-failure.patch new file mode 100644 index 00000000000..1814278ff7e --- /dev/null +++ b/queue-2.6.34/drivers-video-w100fb.c-ignore-void-return-value-fix-build-failure.patch @@ -0,0 +1,37 @@ +From fa260c00c1aa5c657793a7221e40d2400df5afd8 Mon Sep 17 00:00:00 2001 +From: Peter Huewe +Date: Mon, 9 Aug 2010 17:18:23 -0700 +Subject: drivers/video/w100fb.c: ignore void return value / fix build failure + +From: Peter Huewe + +commit fa260c00c1aa5c657793a7221e40d2400df5afd8 upstream. + +Fix a build failure "error: void value not ignored as it ought to be" +by removing an assignment of a void return value. The functionality of +the code is not changed. + +Signed-off-by: Peter Huewe +Acked-by: Henrik Kretzschmar +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/video/w100fb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/video/w100fb.c ++++ b/drivers/video/w100fb.c +@@ -858,9 +858,9 @@ unsigned long w100fb_gpio_read(int port) + void w100fb_gpio_write(int port, unsigned long value) + { + if (port==W100_GPIO_PORT_A) +- value = writel(value, remapped_regs + mmGPIO_DATA); ++ writel(value, remapped_regs + mmGPIO_DATA); + else +- value = writel(value, remapped_regs + mmGPIO_DATA2); ++ writel(value, remapped_regs + mmGPIO_DATA2); + } + EXPORT_SYMBOL(w100fb_gpio_read); + EXPORT_SYMBOL(w100fb_gpio_write); diff --git a/queue-2.6.34/ide-cd-do-not-access-completed-requests-in-the-irq-handler.patch b/queue-2.6.34/ide-cd-do-not-access-completed-requests-in-the-irq-handler.patch new file mode 100644 index 00000000000..c951ef7671d --- /dev/null +++ b/queue-2.6.34/ide-cd-do-not-access-completed-requests-in-the-irq-handler.patch @@ -0,0 +1,58 @@ +From 110712828365ccafcc61a7f4db44c31ed4cf8793 Mon Sep 17 00:00:00 2001 +From: Borislav Petkov +Date: Mon, 5 Jul 2010 21:23:52 -0700 +Subject: ide-cd: Do not access completed requests in the irq handler + +From: Borislav Petkov + +commit 110712828365ccafcc61a7f4db44c31ed4cf8793 upstream. + +ide_cd_error_cmd() can complete an erroneous request with leftover +buffers. Signal this with its return value so that the request is not +accessed after its completion in the irq handler and we oops. + +Signed-off-by: Borislav Petkov +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ide/ide-cd.c | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +--- a/drivers/ide/ide-cd.c ++++ b/drivers/ide/ide-cd.c +@@ -506,15 +506,22 @@ int ide_cd_queue_pc(ide_drive_t *drive, + return (flags & REQ_FAILED) ? -EIO : 0; + } + +-static void ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd) ++/* ++ * returns true if rq has been completed ++ */ ++static bool ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd) + { + unsigned int nr_bytes = cmd->nbytes - cmd->nleft; + + if (cmd->tf_flags & IDE_TFLAG_WRITE) + nr_bytes -= cmd->last_xfer_len; + +- if (nr_bytes > 0) ++ if (nr_bytes > 0) { + ide_complete_rq(drive, 0, nr_bytes); ++ return true; ++ } ++ ++ return false; + } + + static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) +@@ -679,7 +686,8 @@ out_end: + } + + if (uptodate == 0 && rq->bio) +- ide_cd_error_cmd(drive, cmd); ++ if (ide_cd_error_cmd(drive, cmd)) ++ return ide_stopped; + + /* make sure it's fully ended */ + if (blk_fs_request(rq) == 0) { diff --git a/queue-2.6.34/iwlwifi-fix-tx-tracer.patch b/queue-2.6.34/iwlwifi-fix-tx-tracer.patch new file mode 100644 index 00000000000..04a3ef58551 --- /dev/null +++ b/queue-2.6.34/iwlwifi-fix-tx-tracer.patch @@ -0,0 +1,32 @@ +From e95b743536937a72e1560c85696b425c5d1a1c18 Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Fri, 6 Aug 2010 16:00:48 +0200 +Subject: iwlwifi: fix TX tracer + +From: Johannes Berg + +commit e95b743536937a72e1560c85696b425c5d1a1c18 upstream. + +The TX tracing code copies with the wrong length, +which will typically copy too little data. Fix +this by using the correct length variable. + +Signed-off-by: Johannes Berg +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/iwlwifi/iwl-devtrace.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/iwlwifi/iwl-devtrace.h ++++ b/drivers/net/wireless/iwlwifi/iwl-devtrace.h +@@ -193,7 +193,7 @@ TRACE_EVENT(iwlwifi_dev_tx, + __entry->framelen = buf0_len + buf1_len; + memcpy(__get_dynamic_array(tfd), tfd, tfdlen); + memcpy(__get_dynamic_array(buf0), buf0, buf0_len); +- memcpy(__get_dynamic_array(buf1), buf1, buf0_len); ++ memcpy(__get_dynamic_array(buf1), buf1, buf1_len); + ), + TP_printk("[%p] TX %.2x (%zu bytes)", + __entry->priv, diff --git a/queue-2.6.34/md-raid10-fix-deadlock-with-unaligned-read-during-resync.patch b/queue-2.6.34/md-raid10-fix-deadlock-with-unaligned-read-during-resync.patch new file mode 100644 index 00000000000..30abda3c46b --- /dev/null +++ b/queue-2.6.34/md-raid10-fix-deadlock-with-unaligned-read-during-resync.patch @@ -0,0 +1,59 @@ +From 51e9ac77035a3dfcb6fc0a88a0d80b6f99b5edb1 Mon Sep 17 00:00:00 2001 +From: NeilBrown +Date: Sat, 7 Aug 2010 21:17:00 +1000 +Subject: md/raid10: fix deadlock with unaligned read during resync + +From: NeilBrown + +commit 51e9ac77035a3dfcb6fc0a88a0d80b6f99b5edb1 upstream. + +If the 'bio_split' path in raid10-read is used while +resync/recovery is happening it is possible to deadlock. +Fix this be elevating ->nr_waiting for the duration of both +parts of the split request. + +This fixes a bug that has been present since 2.6.22 +but has only started manifesting recently for unknown reasons. +It is suitable for and -stable since then. + +Reported-by: Justin Bronder +Tested-by: Justin Bronder +Signed-off-by: NeilBrown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/md/raid10.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +--- a/drivers/md/raid10.c ++++ b/drivers/md/raid10.c +@@ -825,11 +825,29 @@ static int make_request(struct request_q + */ + bp = bio_split(bio, + chunk_sects - (bio->bi_sector & (chunk_sects - 1)) ); ++ ++ /* Each of these 'make_request' calls will call 'wait_barrier'. ++ * If the first succeeds but the second blocks due to the resync ++ * thread raising the barrier, we will deadlock because the ++ * IO to the underlying device will be queued in generic_make_request ++ * and will never complete, so will never reduce nr_pending. ++ * So increment nr_waiting here so no new raise_barriers will ++ * succeed, and so the second wait_barrier cannot block. ++ */ ++ spin_lock_irq(&conf->resync_lock); ++ conf->nr_waiting++; ++ spin_unlock_irq(&conf->resync_lock); ++ + if (make_request(q, &bp->bio1)) + generic_make_request(&bp->bio1); + if (make_request(q, &bp->bio2)) + generic_make_request(&bp->bio2); + ++ spin_lock_irq(&conf->resync_lock); ++ conf->nr_waiting--; ++ wake_up(&conf->wait_barrier); ++ spin_unlock_irq(&conf->resync_lock); ++ + bio_pair_release(bp); + return 0; + bad_map: diff --git a/queue-2.6.34/mm-fix-corruption-of-hibernation-caused-by-reusing-swap-during-image-saving.patch b/queue-2.6.34/mm-fix-corruption-of-hibernation-caused-by-reusing-swap-during-image-saving.patch new file mode 100644 index 00000000000..18b9ac98d82 --- /dev/null +++ b/queue-2.6.34/mm-fix-corruption-of-hibernation-caused-by-reusing-swap-during-image-saving.patch @@ -0,0 +1,65 @@ +From 966cca029f739716fbcc8068b8c6dfe381f86fc3 Mon Sep 17 00:00:00 2001 +From: KAMEZAWA Hiroyuki +Date: Mon, 9 Aug 2010 17:20:09 -0700 +Subject: mm: fix corruption of hibernation caused by reusing swap during image saving + +From: KAMEZAWA Hiroyuki + +commit 966cca029f739716fbcc8068b8c6dfe381f86fc3 upstream. + +Since 2.6.31, swap_map[]'s refcounting was changed to show that a used +swap entry is just for swap-cache, can be reused. Then, while scanning +free entry in swap_map[], a swap entry may be able to be reclaimed and +reused. It was caused by commit c9e444103b5e7a5 ("mm: reuse unused swap +entry if necessary"). + +But this caused deta corruption at resume. The scenario is + +- Assume a clean-swap cache, but mapped. + +- at hibernation_snapshot[], clean-swap-cache is saved as + clean-swap-cache and swap_map[] is marked as SWAP_HAS_CACHE. + +- then, save_image() is called. And reuse SWAP_HAS_CACHE entry to save + image, and break the contents. + +After resume: + +- the memory reclaim runs and finds clean-not-referenced-swap-cache and + discards it because it's marked as clean. But here, the contents on + disk and swap-cache is inconsistent. + +Hance memory is corrupted. + +This patch avoids the bug by not reclaiming swap-entry during hibernation. +This is a quick fix for backporting. + +Signed-off-by: KAMEZAWA Hiroyuki +Cc: Rafael J. Wysocki +Reported-by: Ondreg Zary +Tested-by: Ondreg Zary +Tested-by: Andrea Gelmini +Acked-by: Hugh Dickins +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + mm/swapfile.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/mm/swapfile.c ++++ b/mm/swapfile.c +@@ -315,8 +315,10 @@ checks: + if (offset > si->highest_bit) + scan_base = offset = si->lowest_bit; + +- /* reuse swap entry of cache-only swap if not busy. */ +- if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) { ++ /* reuse swap entry of cache-only swap if not hibernation. */ ++ if (vm_swap_full() ++ && usage == SWAP_HAS_CACHE ++ && si->swap_map[offset] == SWAP_HAS_CACHE) { + int swap_was_freed; + spin_unlock(&swap_lock); + swap_was_freed = __try_to_reclaim_swap(si, offset); diff --git a/queue-2.6.34/pci-disable-msi-on-via-k8m800.patch b/queue-2.6.34/pci-disable-msi-on-via-k8m800.patch new file mode 100644 index 00000000000..a5f1755f3dc --- /dev/null +++ b/queue-2.6.34/pci-disable-msi-on-via-k8m800.patch @@ -0,0 +1,33 @@ +From 549e15611b4ac1de51ef0e0a79c2704f50a638a2 Mon Sep 17 00:00:00 2001 +From: Tejun Heo +Date: Sun, 23 May 2010 10:22:55 +0200 +Subject: PCI: disable MSI on VIA K8M800 + +From: Tejun Heo + +commit 549e15611b4ac1de51ef0e0a79c2704f50a638a2 upstream. + +MSI delivery from on-board ahci controller doesn't work on K8M800. At +this point, it's unclear whether the culprit is with the ahci +controller or the host bridge. Given the track record and considering +the rather minimal impact of MSI, disabling it seems reasonable. + +Signed-off-by: Tejun Heo +Reported-by: Rainer Hurtado Navarro +Signed-off-by: Jesse Barnes +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/pci/quirks.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/pci/quirks.c ++++ b/drivers/pci/quirks.c +@@ -2115,6 +2115,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AT + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi); + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi); ++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8380_0, quirk_disable_all_msi); + + /* Disable MSI on chipsets that are known to not support it */ + static void __devinit quirk_disable_msi(struct pci_dev *dev) diff --git a/queue-2.6.34/pci-do-not-run-nvidia-quirks-related-to-msi-with-msi-disabled.patch b/queue-2.6.34/pci-do-not-run-nvidia-quirks-related-to-msi-with-msi-disabled.patch new file mode 100644 index 00000000000..34bbf83cd1c --- /dev/null +++ b/queue-2.6.34/pci-do-not-run-nvidia-quirks-related-to-msi-with-msi-disabled.patch @@ -0,0 +1,38 @@ +From 3d2a531804d16cd8df6dbbb0429c6f143e756049 Mon Sep 17 00:00:00 2001 +From: Rafael J. Wysocki +Date: Fri, 23 Jul 2010 22:19:55 +0200 +Subject: PCI: Do not run NVidia quirks related to MSI with MSI disabled + +From: Rafael J. Wysocki + +commit 3d2a531804d16cd8df6dbbb0429c6f143e756049 upstream. + +There is no reason to run NVidia-specific quirks related to HT MSI +mappings with MSI disabled via pci=nomsi, so make +__nv_msi_ht_cap_quirk() return immediately in that case. + +This allows at least one machine to boot 100% of the time with +pci=nomsi (it still doesn't boot reliably without that). + +Addresses https://bugzilla.kernel.org/show_bug.cgi?id=16443 . + +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Jesse Barnes +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/pci/quirks.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/pci/quirks.c ++++ b/drivers/pci/quirks.c +@@ -2390,6 +2390,9 @@ static void __devinit __nv_msi_ht_cap_qu + int pos; + int found; + ++ if (!pci_msi_enabled()) ++ return; ++ + /* check if there is HT MSI cap or enabled on this device */ + found = ht_check_msi_mapping(dev); + diff --git a/queue-2.6.34/series b/queue-2.6.34/series index 943f179785e..c785dfdb06b 100644 --- a/queue-2.6.34/series +++ b/queue-2.6.34/series @@ -4,3 +4,17 @@ powerpc-fix-build-with-make-3.82.patch x86-kmmio-mmiotrace-fix-double-free-of-kmmio_fault_pages.patch x86-pci-use-host-bridge-_crs-info-on-asrock-alivesata2-glan.patch x86-add-memory-modify-constraints-to-xchg-and-cmpxchg.patch +staging-rt2870-add-usb-id-for-belkin-f6d4050-v2.patch +staging-line6-needs-to-select-snd_pcm.patch +staging-panel-prevent-double-calling-of-parport_release-fix-oops.patch +pci-do-not-run-nvidia-quirks-related-to-msi-with-msi-disabled.patch +pci-disable-msi-on-via-k8m800.patch +solos-pci-fix-race-condition-in-tasklet-rx-handling.patch +splice-fix-misuse-of-splice_f_nonblock.patch +char-nozomi-fix-tty-count-counting.patch +char-nozomi-set-tty-driver_data-appropriately.patch +mm-fix-corruption-of-hibernation-caused-by-reusing-swap-during-image-saving.patch +drivers-video-w100fb.c-ignore-void-return-value-fix-build-failure.patch +iwlwifi-fix-tx-tracer.patch +ide-cd-do-not-access-completed-requests-in-the-irq-handler.patch +md-raid10-fix-deadlock-with-unaligned-read-during-resync.patch diff --git a/queue-2.6.34/solos-pci-fix-race-condition-in-tasklet-rx-handling.patch b/queue-2.6.34/solos-pci-fix-race-condition-in-tasklet-rx-handling.patch new file mode 100644 index 00000000000..5bdf353ffd1 --- /dev/null +++ b/queue-2.6.34/solos-pci-fix-race-condition-in-tasklet-rx-handling.patch @@ -0,0 +1,66 @@ +From 1f6ea6e511e5ec730d8e88651da1b7b6e8fd1333 Mon Sep 17 00:00:00 2001 +From: David Woodhouse +Date: Sat, 7 Aug 2010 23:02:59 -0700 +Subject: solos-pci: Fix race condition in tasklet RX handling + +From: David Woodhouse + +commit 1f6ea6e511e5ec730d8e88651da1b7b6e8fd1333 upstream. + +We were seeing faults in the solos-pci receive tasklet when packets +arrived for a VCC which was currently being closed: + +[18842.727906] EIP: [] br2684_push+0x19/0x234 [br2684] SS:ESP 0068:dfb89d14 + +[18845.090712] [] ? do_page_fault+0x0/0x2e1 +[18845.120042] [] ? br2684_push+0x19/0x234 [br2684] +[18845.153530] [] solos_bh+0x28b/0x7c8 [solos_pci] +[18845.186488] [] ? solos_irq+0x2d/0x51 [solos_pci] +[18845.219960] [] ? handle_irq+0x3b/0x48 +[18845.247732] [] ? irq_exit+0x34/0x57 +[18845.274437] [] tasklet_action+0x42/0x69 +[18845.303247] [] __do_softirq+0x8e/0x129 +[18845.331540] [] do_softirq+0x25/0x2a +[18845.358274] [] _local_bh_enable_ip+0x5e/0x6a +[18845.389677] [] local_bh_enable+0xb/0xe +[18845.417944] [] ppp_unregister_channel+0x32/0xbb [ppp_generic] +[18845.458193] [] pppox_unbind_sock+0x18/0x1f [pppox] + +This patch uses an RCU-inspired approach to fix it. In the RX tasklet's +find_vcc() function we first refuse to use a VCC which already has the +ATM_VF_READY bit cleared. And in the VCC close function, we synchronise +with the tasklet to ensure that it can't still be using the VCC before +we continue and allow the VCC to be destroyed. + +Signed-off-by: David Woodhouse +Tested-by: Nathan Williams +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/atm/solos-pci.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +--- a/drivers/atm/solos-pci.c ++++ b/drivers/atm/solos-pci.c +@@ -781,7 +781,8 @@ static struct atm_vcc *find_vcc(struct a + sk_for_each(s, node, head) { + vcc = atm_sk(s); + if (vcc->dev == dev && vcc->vci == vci && +- vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE) ++ vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE && ++ test_bit(ATM_VF_READY, &vcc->flags)) + goto out; + } + vcc = NULL; +@@ -907,6 +908,10 @@ static void pclose(struct atm_vcc *vcc) + clear_bit(ATM_VF_ADDR, &vcc->flags); + clear_bit(ATM_VF_READY, &vcc->flags); + ++ /* Hold up vcc_destroy_socket() (our caller) until solos_bh() in the ++ tasklet has finished processing any incoming packets (and, more to ++ the point, using the vcc pointer). */ ++ tasklet_unlock_wait(&card->tlet); + return; + } + diff --git a/queue-2.6.34/splice-fix-misuse-of-splice_f_nonblock.patch b/queue-2.6.34/splice-fix-misuse-of-splice_f_nonblock.patch new file mode 100644 index 00000000000..3988de62c34 --- /dev/null +++ b/queue-2.6.34/splice-fix-misuse-of-splice_f_nonblock.patch @@ -0,0 +1,50 @@ +From 6965031d331a642e31278fa1b5bd47f372ffdd5d Mon Sep 17 00:00:00 2001 +From: Miklos Szeredi +Date: Tue, 3 Aug 2010 12:48:50 +0200 +Subject: splice: fix misuse of SPLICE_F_NONBLOCK + +From: Miklos Szeredi + +commit 6965031d331a642e31278fa1b5bd47f372ffdd5d upstream. + +SPLICE_F_NONBLOCK is clearly documented to only affect blocking on the +pipe. In __generic_file_splice_read(), however, it causes an EAGAIN +if the page is currently being read. + +This makes it impossible to write an application that only wants +failure if the pipe is full. For example if the same process is +handling both ends of a pipe and isn't otherwise able to determine +whether a splice to the pipe will fill it or not. + +We could make the read non-blocking on O_NONBLOCK or some other splice +flag, but for now this is the simplest fix. + +Signed-off-by: Miklos Szeredi +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + fs/splice.c | 12 +----------- + 1 file changed, 1 insertion(+), 11 deletions(-) + +--- a/fs/splice.c ++++ b/fs/splice.c +@@ -366,17 +366,7 @@ __generic_file_splice_read(struct file * + * If the page isn't uptodate, we may need to start io on it + */ + if (!PageUptodate(page)) { +- /* +- * If in nonblock mode then dont block on waiting +- * for an in-flight io page +- */ +- if (flags & SPLICE_F_NONBLOCK) { +- if (!trylock_page(page)) { +- error = -EAGAIN; +- break; +- } +- } else +- lock_page(page); ++ lock_page(page); + + /* + * Page was truncated, or invalidated by the diff --git a/queue-2.6.34/staging-line6-needs-to-select-snd_pcm.patch b/queue-2.6.34/staging-line6-needs-to-select-snd_pcm.patch new file mode 100644 index 00000000000..5497bb2e2c9 --- /dev/null +++ b/queue-2.6.34/staging-line6-needs-to-select-snd_pcm.patch @@ -0,0 +1,39 @@ +From e928c077e5cdcd72ee762125b37232aec1ff49f3 Mon Sep 17 00:00:00 2001 +From: Randy Dunlap +Date: Tue, 27 Jul 2010 12:21:19 -0700 +Subject: Staging: line6: needs to select SND_PCM + +From: Randy Dunlap + +commit e928c077e5cdcd72ee762125b37232aec1ff49f3 upstream. + +line6 uses snd_pcm*() functions, so it should select SND_PCM. + +ERROR: "snd_pcm_period_elapsed" [drivers/staging/line6/line6usb.ko] undefined! +ERROR: "snd_pcm_set_ops" [drivers/staging/line6/line6usb.ko] undefined! +ERROR: "snd_pcm_lib_free_pages" [drivers/staging/line6/line6usb.ko] undefined! +ERROR: "snd_pcm_lib_ioctl" [drivers/staging/line6/line6usb.ko] undefined! +ERROR: "snd_pcm_lib_malloc_pages" [drivers/staging/line6/line6usb.ko] undefined! +ERROR: "snd_pcm_hw_constraint_ratdens" [drivers/staging/line6/line6usb.ko] undefined! +ERROR: "snd_pcm_format_physical_width" [drivers/staging/line6/line6usb.ko] undefined! +ERROR: "snd_pcm_lib_preallocate_pages_for_all" [drivers/staging/line6/line6usb.ko] undefined! +ERROR: "snd_pcm_new" [drivers/staging/line6/line6usb.ko] undefined! + +Signed-off-by: Randy Dunlap +Cc: Markus Grabner +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/line6/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/staging/line6/Kconfig ++++ b/drivers/staging/line6/Kconfig +@@ -2,6 +2,7 @@ config LINE6_USB + tristate "Line6 USB support" + depends on USB && SND + select SND_RAWMIDI ++ select SND_PCM + help + This is a driver for the guitar amp, cab, and effects modeller + PODxt Pro by Line6 (and similar devices), supporting the diff --git a/queue-2.6.34/staging-panel-prevent-double-calling-of-parport_release-fix-oops.patch b/queue-2.6.34/staging-panel-prevent-double-calling-of-parport_release-fix-oops.patch new file mode 100644 index 00000000000..4277c990c51 --- /dev/null +++ b/queue-2.6.34/staging-panel-prevent-double-calling-of-parport_release-fix-oops.patch @@ -0,0 +1,43 @@ +From 060132ae42cce3f9d2fd34d9a17b98362b44b9f9 Mon Sep 17 00:00:00 2001 +From: Peter Huewe +Date: Wed, 7 Jul 2010 04:52:16 +0200 +Subject: Staging: panel: Prevent double-calling of parport_release - fix oops. + +From: Peter Huewe + +commit 060132ae42cce3f9d2fd34d9a17b98362b44b9f9 upstream. + +This patch prevents the code from calling parport_release and +parport_unregister_device twice with the same arguments - and thus fixes an oops. + +Rationale: +After the first call the parport is already released and the +handle isn't valid anymore and calling parport_release and +parport_unregister_device twice isn't a good idea. + +Signed-off-by: Peter Huewe +Acked-by: Willy Tarreau +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/panel/panel.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/staging/panel/panel.c ++++ b/drivers/staging/panel/panel.c +@@ -2180,6 +2180,7 @@ int panel_init(void) + if (pprt) { + parport_release(pprt); + parport_unregister_device(pprt); ++ pprt = NULL; + } + parport_unregister_driver(&panel_driver); + printk(KERN_ERR "Panel driver version " PANEL_VERSION +@@ -2229,6 +2230,7 @@ static void __exit panel_cleanup_module( + /* TODO: free all input signals */ + parport_release(pprt); + parport_unregister_device(pprt); ++ pprt = NULL; + } + parport_unregister_driver(&panel_driver); + } diff --git a/queue-2.6.34/staging-rt2870-add-usb-id-for-belkin-f6d4050-v2.patch b/queue-2.6.34/staging-rt2870-add-usb-id-for-belkin-f6d4050-v2.patch new file mode 100644 index 00000000000..907bd9cbab9 --- /dev/null +++ b/queue-2.6.34/staging-rt2870-add-usb-id-for-belkin-f6d4050-v2.patch @@ -0,0 +1,29 @@ +From 5d92fe3387d086fc2f10426fbdb6b86d6cce5a47 Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Sun, 25 Jul 2010 16:14:53 -0500 +Subject: staging: rt2870: Add USB ID for Belkin F6D4050 v2 + +From: Larry Finger + +commit 5d92fe3387d086fc2f10426fbdb6b86d6cce5a47 upstream. + +Device missing from current tables. + +Signed-off-by: Larry Finger +Tested-by: Rod Huffaker +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/rt2860/usb_main_dev.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -64,6 +64,7 @@ struct usb_device_id rtusb_usb_id[] = { + {USB_DEVICE(0x14B2, 0x3C07)}, /* AL */ + {USB_DEVICE(0x050D, 0x8053)}, /* Belkin */ + {USB_DEVICE(0x050D, 0x825B)}, /* Belkin */ ++ {USB_DEVICE(0x050D, 0x935B)}, /* Belkin F6D4050 v2 */ + {USB_DEVICE(0x14B2, 0x3C23)}, /* Airlink */ + {USB_DEVICE(0x14B2, 0x3C27)}, /* Airlink */ + {USB_DEVICE(0x07AA, 0x002F)}, /* Corega */