]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
start of 2.6.16.12 review cycle
authorGreg Kroah-Hartman <gregkh@suse.de>
Fri, 28 Apr 2006 00:25:17 +0000 (17:25 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 28 Apr 2006 00:25:17 +0000 (17:25 -0700)
26 files changed:
review-2.6.16/MIPS-0001.patch [moved from queue-2.6.16/MIPS-0001.patch with 100% similarity]
review-2.6.16/MIPS-0002.patch [moved from queue-2.6.16/MIPS-0002.patch with 100% similarity]
review-2.6.16/MIPS-0003.patch [moved from queue-2.6.16/MIPS-0003.patch with 100% similarity]
review-2.6.16/MIPS-0004.patch [moved from queue-2.6.16/MIPS-0004.patch with 100% similarity]
review-2.6.16/alpha-strncpy-fix.patch [moved from queue-2.6.16/alpha-strncpy-fix.patch with 100% similarity]
review-2.6.16/altix-snsc-duplicate-kobject-fix.patch [moved from queue-2.6.16/altix-snsc-duplicate-kobject-fix.patch with 100% similarity]
review-2.6.16/cs5535_gpio.c-call-cdev_del-during-module_exit-to-unmap-kobject-references-and-other-cleanups.patch [moved from queue-2.6.16/cs5535_gpio.c-call-cdev_del-during-module_exit-to-unmap-kobject-references-and-other-cleanups.patch with 100% similarity]
review-2.6.16/cxusb-bluebird-bug-fix-power-down-corrupts-frontend.patch [moved from queue-2.6.16/cxusb-bluebird-bug-fix-power-down-corrupts-frontend.patch with 100% similarity]
review-2.6.16/dm-flush-queue-EINTR.patch [moved from queue-2.6.16/dm-flush-queue-EINTR.patch with 100% similarity]
review-2.6.16/dm-snapshot-fix-kcopyd-destructor.patch [moved from queue-2.6.16/dm-snapshot-fix-kcopyd-destructor.patch with 100% similarity]
review-2.6.16/fix-reiserfs-deadlock.patch [moved from queue-2.6.16/fix-reiserfs-deadlock.patch with 100% similarity]
review-2.6.16/fix-saa7129-support-in-saa7127-module-for-pvr350-tv-out.patch [moved from queue-2.6.16/fix-saa7129-support-in-saa7127-module-for-pvr350-tv-out.patch with 100% similarity]
review-2.6.16/for_each_possible_cpu.patch [moved from queue-2.6.16/for_each_possible_cpu.patch with 100% similarity]
review-2.6.16/get_dvb_firmware-download-nxt2002-firmware-from-new-driver-location.patch [moved from queue-2.6.16/get_dvb_firmware-download-nxt2002-firmware-from-new-driver-location.patch with 100% similarity]
review-2.6.16/lsm-add-missing-hook-to-do_compat_readv_writev.patch [moved from queue-2.6.16/lsm-add-missing-hook-to-do_compat_readv_writev.patch with 100% similarity]
review-2.6.16/make-vm86-call-audit_syscall_exit.patch [moved from queue-2.6.16/make-vm86-call-audit_syscall_exit.patch with 100% similarity]
review-2.6.16/net-e1000-update-truesize-with-the-length-of-the-packet-for-packet-split.patch [moved from queue-2.6.16/net-e1000-update-truesize-with-the-length-of-the-packet-for-packet-split.patch with 100% similarity]
review-2.6.16/send.mbox [new file with mode: 0644]
review-2.6.16/series [moved from queue-2.6.16/series with 100% similarity]
review-2.6.16/simplify-proc-devices-and-fix-early-termination-regression.patch [moved from queue-2.6.16/simplify-proc-devices-and-fix-early-termination-regression.patch with 100% similarity]
review-2.6.16/sonypi-correct-detection-of-new-ich7-based-laptops.patch [moved from queue-2.6.16/sonypi-correct-detection-of-new-ich7-based-laptops.patch with 100% similarity]
review-2.6.16/tipar-oops-fix.patch [moved from queue-2.6.16/tipar-oops-fix.patch with 100% similarity]
review-2.6.16/usb-fix-array-overrun-in-drivers-usb-serial-option.c.patch [moved from queue-2.6.16/usb-fix-array-overrun-in-drivers-usb-serial-option.c.patch with 100% similarity]
review-2.6.16/x86-pae-fix-pte_clear-for-the-4gb-ram-case.patch [moved from queue-2.6.16/x86-pae-fix-pte_clear-for-the-4gb-ram-case.patch with 100% similarity]
review-2.6.16/x86_64-fix-a-race-in-the-free_iommu-path.patch [moved from queue-2.6.16/x86_64-fix-a-race-in-the-free_iommu-path.patch with 100% similarity]
review-2.6.16/x86_64-pass-32-to-the-assembler-when-compiling-the-32bit-vsyscall-pages.patch [moved from queue-2.6.16/x86_64-pass-32-to-the-assembler-when-compiling-the-32bit-vsyscall-pages.patch with 100% similarity]

diff --git a/review-2.6.16/send.mbox b/review-2.6.16/send.mbox
new file mode 100644 (file)
index 0000000..1353c25
--- /dev/null
@@ -0,0 +1,2389 @@
+From greg@quad.kroah.org Thu Apr 27 17:13:22 2006
+Message-Id: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:26 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk
+Subject: [patch 00/24] -stable review
+Content-Length: 734
+Lines: 17
+
+This is the start of the stable review cycle for the 2.6.16.12 release.
+There are 24 patches in this series, all will be posted as a response to
+this one.  If anyone has any issues with these being applied, please let
+us know.  If anyone is a maintainer of the proper subsystem, and wants
+to add a signed-off-by: line to the patch, please respond with it.
+
+These patches are sent out with a number of different people on the Cc:
+line.  If you wish to be a reviewer, please email stable@kernel.org to
+add your name to the list.  If you want to be off the reviewer list,
+also email us.
+
+Responses should be made by Sunday, April 30 00:00:00 UTC.  Anything
+received after that time, might be too late.
+
+thanks,
+
+the -stable release team
+
+From greg@quad.kroah.org Thu Apr 27 17:13:22 2006
+Message-Id: <20060428001322.190063000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:27 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ git-commits-head@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Arnaud MAZIN <arnaud.mazin@gmail.com>,
+ Stelian Pop <stelian@poppies.net>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 01/24] sonypi: correct detection of new ICH7-based laptops
+Content-Disposition: inline; filename=sonypi-correct-detection-of-new-ich7-based-laptops.patch
+Content-Length: 1132
+Lines: 34
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Arnaud MAZIN <arnaud.mazin@gmail.com>
+
+[PATCH] sonypi: correct detection of new ICH7-based laptops
+
+Add a test to detect the ICH7 based Core Duo SONY laptops (such as the SZ1)
+as type3 models.
+
+Signed-off-by: Arnaud MAZIN <arnaud.mazin@gmail.com>
+Acked-by: Stelian Pop <stelian@poppies.net>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/sonypi.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- linux-2.6.16.11.orig/drivers/char/sonypi.c
++++ linux-2.6.16.11/drivers/char/sonypi.c
+@@ -1341,6 +1341,9 @@ static int __devinit sonypi_probe(struct
+       else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
+                                         PCI_DEVICE_ID_INTEL_ICH6_1, NULL)))
+               sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3;
++      else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
++                                        PCI_DEVICE_ID_INTEL_ICH7_1, NULL)))
++              sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3;
+       else
+               sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE2;
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:22 2006
+Message-Id: <20060428001322.331437000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:28 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ git-commits-head@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Thayumanavar Sachithanantham <thayumk@gmail.com>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 02/24] cs5535_gpio.c: call cdev_del() during module_exit to unmap kobject references and other cleanups
+Content-Disposition: inline; filename=cs5535_gpio.c-call-cdev_del-during-module_exit-to-unmap-kobject-references-and-other-cleanups.patch
+Content-Length: 1422
+Lines: 41
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Thayumanavar Sachithanantham <thayumk@gmail.com>
+
+[PATCH] cs5535_gpio.c: call cdev_del() during module_exit to unmap kobject references and other cleanups
+
+During module unloading, cdev_del() must be called to unmap cdev related
+kobject references and other cleanups(such as inode->i_cdev being set to
+NULL) which prevents the OOPS upon subsequent loading, usage and unloading
+of modules(as seen in the mail thread
+http://marc.theaimsgroup.com/?l=linux-kernel&m=114533640609018&w=2).
+
+Also, remove unneeded test of gpio_base.
+
+Signed-off-by: Thayumanavar Sachithanantham <thayumk@gmail.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/cs5535_gpio.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- linux-2.6.16.11.orig/drivers/char/cs5535_gpio.c
++++ linux-2.6.16.11/drivers/char/cs5535_gpio.c
+@@ -241,9 +241,10 @@ static int __init cs5535_gpio_init(void)
+ static void __exit cs5535_gpio_cleanup(void)
+ {
+       dev_t dev_id = MKDEV(major, 0);
++
++      cdev_del(&cs5535_gpio_cdev);
+       unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
+-      if (gpio_base != 0)
+-              release_region(gpio_base, CS5535_GPIO_SIZE);
++      release_region(gpio_base, CS5535_GPIO_SIZE);
+ }
+ module_init(cs5535_gpio_init);
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:22 2006
+Message-Id: <20060428001322.474436000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:29 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jason Baron <jbaron@redhat.com>,
+ Al Viro <viro@zeniv.linux.org.uk>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 03/24] make vm86 call audit_syscall_exit
+Content-Disposition: inline; filename=make-vm86-call-audit_syscall_exit.patch
+Content-Length: 3573
+Lines: 106
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+hi,
+
+The motivation behind the patch below was to address messages in
+/var/log/messages such as:
+
+Jan 31 10:54:15 mets kernel: audit(:0): major=252 name_count=0: freeing
+multiple contexts (1)
+Jan 31 10:54:15 mets kernel: audit(:0): major=113 name_count=0: freeing
+multiple contexts (2)
+
+I can reproduce by running 'get-edid' from:
+http://john.fremlin.de/programs/linux/read-edid/.
+
+These messages come about in the log b/c the vm86 calls do not exit via
+the normal system call exit paths and thus do not call
+'audit_syscall_exit'. The next system call will then free the context for
+itself and for the vm86 context, thus generating the above messages. This
+patch addresses the issue by simply adding a call to 'audit_syscall_exit'
+from the vm86 code.
+
+Besides fixing the above error messages the patch also now allows vm86
+system calls to become auditable. This is useful since strace does not
+appear to properly record the return values from sys_vm86.
+
+I think this patch is also a step in the right direction in terms of
+cleaning up some core auditing code. If we can correct any other paths
+that do not properly call the audit exit and entries points, then we can
+also eliminate the notion of context chaining.
+
+I've tested this patch by verifying that the log messages no longer
+appear, and that the audit records for sys_vm86 appear to be correct.
+Also, 'read_edid' produces itentical output.
+
+thanks,
+
+-Jason
+
+Signed-off-by: Jason Baron <jbaron@redhat.com>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+---
+ arch/i386/kernel/vm86.c |   12 ++++++++++--
+ kernel/auditsc.c        |    5 -----
+ 2 files changed, 10 insertions(+), 7 deletions(-)
+
+--- linux-2.6.16.11.orig/arch/i386/kernel/vm86.c
++++ linux-2.6.16.11/arch/i386/kernel/vm86.c
+@@ -43,6 +43,7 @@
+ #include <linux/smp_lock.h>
+ #include <linux/highmem.h>
+ #include <linux/ptrace.h>
++#include <linux/audit.h>
+ #include <asm/uaccess.h>
+ #include <asm/io.h>
+@@ -252,6 +253,7 @@ out:
+ static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk)
+ {
+       struct tss_struct *tss;
++      long eax;
+ /*
+  * make sure the vm86() system call doesn't try to do anything silly
+  */
+@@ -305,13 +307,19 @@ static void do_sys_vm86(struct kernel_vm
+       tsk->thread.screen_bitmap = info->screen_bitmap;
+       if (info->flags & VM86_SCREEN_BITMAP)
+               mark_screen_rdonly(tsk->mm);
++      __asm__ __volatile__("xorl %eax,%eax; movl %eax,%fs; movl %eax,%gs\n\t");
++      __asm__ __volatile__("movl %%eax, %0\n" :"=r"(eax));
++
++      /*call audit_syscall_exit since we do not exit via the normal paths */
++      if (unlikely(current->audit_context))
++              audit_syscall_exit(current, AUDITSC_RESULT(eax), eax);
++
+       __asm__ __volatile__(
+-              "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs\n\t"
+               "movl %0,%%esp\n\t"
+               "movl %1,%%ebp\n\t"
+               "jmp resume_userspace"
+               : /* no outputs */
+-              :"r" (&info->regs), "r" (task_thread_info(tsk)) : "ax");
++              :"r" (&info->regs), "r" (task_thread_info(tsk)));
+       /* we never return here */
+ }
+--- linux-2.6.16.11.orig/kernel/auditsc.c
++++ linux-2.6.16.11/kernel/auditsc.c
+@@ -966,11 +966,6 @@ void audit_syscall_entry(struct task_str
+       if (context->in_syscall) {
+               struct audit_context *newctx;
+-#if defined(__NR_vm86) && defined(__NR_vm86old)
+-              /* vm86 mode should only be entered once */
+-              if (major == __NR_vm86 || major == __NR_vm86old)
+-                      return;
+-#endif
+ #if AUDIT_DEBUG
+               printk(KERN_ERR
+                      "audit(:%d) pid=%d in syscall=%d;"
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:22 2006
+Message-Id: <20060428001322.615019000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:30 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ brian.b@hp.com,
+ Andi Kleen <ak@suse.de>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 04/24] x86_64: Pass -32 to the assembler when compiling the 32bit vsyscall pages
+Content-Disposition: inline; filename=x86_64-pass-32-to-the-assembler-when-compiling-the-32bit-vsyscall-pages.patch
+Content-Length: 1070
+Lines: 35
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+This quietens warnings and actually fixes a bug. The unwind tables would
+come out wrong without -32, causing pthread cancellation during them 
+to crash in the gcc runtime.
+
+The problem seems to only happen with newer binutils
+(it doesn't happen with 2.16.91.0.2 but happens wit 2.16.91.0.5) 
+
+Thanks to Brian Baker @ HP for test case and initial analysis.
+
+Cc: brian.b@hp.com
+
+Signed-off-by: Andi Kleen <ak@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ arch/x86_64/ia32/Makefile |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.16.11.orig/arch/x86_64/ia32/Makefile
++++ linux-2.6.16.11/arch/x86_64/ia32/Makefile
+@@ -27,5 +27,5 @@ $(obj)/vsyscall-sysenter.so $(obj)/vsysc
+ $(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
+       $(call if_changed,syscall)
+-AFLAGS_vsyscall-sysenter.o = -m32
+-AFLAGS_vsyscall-syscall.o = -m32
++AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32
++AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:22 2006
+Message-Id: <20060428001322.752580000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:31 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ mikew@google.com,
+ Andi Kleen <ak@suse.de>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 05/24] x86_64: Fix a race in the free_iommu path.
+Content-Disposition: inline; filename=x86_64-fix-a-race-in-the-free_iommu-path.patch
+Content-Length: 1308
+Lines: 40
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Mike Waychison <mikew@google.com>
+
+We do this by removing a micro-optimization that tries to avoid grabbing
+the iommu_bitmap_lock spinlock and using a bus-locked operation.
+
+This still races with other simultaneous alloc_iommu or free_iommu(size
+> 1) which both use bus-unlocked operations. 
+
+The end result of this race is eventually ending
+up with an iommu_gart_bitmap that has bits errornously set all over,
+making large contiguous iommu space allocations fail with 'PCI-DMA:
+Out of IOMMU space'.
+
+Signed-off-by: Mike Waychison <mikew@google.com>
+Signed-off-by: Andi Kleen <ak@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86_64/kernel/pci-gart.c |    4 ----
+ 1 file changed, 4 deletions(-)
+
+--- linux-2.6.16.11.orig/arch/x86_64/kernel/pci-gart.c
++++ linux-2.6.16.11/arch/x86_64/kernel/pci-gart.c
+@@ -114,10 +114,6 @@ static unsigned long alloc_iommu(int siz
+ static void free_iommu(unsigned long offset, int size)
+ { 
+       unsigned long flags;
+-      if (size == 1) { 
+-              clear_bit(offset, iommu_gart_bitmap); 
+-              return;
+-      }
+       spin_lock_irqsave(&iommu_bitmap_lock, flags);
+       __clear_bit_string(iommu_gart_bitmap, offset, size);
+       spin_unlock_irqrestore(&iommu_bitmap_lock, flags);
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:23 2006
+Message-Id: <20060428001322.901074000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:32 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eric Sesterhenn <snakebyte@gmx.de>,
+ smurf@smurf.noris.de,
+ Adrian Bunk <bunk@stusta.de>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 06/24] USB: fix array overrun in drivers/usb/serial/option.c
+Content-Disposition: inline; filename=usb-fix-array-overrun-in-drivers-usb-serial-option.c.patch
+Content-Length: 1404
+Lines: 40
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Eric Sesterhenn <snakebyte@gmx.de>
+
+since the arrays are declared as in_urbs[N_IN_URB]
+and out_urbs[N_OUT_URB] both for loops, go one
+over the end of the array. This fixes coverity id #555
+
+This patch was already included in Linus' tree.
+
+Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de>
+Signed-off-by: Adrian Bunk <bunk@stusta.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.16.11.orig/drivers/usb/serial/option.c
++++ linux-2.6.16.11/drivers/usb/serial/option.c
+@@ -582,14 +582,14 @@ static void option_setup_urbs(struct usb
+       portdata = usb_get_serial_port_data(port);
+       /* Do indat endpoints first */
+-      for (j = 0; j <= N_IN_URB; ++j) {
++      for (j = 0; j < N_IN_URB; ++j) {
+               portdata->in_urbs[j] = option_setup_urb (serial,
+                   port->bulk_in_endpointAddress, USB_DIR_IN, port,
+                   portdata->in_buffer[j], IN_BUFLEN, option_indat_callback);
+       }
+       /* outdat endpoints */
+-      for (j = 0; j <= N_OUT_URB; ++j) {
++      for (j = 0; j < N_OUT_URB; ++j) {
+               portdata->out_urbs[j] = option_setup_urb (serial,
+                   port->bulk_out_endpointAddress, USB_DIR_OUT, port,
+                   portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback);
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:23 2006
+Message-Id: <20060428001323.038996000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:33 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ dsd@gentoo.org,
+ mm-commits@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 07/24] tipar oops fix
+Content-Disposition: inline; filename=tipar-oops-fix.patch
+Content-Length: 1036
+Lines: 33
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Daniel Drake <dsd@gentoo.org>
+
+If compiled into the kernel, parport_register_driver() is called before the
+parport driver has been initalised.
+
+This means that it is expected that tp_count is 0 after the
+parport_register_driver() call() - tipar's attach function will not be
+called until later during bootup.
+
+Signed-off-by: Daniel Drake <dsd@gentoo.org>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/tipar.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.16.11.orig/drivers/char/tipar.c
++++ linux-2.6.16.11/drivers/char/tipar.c
+@@ -515,7 +515,7 @@ tipar_init_module(void)
+               err = PTR_ERR(tipar_class);
+               goto out_chrdev;
+       }
+-      if (parport_register_driver(&tipar_driver) || tp_count == 0) {
++      if (parport_register_driver(&tipar_driver)) {
+               printk(KERN_ERR "tipar: unable to register with parport\n");
+               err = -EIO;
+               goto out_class;
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:23 2006
+Message-Id: <20060428001323.183224000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:34 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 08/24] get_dvb_firmware: download nxt2002 firmware from new driver location
+Content-Disposition: inline; filename=get_dvb_firmware-download-nxt2002-firmware-from-new-driver-location.patch
+Content-Length: 1403
+Lines: 44
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Michael Krufky <mkrufky@linuxtv.org>
+
+BBTI has updated their driver, and removed the old one from their website.
+This patch updates the get_dvb_firmware script to download the firmware
+from the new driver location.
+
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ Documentation/dvb/get_dvb_firmware |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- linux-2.6.16.11.orig/Documentation/dvb/get_dvb_firmware
++++ linux-2.6.16.11/Documentation/dvb/get_dvb_firmware
+@@ -240,9 +240,9 @@ sub dibusb {
+ }
+ sub nxt2002 {
+-    my $sourcefile = "Broadband4PC_4_2_11.zip";
++    my $sourcefile = "Technisat_DVB-PC_4_4_COMPACT.zip";
+     my $url = "http://www.bbti.us/download/windows/$sourcefile";
+-    my $hash = "c6d2ea47a8f456d887ada0cfb718ff2a";
++    my $hash = "476befae8c7c1bb9648954060b1eec1f";
+     my $outfile = "dvb-fe-nxt2002.fw";
+     my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
+@@ -250,8 +250,8 @@ sub nxt2002 {
+     wgetfile($sourcefile, $url);
+     unzip($sourcefile, $tmpdir);
+-    verify("$tmpdir/SkyNETU.sys", $hash);
+-    extract("$tmpdir/SkyNETU.sys", 375832, 5908, $outfile);
++    verify("$tmpdir/SkyNET.sys", $hash);
++    extract("$tmpdir/SkyNET.sys", 331624, 5908, $outfile);
+     $outfile;
+ }
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:23 2006
+Message-Id: <20060428001323.317460000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:35 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ norbert@tretkowski.de,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 09/24] for_each_possible_cpu
+Content-Disposition: inline; filename=for_each_possible_cpu.patch
+Content-Length: 863
+Lines: 29
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Andrew Morton <akpm@osdl.org>
+
+Backport for_each_possible_cpu() into 2.6.16.  Fixes the alpha build, and any
+future occurrences.
+
+
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/cpumask.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.16.11.orig/include/linux/cpumask.h
++++ linux-2.6.16.11/include/linux/cpumask.h
+@@ -408,6 +408,7 @@ extern cpumask_t cpu_present_map;
+ })
+ #define for_each_cpu(cpu)       for_each_cpu_mask((cpu), cpu_possible_map)
++#define for_each_possible_cpu(cpu)  for_each_cpu_mask((cpu), cpu_possible_map)
+ #define for_each_online_cpu(cpu)  for_each_cpu_mask((cpu), cpu_online_map)
+ #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map)
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:23 2006
+Message-Id: <20060428001323.459743000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:36 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jose Alberto Reguero <jareguero@telefonica.net>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>,
+ Hans Verkuil <hverkuil@xs4all.nl>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 10/24] fix saa7129 support in saa7127 module for pvr350 tv out
+Content-Disposition: inline; filename=fix-saa7129-support-in-saa7127-module-for-pvr350-tv-out.patch
+Content-Length: 1013
+Lines: 32
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jose Alberto Reguero <jareguero@telefonica.net>
+
+This patch fixes tv-out support for the newer model of
+the pvr350, which has a saa7129 instead of a saa7127
+video encoder.
+
+Signed-off-by: Jose Alberto Reguero <jareguero@telefonica.net>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/media/video/saa7127.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.16.11.orig/drivers/media/video/saa7127.c
++++ linux-2.6.16.11/drivers/media/video/saa7127.c
+@@ -141,6 +141,7 @@ struct i2c_reg_value {
+ static const struct i2c_reg_value saa7129_init_config_extra[] = {
+       { SAA7127_REG_OUTPUT_PORT_CONTROL,              0x38 },
+       { SAA7127_REG_VTRIG,                            0xfa },
++      { 0, 0 }
+ };
+ static const struct i2c_reg_value saa7127_init_config_common[] = {
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:23 2006
+Message-Id: <20060428001323.610742000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:37 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 11/24] cxusb-bluebird: bug-fix: power down corrupts frontend
+Content-Disposition: inline; filename=cxusb-bluebird-bug-fix-power-down-corrupts-frontend.patch
+Content-Length: 2736
+Lines: 77
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Michael Krufky <mkrufky@linuxtv.org>
+
+This patch prevents a bug where the frontend is unable to tune after waking
+from powered down state. Now, the device remains powered on until it is
+disconnected, just like the windows driver. It seems that the bluebird
+firmware is unable to successfully handle tuning after a powered down state.
+
+This patch fixes all of the FusionHDTV Bluebird USB2 devices. The Medion
+MD95700 will still behave as before, since it was unaffected by this bug.
+
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/media/dvb/dvb-usb/cxusb.c |   17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+--- linux-2.6.16.11.orig/drivers/media/dvb/dvb-usb/cxusb.c
++++ linux-2.6.16.11/drivers/media/dvb/dvb-usb/cxusb.c
+@@ -149,6 +149,15 @@ static int cxusb_power_ctrl(struct dvb_u
+               return cxusb_ctrl_msg(d, CMD_POWER_OFF, &b, 1, NULL, 0);
+ }
++static int cxusb_bluebird_power_ctrl(struct dvb_usb_device *d, int onoff)
++{
++      u8 b = 0;
++      if (onoff)
++              return cxusb_ctrl_msg(d, CMD_POWER_ON, &b, 1, NULL, 0);
++      else
++              return 0;
++}
++
+ static int cxusb_streaming_ctrl(struct dvb_usb_device *d, int onoff)
+ {
+       u8 buf[2] = { 0x03, 0x00 };
+@@ -505,7 +514,7 @@ static struct dvb_usb_properties cxusb_b
+       .size_of_priv     = sizeof(struct cxusb_state),
+       .streaming_ctrl   = cxusb_streaming_ctrl,
+-      .power_ctrl       = cxusb_power_ctrl,
++      .power_ctrl       = cxusb_bluebird_power_ctrl,
+       .frontend_attach  = cxusb_lgdt3303_frontend_attach,
+       .tuner_attach     = cxusb_lgh064f_tuner_attach,
+@@ -545,7 +554,7 @@ static struct dvb_usb_properties cxusb_b
+       .size_of_priv     = sizeof(struct cxusb_state),
+       .streaming_ctrl   = cxusb_streaming_ctrl,
+-      .power_ctrl       = cxusb_power_ctrl,
++      .power_ctrl       = cxusb_bluebird_power_ctrl,
+       .frontend_attach  = cxusb_dee1601_frontend_attach,
+       .tuner_attach     = cxusb_dee1601_tuner_attach,
+@@ -594,7 +603,7 @@ static struct dvb_usb_properties cxusb_b
+       .size_of_priv     = sizeof(struct cxusb_state),
+       .streaming_ctrl   = cxusb_streaming_ctrl,
+-      .power_ctrl       = cxusb_power_ctrl,
++      .power_ctrl       = cxusb_bluebird_power_ctrl,
+       .frontend_attach  = cxusb_mt352_frontend_attach,
+       .tuner_attach     = cxusb_lgz201_tuner_attach,
+@@ -634,7 +643,7 @@ static struct dvb_usb_properties cxusb_b
+       .size_of_priv     = sizeof(struct cxusb_state),
+       .streaming_ctrl   = cxusb_streaming_ctrl,
+-      .power_ctrl       = cxusb_power_ctrl,
++      .power_ctrl       = cxusb_bluebird_power_ctrl,
+       .frontend_attach  = cxusb_mt352_frontend_attach,
+       .tuner_attach     = cxusb_dtt7579_tuner_attach,
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:23 2006
+Message-Id: <20060428001323.749218000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:38 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alasdair G Kergon <agk@redhat.com>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 12/24] dm snapshot: fix kcopyd destructor
+Content-Disposition: inline; filename=dm-snapshot-fix-kcopyd-destructor.patch
+Content-Length: 3140
+Lines: 111
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Alasdair G Kergon <agk@redhat.com>
+
+Before removing a snapshot, wait for the completion of any kcopyd jobs using
+it.
+
+Do this by maintaining a count (nr_jobs) of how many outstanding jobs each
+kcopyd_client has.
+
+The snapshot destructor first unregisters the snapshot so that no new kcopyd
+jobs (created by writes to the origin) will reference that particular
+snapshot.  kcopyd_client_destroy() is now run next to wait for the completion
+of any outstanding jobs before the snapshot exception structures (that those
+jobs reference) are freed.
+
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/dm-snap.c |    6 +++++-
+ drivers/md/kcopyd.c  |   17 ++++++++++++++++-
+ 2 files changed, 21 insertions(+), 2 deletions(-)
+
+--- linux-2.6.16.11.orig/drivers/md/dm-snap.c
++++ linux-2.6.16.11/drivers/md/dm-snap.c
+@@ -542,8 +542,12 @@ static void snapshot_dtr(struct dm_targe
+ {
+       struct dm_snapshot *s = (struct dm_snapshot *) ti->private;
++      /* Prevent further origin writes from using this snapshot. */
++      /* After this returns there can be no new kcopyd jobs. */
+       unregister_snapshot(s);
++      kcopyd_client_destroy(s->kcopyd_client);
++
+       exit_exception_table(&s->pending, pending_cache);
+       exit_exception_table(&s->complete, exception_cache);
+@@ -552,7 +556,7 @@ static void snapshot_dtr(struct dm_targe
+       dm_put_device(ti, s->origin);
+       dm_put_device(ti, s->cow);
+-      kcopyd_client_destroy(s->kcopyd_client);
++
+       kfree(s);
+ }
+--- linux-2.6.16.11.orig/drivers/md/kcopyd.c
++++ linux-2.6.16.11/drivers/md/kcopyd.c
+@@ -44,6 +44,9 @@ struct kcopyd_client {
+       struct page_list *pages;
+       unsigned int nr_pages;
+       unsigned int nr_free_pages;
++
++      wait_queue_head_t destroyq;
++      atomic_t nr_jobs;
+ };
+ static struct page_list *alloc_pl(void)
+@@ -293,10 +296,15 @@ static int run_complete_job(struct kcopy
+       int read_err = job->read_err;
+       unsigned int write_err = job->write_err;
+       kcopyd_notify_fn fn = job->fn;
++      struct kcopyd_client *kc = job->kc;
+-      kcopyd_put_pages(job->kc, job->pages);
++      kcopyd_put_pages(kc, job->pages);
+       mempool_free(job, _job_pool);
+       fn(read_err, write_err, context);
++
++      if (atomic_dec_and_test(&kc->nr_jobs))
++              wake_up(&kc->destroyq);
++
+       return 0;
+ }
+@@ -431,6 +439,7 @@ static void do_work(void *ignored)
+  */
+ static void dispatch_job(struct kcopyd_job *job)
+ {
++      atomic_inc(&job->kc->nr_jobs);
+       push(&_pages_jobs, job);
+       wake();
+ }
+@@ -670,6 +679,9 @@ int kcopyd_client_create(unsigned int nr
+               return r;
+       }
++      init_waitqueue_head(&kc->destroyq);
++      atomic_set(&kc->nr_jobs, 0);
++
+       client_add(kc);
+       *result = kc;
+       return 0;
+@@ -677,6 +689,9 @@ int kcopyd_client_create(unsigned int nr
+ void kcopyd_client_destroy(struct kcopyd_client *kc)
+ {
++      /* Wait for completion of all jobs submitted by this client. */
++      wait_event(kc->destroyq, !atomic_read(&kc->nr_jobs));
++
+       dm_io_put(kc->nr_pages);
+       client_free_pages(kc);
+       client_del(kc);
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:24 2006
+Message-Id: <20060428001323.890281000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:39 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Junichi Nomura <j-nomura@ce.jp.nec.com>,
+ Alasdair G Kergon <agk@redhat.com>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 13/24] dm flush queue EINTR
+Content-Disposition: inline; filename=dm-flush-queue-EINTR.patch
+Content-Length: 1248
+Lines: 41
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+If dm_suspend() is cancelled, bios already added to the deferred list need to
+be submitted.  Otherwise they remain 'in limbo' until there's a dm_resume().
+
+Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/dm.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- linux-2.6.16.11.orig/drivers/md/dm.c
++++ linux-2.6.16.11/drivers/md/dm.c
+@@ -1098,6 +1098,7 @@ int dm_suspend(struct mapped_device *md,
+ {
+       struct dm_table *map = NULL;
+       DECLARE_WAITQUEUE(wait, current);
++      struct bio *def;
+       int r = -EINVAL;
+       down(&md->suspend_lock);
+@@ -1157,9 +1158,11 @@ int dm_suspend(struct mapped_device *md,
+       /* were we interrupted ? */
+       r = -EINTR;
+       if (atomic_read(&md->pending)) {
++              clear_bit(DMF_BLOCK_IO, &md->flags);
++              def = bio_list_get(&md->deferred);
++              __flush_deferred_io(md, def);
+               up_write(&md->io_lock);
+               unlock_fs(md);
+-              clear_bit(DMF_BLOCK_IO, &md->flags);
+               goto out;
+       }
+       up_write(&md->io_lock);
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:24 2006
+Message-Id: <20060428001324.028668000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:40 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Joe Korty <joe.korty@ccur.com>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 14/24] Simplify proc/devices and fix early termination regression
+Content-Disposition: inline; filename=simplify-proc-devices-and-fix-early-termination-regression.patch
+Content-Length: 13788
+Lines: 537
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+Repair /proc/devices early-termination regression.
+
+2.6.16 broke /proc/devices.  An application often gets an
+EOF before the end of data is reached, if that application
+uses a series of short read(2)s to access the data.  I have
+used read buffers of varying sizes with varying degrees
+of unsuccess (larger sizes get further into the data than
+smaller sizes, following a simple pattern).  It appears
+that the only safe way to get the data is to use a single
+read buffer larger than all the data in /proc/devices.
+
+The following example demonstates the problem:
+
+    # dd if=/proc/devices bs=1
+    Character devices:
+      1 mem
+    27+0 records in
+    27+0 records out
+
+This patch is a backport of the fix recently accepted to
+Linus's tree:
+
+    commit 68eef3b4791572ecb70249c7fb145bb3742dd899
+    [PATCH] Simplify proc/devices and fix early termination regression
+
+It replaces the complex, state-machine algorithm introduced
+in 2.6.16 with a simple algorithm, modeled on the implementation
+of /proc/interrupts.
+
+[akpm@osdl.org: cleanups, simplifications]
+
+Signed-off-by: Joe Korty <joe.korty@ccur.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ block/genhd.c       |  103 +++------------------------------
+ fs/char_dev.c       |   87 +++-------------------------
+ fs/proc/proc_misc.c |  161 +++++++++++-----------------------------------------
+ include/linux/fs.h  |   15 +---
+ 4 files changed, 61 insertions(+), 305 deletions(-)
+
+--- linux-2.6.16.11.orig/block/genhd.c
++++ linux-2.6.16.11/block/genhd.c
+@@ -16,8 +16,6 @@
+ #include <linux/kobj_map.h>
+ #include <linux/buffer_head.h>
+-#define MAX_PROBE_HASH 255    /* random */
+-
+ static struct subsystem block_subsys;
+ static DECLARE_MUTEX(block_subsys_sem);
+@@ -30,108 +28,29 @@ static struct blk_major_name {
+       struct blk_major_name *next;
+       int major;
+       char name[16];
+-} *major_names[MAX_PROBE_HASH];
++} *major_names[BLKDEV_MAJOR_HASH_SIZE];
+ /* index in the above - for now: assume no multimajor ranges */
+ static inline int major_to_index(int major)
+ {
+-      return major % MAX_PROBE_HASH;
+-}
+-
+-struct blkdev_info {
+-        int index;
+-        struct blk_major_name *bd;
+-};
+-
+-/*
+- * iterate over a list of blkdev_info structures.  allows
+- * the major_names array to be iterated over from outside this file
+- * must be called with the block_subsys_sem held
+- */
+-void *get_next_blkdev(void *dev)
+-{
+-        struct blkdev_info *info;
+-
+-        if (dev == NULL) {
+-                info = kmalloc(sizeof(*info), GFP_KERNEL);
+-                if (!info)
+-                        goto out;
+-                info->index=0;
+-                info->bd = major_names[info->index];
+-                if (info->bd)
+-                        goto out;
+-        } else {
+-                info = dev;
+-        }
+-
+-        while (info->index < ARRAY_SIZE(major_names)) {
+-                if (info->bd)
+-                        info->bd = info->bd->next;
+-                if (info->bd)
+-                        goto out;
+-                /*
+-                 * No devices on this chain, move to the next
+-                 */
+-                info->index++;
+-                info->bd = (info->index < ARRAY_SIZE(major_names)) ?
+-                      major_names[info->index] : NULL;
+-                if (info->bd)
+-                        goto out;
+-        }
+-
+-out:
+-        return info;
+-}
+-
+-void *acquire_blkdev_list(void)
+-{
+-        down(&block_subsys_sem);
+-        return get_next_blkdev(NULL);
+-}
+-
+-void release_blkdev_list(void *dev)
+-{
+-        up(&block_subsys_sem);
+-        kfree(dev);
++      return major % BLKDEV_MAJOR_HASH_SIZE;
+ }
++#ifdef CONFIG_PROC_FS
+-/*
+- * Count the number of records in the blkdev_list.
+- * must be called with the block_subsys_sem held
+- */
+-int count_blkdev_list(void)
++void blkdev_show(struct seq_file *f, off_t offset)
+ {
+-      struct blk_major_name *n;
+-      int i, count;
+-
+-      count = 0;
++      struct blk_major_name *dp;
+-      for (i = 0; i < ARRAY_SIZE(major_names); i++) {
+-              for (n = major_names[i]; n; n = n->next)
+-                              count++;
++      if (offset < BLKDEV_MAJOR_HASH_SIZE) {
++              down(&block_subsys_sem);
++              for (dp = major_names[offset]; dp; dp = dp->next)
++                      seq_printf(f, "%3d %s\n", dp->major, dp->name);
++              up(&block_subsys_sem);
+       }
+-
+-      return count;
+-}
+-
+-/*
+- * extract the major and name values from a blkdev_info struct
+- * passed in as a void to *dev.  Must be called with
+- * block_subsys_sem held
+- */
+-int get_blkdev_info(void *dev, int *major, char **name)
+-{
+-        struct blkdev_info *info = dev;
+-
+-        if (info->bd == NULL)
+-                return 1;
+-
+-        *major = info->bd->major;
+-        *name = info->bd->name;
+-        return 0;
+ }
++#endif /* CONFIG_PROC_FS */
+ int register_blkdev(unsigned int major, const char *name)
+ {
+--- linux-2.6.16.11.orig/fs/char_dev.c
++++ linux-2.6.16.11/fs/char_dev.c
+@@ -15,6 +15,7 @@
+ #include <linux/module.h>
+ #include <linux/smp_lock.h>
+ #include <linux/devfs_fs_kernel.h>
++#include <linux/seq_file.h>
+ #include <linux/kobject.h>
+ #include <linux/kobj_map.h>
+@@ -26,8 +27,6 @@
+ static struct kobj_map *cdev_map;
+-#define MAX_PROBE_HASH 255    /* random */
+-
+ static DECLARE_MUTEX(chrdevs_lock);
+ static struct char_device_struct {
+@@ -38,93 +37,29 @@ static struct char_device_struct {
+       char name[64];
+       struct file_operations *fops;
+       struct cdev *cdev;              /* will die */
+-} *chrdevs[MAX_PROBE_HASH];
++} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];
+ /* index in the above */
+ static inline int major_to_index(int major)
+ {
+-      return major % MAX_PROBE_HASH;
+-}
+-
+-struct chrdev_info {
+-      int index;
+-      struct char_device_struct *cd;
+-};
+-
+-void *get_next_chrdev(void *dev)
+-{
+-      struct chrdev_info *info;
+-
+-      if (dev == NULL) {
+-              info = kmalloc(sizeof(*info), GFP_KERNEL);
+-              if (!info)
+-                      goto out;
+-              info->index=0;
+-              info->cd = chrdevs[info->index];
+-              if (info->cd)
+-                      goto out;
+-      } else {
+-              info = dev;
+-      }
+-
+-      while (info->index < ARRAY_SIZE(chrdevs)) {
+-              if (info->cd)
+-                      info->cd = info->cd->next;
+-              if (info->cd)
+-                      goto out;
+-              /*
+-               * No devices on this chain, move to the next
+-               */
+-              info->index++;
+-              info->cd = (info->index < ARRAY_SIZE(chrdevs)) ?
+-                      chrdevs[info->index] : NULL;
+-              if (info->cd)
+-                      goto out;
+-      }
+-
+-out:
+-      return info;
+-}
+-
+-void *acquire_chrdev_list(void)
+-{
+-      down(&chrdevs_lock);
+-      return get_next_chrdev(NULL);
+-}
+-
+-void release_chrdev_list(void *dev)
+-{
+-      up(&chrdevs_lock);
+-      kfree(dev);
++      return major % CHRDEV_MAJOR_HASH_SIZE;
+ }
++#ifdef CONFIG_PROC_FS
+-int count_chrdev_list(void)
++void chrdev_show(struct seq_file *f, off_t offset)
+ {
+       struct char_device_struct *cd;
+-      int i, count;
+-
+-      count = 0;
+-      for (i = 0; i < ARRAY_SIZE(chrdevs) ; i++) {
+-              for (cd = chrdevs[i]; cd; cd = cd->next)
+-                      count++;
++      if (offset < CHRDEV_MAJOR_HASH_SIZE) {
++              down(&chrdevs_lock);
++              for (cd = chrdevs[offset]; cd; cd = cd->next)
++                      seq_printf(f, "%3d %s\n", cd->major, cd->name);
++              up(&chrdevs_lock);
+       }
+-
+-      return count;
+ }
+-int get_chrdev_info(void *dev, int *major, char **name)
+-{
+-      struct chrdev_info *info = dev;
+-
+-      if (info->cd == NULL)
+-              return 1;
+-
+-      *major = info->cd->major;
+-      *name = info->cd->name;
+-      return 0;
+-}
++#endif /* CONFIG_PROC_FS */
+ /*
+  * Register a single major with a specified minor range.
+--- linux-2.6.16.11.orig/fs/proc/proc_misc.c
++++ linux-2.6.16.11/fs/proc/proc_misc.c
+@@ -249,144 +249,60 @@ static int cpuinfo_open(struct inode *in
+       return seq_open(file, &cpuinfo_op);
+ }
+-enum devinfo_states {
+-      CHR_HDR,
+-      CHR_LIST,
+-      BLK_HDR,
+-      BLK_LIST,
+-      DEVINFO_DONE
+-};
+-
+-struct devinfo_state {
+-      void *chrdev;
+-      void *blkdev;
+-      unsigned int num_records;
+-      unsigned int cur_record;
+-      enum devinfo_states state;
++static struct file_operations proc_cpuinfo_operations = {
++      .open           = cpuinfo_open,
++      .read           = seq_read,
++      .llseek         = seq_lseek,
++      .release        = seq_release,
+ };
+-static void *devinfo_start(struct seq_file *f, loff_t *pos)
++static int devinfo_show(struct seq_file *f, void *v)
+ {
+-      struct devinfo_state *info = f->private;
++      int i = *(loff_t *) v;
+-      if (*pos) {
+-              if ((info) && (*pos <= info->num_records))
+-                      return info;
+-              return NULL;
++      if (i < CHRDEV_MAJOR_HASH_SIZE) {
++              if (i == 0)
++                      seq_printf(f, "Character devices:\n");
++              chrdev_show(f, i);
++      } else {
++              i -= CHRDEV_MAJOR_HASH_SIZE;
++              if (i == 0)
++                      seq_printf(f, "\nBlock devices:\n");
++              blkdev_show(f, i);
+       }
+-      info = kmalloc(sizeof(*info), GFP_KERNEL);
+-      f->private = info;
+-      info->chrdev = acquire_chrdev_list();
+-      info->blkdev = acquire_blkdev_list();
+-      info->state = CHR_HDR;
+-      info->num_records = count_chrdev_list();
+-      info->num_records += count_blkdev_list();
+-      info->num_records += 2; /* Character and Block headers */
+-      *pos = 1;
+-      info->cur_record = *pos;
+-      return info;
++      return 0;
+ }
+-static void *devinfo_next(struct seq_file *f, void *v, loff_t *pos)
++static void *devinfo_start(struct seq_file *f, loff_t *pos)
+ {
+-      int idummy;
+-      char *ndummy;
+-      struct devinfo_state *info = f->private;
+-
+-      switch (info->state) {
+-              case CHR_HDR:
+-                      info->state = CHR_LIST;
+-                      (*pos)++;
+-                      /*fallthrough*/
+-              case CHR_LIST:
+-                      if (get_chrdev_info(info->chrdev,&idummy,&ndummy)) {
+-                              /*
+-                               * The character dev list is complete
+-                               */
+-                              info->state = BLK_HDR;
+-                      } else {
+-                              info->chrdev = get_next_chrdev(info->chrdev);
+-                      }
+-                      (*pos)++;
+-                      break;
+-              case BLK_HDR:
+-                      info->state = BLK_LIST;
+-                      (*pos)++;
+-                      /*fallthrough*/
+-              case BLK_LIST:
+-                      if (get_blkdev_info(info->blkdev,&idummy,&ndummy)) {
+-                              /*
+-                               * The block dev list is complete
+-                               */
+-                              info->state = DEVINFO_DONE;
+-                      } else {
+-                              info->blkdev = get_next_blkdev(info->blkdev);
+-                      }
+-                      (*pos)++;
+-                      break;
+-              case DEVINFO_DONE:
+-                      (*pos)++;
+-                      info->cur_record = *pos;
+-                      info = NULL;
+-                      break;
+-              default:
+-                      break;
+-      }
+-      if (info)
+-              info->cur_record = *pos;
+-      return info;
++      if (*pos < (BLKDEV_MAJOR_HASH_SIZE + CHRDEV_MAJOR_HASH_SIZE))
++              return pos;
++      return NULL;
+ }
+-static void devinfo_stop(struct seq_file *f, void *v)
++static void *devinfo_next(struct seq_file *f, void *v, loff_t *pos)
+ {
+-      struct devinfo_state *info = f->private;
+-
+-      if (info) {
+-              release_chrdev_list(info->chrdev);
+-              release_blkdev_list(info->blkdev);
+-              f->private = NULL;
+-              kfree(info);
+-      }
++      (*pos)++;
++      if (*pos >= (BLKDEV_MAJOR_HASH_SIZE + CHRDEV_MAJOR_HASH_SIZE))
++              return NULL;
++      return pos;
+ }
+-static int devinfo_show(struct seq_file *f, void *arg)
++static void devinfo_stop(struct seq_file *f, void *v)
+ {
+-      int major;
+-      char *name;
+-      struct devinfo_state *info = f->private;
+-
+-      switch(info->state) {
+-              case CHR_HDR:
+-                      seq_printf(f,"Character devices:\n");
+-                      /* fallthrough */
+-              case CHR_LIST:
+-                      if (!get_chrdev_info(info->chrdev,&major,&name))
+-                              seq_printf(f,"%3d %s\n",major,name);
+-                      break;
+-              case BLK_HDR:
+-                      seq_printf(f,"\nBlock devices:\n");
+-                      /* fallthrough */
+-              case BLK_LIST:
+-                      if (!get_blkdev_info(info->blkdev,&major,&name))
+-                              seq_printf(f,"%3d %s\n",major,name);
+-                      break;
+-              default:
+-                      break;
+-      }
+-
+-      return 0;
++      /* Nothing to do */
+ }
+-static  struct seq_operations devinfo_op = {
+-      .start  = devinfo_start,
+-      .next   = devinfo_next,
+-      .stop   = devinfo_stop,
+-      .show   = devinfo_show,
++static struct seq_operations devinfo_ops = {
++      .start = devinfo_start,
++      .next  = devinfo_next,
++      .stop  = devinfo_stop,
++      .show  = devinfo_show
+ };
+-static int devinfo_open(struct inode *inode, struct file *file)
++static int devinfo_open(struct inode *inode, struct file *filp)
+ {
+-      return seq_open(file, &devinfo_op);
++      return seq_open(filp, &devinfo_ops);
+ }
+ static struct file_operations proc_devinfo_operations = {
+@@ -396,13 +312,6 @@ static struct file_operations proc_devin
+       .release        = seq_release,
+ };
+-static struct file_operations proc_cpuinfo_operations = {
+-      .open           = cpuinfo_open,
+-      .read           = seq_read,
+-      .llseek         = seq_lseek,
+-      .release        = seq_release,
+-};
+-
+ extern struct seq_operations vmstat_op;
+ static int vmstat_open(struct inode *inode, struct file *file)
+ {
+--- linux-2.6.16.11.orig/include/linux/fs.h
++++ linux-2.6.16.11/include/linux/fs.h
+@@ -1383,6 +1383,7 @@ extern int bd_claim(struct block_device 
+ extern void bd_release(struct block_device *);
+ /* fs/char_dev.c */
++#define CHRDEV_MAJOR_HASH_SIZE        255
+ extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
+ extern int register_chrdev_region(dev_t, unsigned, const char *);
+ extern int register_chrdev(unsigned int, const char *,
+@@ -1390,25 +1391,17 @@ extern int register_chrdev(unsigned int,
+ extern int unregister_chrdev(unsigned int, const char *);
+ extern void unregister_chrdev_region(dev_t, unsigned);
+ extern int chrdev_open(struct inode *, struct file *);
+-extern int get_chrdev_list(char *);
+-extern void *acquire_chrdev_list(void);
+-extern int count_chrdev_list(void);
+-extern void *get_next_chrdev(void *);
+-extern int get_chrdev_info(void *, int *, char **);
+-extern void release_chrdev_list(void *);
++extern void chrdev_show(struct seq_file *,off_t);
+ /* fs/block_dev.c */
++#define BLKDEV_MAJOR_HASH_SIZE        255
+ #define BDEVNAME_SIZE 32      /* Largest string for a blockdev identifier */
+ extern const char *__bdevname(dev_t, char *buffer);
+ extern const char *bdevname(struct block_device *bdev, char *buffer);
+ extern struct block_device *lookup_bdev(const char *);
+ extern struct block_device *open_bdev_excl(const char *, int, void *);
+ extern void close_bdev_excl(struct block_device *);
+-extern void *acquire_blkdev_list(void);
+-extern int count_blkdev_list(void);
+-extern void *get_next_blkdev(void *);
+-extern int get_blkdev_info(void *, int *, char **);
+-extern void release_blkdev_list(void *);
++extern void blkdev_show(struct seq_file *,off_t);
+ extern void init_special_inode(struct inode *, umode_t, dev_t);
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:24 2006
+Message-Id: <20060428001324.174508000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:41 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ git-commits-head@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jan Kara <jack@suse.cz>,
+ <reiserfs-dev@namesys.com>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 15/24] Fix reiserfs deadlock
+Content-Disposition: inline; filename=fix-reiserfs-deadlock.patch
+Content-Length: 1315
+Lines: 40
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jan Kara <jack@suse.cz>
+
+[PATCH] Fix reiserfs deadlock
+
+reiserfs_cache_default_acl() should return whether we successfully found
+the acl or not.  We have to return correct value even if reiserfs_get_acl()
+returns error code and not just 0.  Otherwise callers such as
+reiserfs_mkdir() can unnecessarily lock the xattrs and later functions such
+as reiserfs_new_inode() fail to notice that we have already taken the lock
+and try to take it again with obvious consequences.
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Cc: <reiserfs-dev@namesys.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/reiserfs/xattr_acl.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- linux-2.6.16.11.orig/fs/reiserfs/xattr_acl.c
++++ linux-2.6.16.11/fs/reiserfs/xattr_acl.c
+@@ -408,8 +408,9 @@ int reiserfs_cache_default_acl(struct in
+               acl = reiserfs_get_acl(inode, ACL_TYPE_DEFAULT);
+               reiserfs_read_unlock_xattrs(inode->i_sb);
+               reiserfs_read_unlock_xattr_i(inode);
+-              ret = acl ? 1 : 0;
+-              posix_acl_release(acl);
++              ret = (acl && !IS_ERR(acl));
++              if (ret)
++                      posix_acl_release(acl);
+       }
+       return ret;
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:24 2006
+Message-Id: <20060428001324.314150000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:42 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ git-commits-head@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Greg Howard <ghoward@sgi.com>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 16/24] Altix snsc: duplicate kobject fix
+Content-Disposition: inline; filename=altix-snsc-duplicate-kobject-fix.patch
+Content-Length: 1196
+Lines: 35
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Greg Howard <ghoward@sgi.com>
+
+Fix Altix system controller (snsc) device names to include the slot number
+of the blade whose associated system controller is the target of the device
+interface.  Including the slot number avoids a problem we're currently
+having where slots within the same enclosure are attempting to create
+multiple kobjects with identical names.
+
+Signed-off-by: Greg Howard <ghoward@sgi.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/snsc.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- linux-2.6.16.11.orig/drivers/char/snsc.c
++++ linux-2.6.16.11/drivers/char/snsc.c
+@@ -391,7 +391,8 @@ scdrv_init(void)
+                       format_module_id(devnamep, geo_module(geoid),
+                                        MODULE_FORMAT_BRIEF);
+                       devnamep = devname + strlen(devname);
+-                      sprintf(devnamep, "#%d", geo_slab(geoid));
++                      sprintf(devnamep, "^%d#%d", geo_slot(geoid),
++                              geo_slab(geoid));
+                       /* allocate sysctl device data */
+                       scd = kmalloc(sizeof (struct sysctl_data_s),
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:24 2006
+Message-Id: <20060428001324.452969000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:43 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ git-commits-head@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 17/24] Alpha: strncpy() fix
+Content-Disposition: inline; filename=alpha-strncpy-fix.patch
+Content-Length: 1236
+Lines: 47
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+
+[PATCH] Alpha: strncpy() fix
+
+As it turned out after recent SCSI changes, strncpy() was broken -
+it mixed up the return values from __stxncpy() in registers $24 and $27.
+
+Thanks to Mathieu Chouquet-Stringer for tracking down the problem
+and providing an excellent test case.
+
+Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/alpha/lib/strncpy.S |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- linux-2.6.16.11.orig/arch/alpha/lib/strncpy.S
++++ linux-2.6.16.11/arch/alpha/lib/strncpy.S
+@@ -43,8 +43,8 @@ strncpy:
+       .align  4
+ $multiword:
+-      subq    $24, 1, $2      # clear the final bits in the prev word
+-      or      $2, $24, $2
++      subq    $27, 1, $2      # clear the final bits in the prev word
++      or      $2, $27, $2
+       zapnot  $1, $2, $1
+       subq    $18, 1, $18
+@@ -70,8 +70,8 @@ $multiword:
+       bne     $18, 0b
+ 1:    ldq_u   $1, 0($16)      # clear the leading bits in the final word
+-      subq    $27, 1, $2
+-      or      $2, $27, $2
++      subq    $24, 1, $2
++      or      $2, $24, $2
+       zap     $1, $2, $1
+       stq_u   $1, 0($16)
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:24 2006
+Message-Id: <20060428001324.594722000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:44 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ git-commits-head@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ James Morris <jmorris@namei.org>,
+ Al Viro <viro@zeniv.linux.org.uk>,
+ Greg Kroah-Hartman <gregkh@suse.de>,
+ Chris Wright <chrisw@sous-sol.org>
+Subject: [patch 18/24] LSM: add missing hook to do_compat_readv_writev()
+Content-Disposition: inline; filename=lsm-add-missing-hook-to-do_compat_readv_writev.patch
+Content-Length: 1113
+Lines: 39
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: James Morris <jmorris@namei.org>
+
+This patch addresses a flaw in LSM, where there is no mediation of readv()
+and writev() in for 32-bit compatible apps using a 64-bit kernel.
+
+This bug was discovered and fixed initially in the native readv/writev
+code [1], but was not fixed in the compat code.  Thanks to Al for spotting
+this one.
+
+  [1] http://lwn.net/Articles/154282/
+
+Signed-off-by: James Morris <jmorris@namei.org>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+
+---
+ fs/compat.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- linux-2.6.16.11.orig/fs/compat.c
++++ linux-2.6.16.11/fs/compat.c
+@@ -1215,6 +1215,10 @@ static ssize_t compat_do_readv_writev(in
+       if (ret < 0)
+               goto out;
++      ret = security_file_permission(file, type == READ ? MAY_READ:MAY_WRITE);
++      if (ret)
++              goto out;
++
+       fnv = NULL;
+       if (type == READ) {
+               fn = file->f_op->read;
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:24 2006
+Message-Id: <20060428001324.738152000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:45 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ git-commits-head@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Zachary Amsden <zach@vmware.com>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 19/24] x86/PAE: Fix pte_clear for the >4GB RAM case
+Content-Disposition: inline; filename=x86-pae-fix-pte_clear-for-the-4gb-ram-case.patch
+Content-Length: 5572
+Lines: 130
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Zachary Amsden <zach@vmware.com>
+
+[PATCH] x86/PAE: Fix pte_clear for the >4GB RAM case
+
+Proposed fix for ptep_get_and_clear_full PAE bug.  Pte_clear had the same bug,
+so use the same fix for both.  Turns out pmd_clear had it as well, but pgds
+are not affected.
+
+The problem is rather intricate.  Page table entries in PAE mode are 64-bits
+wide, but the only atomic 8-byte write operation available in 32-bit mode is
+cmpxchg8b, which is expensive (at least on P4), and thus avoided.  But it can
+happen that the processor may prefetch entries into the TLB in the middle of an
+operation which clears a page table entry.  So one must always clear the P-bit
+in the low word of the page table entry first when clearing it.
+
+Since the sequence *ptep = __pte(0) leaves the order of the write dependent on
+the compiler, it must be coded explicitly as a clear of the low word followed
+by a clear of the high word.  Further, there must be a write memory barrier
+here to enforce proper ordering by the compiler (and, in the future, by the
+processor as well).
+
+On > 4GB memory machines, the implementation of pte_clear for PAE was clearly
+deficient, as it could leave virtual mappings of physical memory above 4GB
+aliased to memory below 4GB in the TLB.  The implementation of
+ptep_get_and_clear_full has a similar bug, although not nearly as likely to
+occur, since the mappings being cleared are in the process of being destroyed,
+and should never be dereferenced again.
+
+But, as luck would have it, it is possible to trigger bugs even without ever
+dereferencing these bogus TLB mappings, even if the clear is followed fairly
+soon after with a TLB flush or invalidation.  The problem is that memory above
+4GB may now be aliased into the first 4GB of memory, and in fact, may hit a
+region of memory with non-memory semantics.  These regions include AGP and PCI
+space.  As such, these memory regions are not cached by the processor.  This
+introduces the bug.
+
+The processor can speculate memory operations, including memory writes, as long
+as they are committed with the proper ordering.  Speculating a memory write to
+a linear address that has a bogus TLB mapping is possible.  Normally, the
+speculation is harmless.  But for cached memory, it does leave the falsely
+speculated cacheline unmodified, but in a dirty state.  This cache line will be
+eventually written back.  If this cacheline happens to intersect a region of
+memory that is not protected by the cache coherency protocol, it can corrupt
+data in I/O memory, which is generally a very bad thing to do, and can cause
+total system failure or just plain undefined behavior.
+
+These bugs are extremely unlikely, but the severity is of such magnitude, and
+the fix so simple that I think fixing them immediately is justified.  Also,
+they are nearly impossible to debug.
+
+Signed-off-by: Zachary Amsden <zach@vmware.com>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-i386/pgtable-2level.h |    3 +++
+ include/asm-i386/pgtable-3level.h |   20 ++++++++++++++++++++
+ include/asm-i386/pgtable.h        |    4 +---
+ 3 files changed, 24 insertions(+), 3 deletions(-)
+
+--- linux-2.6.16.11.orig/include/asm-i386/pgtable-2level.h
++++ linux-2.6.16.11/include/asm-i386/pgtable-2level.h
+@@ -18,6 +18,9 @@
+ #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
+ #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
++#define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
++#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
++
+ #define ptep_get_and_clear(mm,addr,xp)        __pte(xchg(&(xp)->pte_low, 0))
+ #define pte_same(a, b)                ((a).pte_low == (b).pte_low)
+ #define pte_page(x)           pfn_to_page(pte_pfn(x))
+--- linux-2.6.16.11.orig/include/asm-i386/pgtable-3level.h
++++ linux-2.6.16.11/include/asm-i386/pgtable-3level.h
+@@ -85,6 +85,26 @@ static inline void pud_clear (pud_t * pu
+ #define pmd_offset(pud, address) ((pmd_t *) pud_page(*(pud)) + \
+                       pmd_index(address))
++/*
++ * For PTEs and PDEs, we must clear the P-bit first when clearing a page table
++ * entry, so clear the bottom half first and enforce ordering with a compiler
++ * barrier.
++ */
++static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
++{
++      ptep->pte_low = 0;
++      smp_wmb();
++      ptep->pte_high = 0;
++}
++
++static inline void pmd_clear(pmd_t *pmd)
++{
++      u32 *tmp = (u32 *)pmd;
++      *tmp = 0;
++      smp_wmb();
++      *(tmp + 1) = 0;
++}
++
+ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
+ {
+       pte_t res;
+--- linux-2.6.16.11.orig/include/asm-i386/pgtable.h
++++ linux-2.6.16.11/include/asm-i386/pgtable.h
+@@ -204,12 +204,10 @@ extern unsigned long long __PAGE_KERNEL,
+ extern unsigned long pg0[];
+ #define pte_present(x)        ((x).pte_low & (_PAGE_PRESENT | _PAGE_PROTNONE))
+-#define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
+ /* To avoid harmful races, pmd_none(x) should check only the lower when PAE */
+ #define pmd_none(x)   (!(unsigned long)pmd_val(x))
+ #define pmd_present(x)        (pmd_val(x) & _PAGE_PRESENT)
+-#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
+ #define       pmd_bad(x)      ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
+@@ -269,7 +267,7 @@ static inline pte_t ptep_get_and_clear_f
+       pte_t pte;
+       if (full) {
+               pte = *ptep;
+-              *ptep = __pte(0);
++              pte_clear(mm, addr, ptep);
+       } else {
+               pte = ptep_get_and_clear(mm, addr, ptep);
+       }
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:25 2006
+Message-Id: <20060428001324.879818000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:46 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ <jgarzik@pobox.com>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ netdev@vger.kernel.org,
+ <jesse.brandeburg@intel.com>,
+ <john.ronciak@intel.com>,
+ <Jeffrey.t.kirsher@intel.com>,
+ <auke@foo-projects.org>,
+ <davem@davemloft.net>,
+ Auke Kok <auke-jan.h.kok@intel.com>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 20/24] NET: e1000: Update truesize with the length of the packet for packet split
+Content-Disposition: inline; filename=net-e1000-update-truesize-with-the-length-of-the-packet-for-packet-split.patch
+Content-Length: 764
+Lines: 28
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+Update skb with the real packet size.
+
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
+Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
+Signed-off-by: John Ronciak <john.ronciak@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/e1000/e1000_main.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.16.11.orig/drivers/net/e1000/e1000_main.c
++++ linux-2.6.16.11/drivers/net/e1000/e1000_main.c
+@@ -3851,6 +3851,7 @@ e1000_clean_rx_irq_ps(struct e1000_adapt
+                       skb_shinfo(skb)->nr_frags++;
+                       skb->len += length;
+                       skb->data_len += length;
++                      skb->truesize += length;
+               }
+               e1000_rx_checksum(adapter, staterr,
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:25 2006
+Message-Id: <20060428001325.019060000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:47 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ralf Baechle <ralf@linux-mips.org>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 21/24] MIPS: Use "R" constraint for cache_op.
+Content-Disposition: inline; filename=MIPS-0001.patch
+Content-Length: 743
+Lines: 26
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+Gcc might emit an absolute address for the the "m" constraint which
+gas unfortunately does not permit.
+    
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-mips/r4kcache.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.16.11.orig/include/asm-mips/r4kcache.h
++++ linux-2.6.16.11/include/asm-mips/r4kcache.h
+@@ -37,7 +37,7 @@
+       "       cache   %0, %1                                  \n"     \
+       "       .set    pop                                     \n"     \
+       :                                                               \
+-      : "i" (op), "m" (*(unsigned char *)(addr)))
++      : "i" (op), "R" (*(unsigned char *)(addr)))
+ static inline void flush_icache_line_indexed(unsigned long addr)
+ {
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:25 2006
+Message-Id: <20060428001325.159252000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:48 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ralf Baechle <ralf@linux-mips.org>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 22/24] MIPS: R2 build fixes for gcc < 3.4.
+Content-Disposition: inline; filename=MIPS-0002.patch
+Content-Length: 2821
+Lines: 113
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-mips/bitops.h    |   14 ++++++++++++--
+ include/asm-mips/byteorder.h |    4 ++++
+ include/asm-mips/interrupt.h |    8 ++++++++
+ 3 files changed, 24 insertions(+), 2 deletions(-)
+
+--- linux-2.6.16.11.orig/include/asm-mips/bitops.h
++++ linux-2.6.16.11/include/asm-mips/bitops.h
+@@ -654,7 +654,12 @@ static inline unsigned long fls(unsigned
+ {
+ #ifdef CONFIG_32BIT
+ #ifdef CONFIG_CPU_MIPS32
+-      __asm__ ("clz %0, %1" : "=r" (word) : "r" (word));
++      __asm__ (
++      "       .set    mips32                                  \n"
++      "       clz     %0, %1                                  \n"
++      "       .set    mips0                                   \n"
++      : "=r" (word)
++      : "r" (word));
+       return 32 - word;
+ #else
+@@ -678,7 +683,12 @@ static inline unsigned long fls(unsigned
+ #ifdef CONFIG_64BIT
+ #ifdef CONFIG_CPU_MIPS64
+-      __asm__ ("dclz %0, %1" : "=r" (word) : "r" (word));
++      __asm__ (
++      "       .set    mips64                                  \n"
++      "       dclz    %0, %1                                  \n"
++      "       .set    mips0                                   \n"
++      : "=r" (word)
++      : "r" (word));
+       return 64 - word;
+ #else
+--- linux-2.6.16.11.orig/include/asm-mips/byteorder.h
++++ linux-2.6.16.11/include/asm-mips/byteorder.h
+@@ -19,7 +19,9 @@
+ static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x)
+ {
+       __asm__(
++      "       .set    mips32r2                \n"
+       "       wsbh    %0, %1                  \n"
++      "       .set    mips0                   \n"
+       : "=r" (x)
+       : "r" (x));
+@@ -30,8 +32,10 @@ static __inline__ __attribute_const__ __
+ static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x)
+ {
+       __asm__(
++      "       .set    mips32r2                \n"
+       "       wsbh    %0, %1                  \n"
+       "       rotr    %0, %0, 16              \n"
++      "       .set    mips0                   \n"
+       : "=r" (x)
+       : "r" (x));
+--- linux-2.6.16.11.orig/include/asm-mips/interrupt.h
++++ linux-2.6.16.11/include/asm-mips/interrupt.h
+@@ -20,7 +20,9 @@ __asm__ (
+       "       .set    reorder                                         \n"
+       "       .set    noat                                            \n"
+ #ifdef CONFIG_CPU_MIPSR2
++      "       .set    mips32r2                                        \n"
+       "       ei                                                      \n"
++      "       .set    mips0                                           \n"
+ #else
+       "       mfc0    $1,$12                                          \n"
+       "       ori     $1,0x1f                                         \n"
+@@ -63,7 +65,9 @@ __asm__ (
+       "       .set    push                                            \n"
+       "       .set    noat                                            \n"
+ #ifdef CONFIG_CPU_MIPSR2
++      "       .set    mips32r2                                        \n"
+       "       di                                                      \n"
++      "       .set    mips0                                           \n"
+ #else
+       "       mfc0    $1,$12                                          \n"
+       "       ori     $1,0x1f                                         \n"
+@@ -103,8 +107,10 @@ __asm__ (
+       "       .set    reorder                                         \n"
+       "       .set    noat                                            \n"
+ #ifdef CONFIG_CPU_MIPSR2
++      "       .set    mips32r2                                        \n"
+       "       di      \\result                                        \n"
+       "       andi    \\result, 1                                     \n"
++      "       .set    mips0                                           \n"
+ #else
+       "       mfc0    \\result, $12                                   \n"
+       "       ori     $1, \\result, 0x1f                              \n"
+@@ -133,9 +139,11 @@ __asm__ (
+        * Slow, but doesn't suffer from a relativly unlikely race
+        * condition we're having since days 1.
+        */
++      "       .set    mips32r2                                        \n"
+       "       beqz    \\flags, 1f                                     \n"
+       "        di                                                     \n"
+       "       ei                                                      \n"
++      "       .set    mips0                                           \n"
+       "1:                                                             \n"
+ #elif defined(CONFIG_CPU_MIPSR2)
+       /*
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:25 2006
+Message-Id: <20060428001325.298860000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:49 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Atsushi Nemoto <anemo@mba.ocn.ne.jp>,
+ Ralf Baechle <ralf@linux-mips.org>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 23/24] MIPS: Fix tx49_blast_icache32_page_indexed.
+Content-Disposition: inline; filename=MIPS-0003.patch
+Content-Length: 1058
+Lines: 30
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
+
+Fix the cache index value in tx49_blast_icache32_page_indexed().
+This is damage by de62893bc0725f8b5f0445250577cd7a10b2d8f8 commit.
+    
+Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/mips/mm/c-r4k.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- linux-2.6.16.11.orig/arch/mips/mm/c-r4k.c
++++ linux-2.6.16.11/arch/mips/mm/c-r4k.c
+@@ -154,7 +154,8 @@ static inline void blast_icache32_r4600_
+ static inline void tx49_blast_icache32_page_indexed(unsigned long page)
+ {
+-      unsigned long start = page;
++      unsigned long indexmask = current_cpu_data.icache.waysize - 1;
++      unsigned long start = INDEX_BASE + (page & indexmask);
+       unsigned long end = start + PAGE_SIZE;
+       unsigned long ws_inc = 1UL << current_cpu_data.icache.waybit;
+       unsigned long ws_end = current_cpu_data.icache.ways <<
+
+--
+
+From greg@quad.kroah.org Thu Apr 27 17:13:25 2006
+Message-Id: <20060428001325.444493000@quad.kroah.org>
+References: <20060428001226.204293000@quad.kroah.org>
+User-Agent: quilt/0.44-1
+Date: Thu, 27 Apr 2006 17:12:50 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ torvalds@osdl.org,
+ akpm@osdl.org,
+ alan@lxorguk.ukuu.org.uk,
+ Win Treese <treese@acm.org>,
+ Ralf Baechle <ralf@linux-mips.org>,
+ Greg Kroah-Hartman <gregkh@suse.de>
+Subject: [patch 24/24] MIPS: Fix branch emulation for floating-point exceptions.
+Content-Disposition: inline; filename=MIPS-0004.patch
+Content-Length: 1095
+Lines: 33
+
+-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Win Treese <treese@acm.org>
+
+In the branch emulation for floating-point exceptions, __compute_return_epc
+must determine for bc1f et al which condition code bit to test. This is
+based on bits <4:2> of the rt field. The switch statement to distinguish
+bc1f et al needs to use only the two low bits of rt, but the old code tests
+on the whole rt field.  This patch masks off the proper bits.
+
+Signed-off-by: Win Treese <treese@acm.org>
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/mips/kernel/branch.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.16.11.orig/arch/mips/kernel/branch.c
++++ linux-2.6.16.11/arch/mips/kernel/branch.c
+@@ -184,7 +184,7 @@ int __compute_return_epc(struct pt_regs 
+               bit = (insn.i_format.rt >> 2);
+               bit += (bit != 0);
+               bit += 23;
+-              switch (insn.i_format.rt) {
++              switch (insn.i_format.rt & 3) {
+               case 0: /* bc1f */
+               case 2: /* bc1fl */
+                       if (~fcr31 & (1 << bit))
+
+--
+
similarity index 100%
rename from queue-2.6.16/series
rename to review-2.6.16/series