]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
queue-2.6.32
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 Aug 2010 19:50:07 +0000 (12:50 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 Aug 2010 19:50:07 +0000 (12:50 -0700)
.32 patches

queue-2.6.32/acl-trouble-after-upgrading-ubuntu.patch [new file with mode: 0644]
queue-2.6.32/comedi-uncripple-8255-based-dio-subdevices.patch [new file with mode: 0644]
queue-2.6.32/mm-fix-ia64-crash-when-gcore-reads-gate-area.patch [new file with mode: 0644]
queue-2.6.32/sched-cgroup-implement-different-treatment-for-idle-shares.patch [new file with mode: 0644]

diff --git a/queue-2.6.32/acl-trouble-after-upgrading-ubuntu.patch b/queue-2.6.32/acl-trouble-after-upgrading-ubuntu.patch
new file mode 100644 (file)
index 0000000..826ab92
--- /dev/null
@@ -0,0 +1,34 @@
+From d327cf7449e6fd5cbac784c641770e9366faa386 Mon Sep 17 00:00:00 2001
+From: J. Bruce Fields <bfields@fieldses.org>
+Date: Thu, 3 Dec 2009 08:10:17 -0500
+Subject: Re: acl trouble after upgrading ubuntu
+
+From: J. Bruce Fields <bfields@fieldses.org>
+
+commit d327cf7449e6fd5cbac784c641770e9366faa386 upstream.
+
+Subject: nfs: fix acl decoding
+
+Commit 28f566942c6b1d929f5e240e69e7081b77b238d3 "NFS: use dynamically
+computed compound_hdr.replen for xdr_inline_pages offset" accidentally
+changed the amount of space to allow for the acl reply, resulting in an
+IO error on attempts to get an acl.
+
+Reported-by: Paul Rudin <paul@rudin.co.uk>
+Cc: Benny Halevy <bhalevy@panasas.com>
+Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Cc: Jeremy Kerr <jeremy.kerr@canonical.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+--- a/fs/nfs/nfs4xdr.c
++++ b/fs/nfs/nfs4xdr.c
+@@ -2096,7 +2096,7 @@ nfs4_xdr_enc_getacl(struct rpc_rqst *req, __be32 *p,
+       encode_compound_hdr(&xdr, req, &hdr);
+       encode_sequence(&xdr, &args->seq_args, &hdr);
+       encode_putfh(&xdr, args->fh, &hdr);
+-      replen = hdr.replen + nfs4_fattr_bitmap_maxsz + 1;
++      replen = hdr.replen + op_decode_hdr_maxsz + nfs4_fattr_bitmap_maxsz + 1;
+       encode_getattr_two(&xdr, FATTR4_WORD0_ACL, 0, &hdr);
+       xdr_inline_pages(&req->rq_rcv_buf, replen << 2,
diff --git a/queue-2.6.32/comedi-uncripple-8255-based-dio-subdevices.patch b/queue-2.6.32/comedi-uncripple-8255-based-dio-subdevices.patch
new file mode 100644 (file)
index 0000000..63fa2f7
--- /dev/null
@@ -0,0 +1,71 @@
+From abbotti@mev.co.uk  Tue Aug  3 12:41:11 2010
+From: Ian Abbott <abbotti@mev.co.uk>
+Date: Fri, 30 Jul 2010 14:59:37 +0100
+Subject: comedi: Uncripple 8255-based DIO subdevices
+To: <stable@kernel.org>
+Cc: Ian Abbott <abbotti@mev.co.uk>
+Message-ID: <1280498377-9445-1-git-send-email-abbotti@mev.co.uk>
+
+
+(Note: upstream comedi configuration has been overhauled, so this patch
+does not apply there.)
+
+Several comedi drivers call subdev_8255_init() (declared in
+"drivers/staging/comedi/drivers/8255.h") to set up one or more DIO
+subdevices.  This should be provided by the 8255.ko module, but unless
+the CONFIG_COMEDI_8255 or CONFIG_COMEDI_8255_MODULE macro is defined,
+the 8255.h header uses a dummy inline version of the function instead.
+This means the comedi devices end up with an "unused" subdevice with 0
+channels instead of a "DIO" subdevice with 24 channels!
+
+This patch provides a non-interactive COMEDI_8255 option and selects it
+whenever the COMEDI_PCI_DRIVERS or COMEDI_PCMCIA_DRIVERS options are
+selected.
+
+Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/comedi/Kconfig          |    5 +++++
+ drivers/staging/comedi/drivers/Makefile |    4 +++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+--- a/drivers/staging/comedi/Kconfig
++++ b/drivers/staging/comedi/Kconfig
+@@ -16,6 +16,7 @@ config COMEDI_DEBUG
+ config COMEDI_PCI_DRIVERS
+       tristate "Comedi PCI drivers"
+       depends on COMEDI && PCI
++      select COMEDI_8255
+       default N
+       ---help---
+         Enable lots of comedi PCI drivers to be built
+@@ -23,6 +24,7 @@ config COMEDI_PCI_DRIVERS
+ config COMEDI_PCMCIA_DRIVERS
+       tristate "Comedi PCMCIA drivers"
+       depends on COMEDI && PCMCIA && PCCARD
++      select COMEDI_8255
+       default N
+       ---help---
+         Enable lots of comedi PCMCIA and PCCARD drivers to be built
+@@ -33,3 +35,6 @@ config COMEDI_USB_DRIVERS
+       default N
+       ---help---
+         Enable lots of comedi USB drivers to be built
++
++config COMEDI_8255
++      tristate
+--- a/drivers/staging/comedi/drivers/Makefile
++++ b/drivers/staging/comedi/drivers/Makefile
+@@ -8,8 +8,10 @@ obj-$(CONFIG_COMEDI)                  += comedi_test.o
+ obj-$(CONFIG_COMEDI)                  += comedi_parport.o
+ obj-$(CONFIG_COMEDI)                  += pcm_common.o
++# Comedi 8255 module
++obj-$(CONFIG_COMEDI_8255)             += 8255.o
++
+ # Comedi PCI drivers
+-obj-$(CONFIG_COMEDI_PCI_DRIVERS)      += 8255.o
+ obj-$(CONFIG_COMEDI_PCI_DRIVERS)      += acl7225b.o
+ obj-$(CONFIG_COMEDI_PCI_DRIVERS)      += addi_apci_035.o
+ obj-$(CONFIG_COMEDI_PCI_DRIVERS)      += addi_apci_1032.o
diff --git a/queue-2.6.32/mm-fix-ia64-crash-when-gcore-reads-gate-area.patch b/queue-2.6.32/mm-fix-ia64-crash-when-gcore-reads-gate-area.patch
new file mode 100644 (file)
index 0000000..1872574
--- /dev/null
@@ -0,0 +1,63 @@
+From de51257aa301652876ab6e8f13ea4eadbe4a3846 Mon Sep 17 00:00:00 2001
+From: Hugh Dickins <hughd@google.com>
+Date: Fri, 30 Jul 2010 10:58:26 -0700
+Subject: mm: fix ia64 crash when gcore reads gate area
+
+From: Hugh Dickins <hughd@google.com>
+
+commit de51257aa301652876ab6e8f13ea4eadbe4a3846 upstream.
+
+Debian's ia64 autobuilders have been seeing kernel freeze or reboot
+when running the gdb testsuite (Debian bug 588574): dannf bisected to
+2.6.32 62eede62dafb4a6633eae7ffbeb34c60dba5e7b1 "mm: ZERO_PAGE without
+PTE_SPECIAL"; and reproduced it with gdb's gcore on a simple target.
+
+I'd missed updating the gate_vma handling in __get_user_pages(): that
+happens to use vm_normal_page() (nowadays failing on the zero page),
+yet reported success even when it failed to get a page - boom when
+access_process_vm() tried to copy that to its intermediate buffer.
+
+Fix this, resisting cleanups: in particular, leave it for now reporting
+success when not asked to get any pages - very probably safe to change,
+but let's not risk it without testing exposure.
+
+Why did ia64 crash with 16kB pages, but succeed with 64kB pages?
+Because setup_gate() pads each 64kB of its gate area with zero pages.
+
+Reported-by: Andreas Barth <aba@not.so.argh.org>
+Bisected-by: dann frazier <dannf@debian.org>
+Signed-off-by: Hugh Dickins <hughd@google.com>
+Tested-by: dann frazier <dannf@dannf.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/memory.c |   16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+--- a/mm/memory.c
++++ b/mm/memory.c
+@@ -1282,10 +1282,20 @@ int __get_user_pages(struct task_struct
+                               return i ? : -EFAULT;
+                       }
+                       if (pages) {
+-                              struct page *page = vm_normal_page(gate_vma, start, *pte);
++                              struct page *page;
++
++                              page = vm_normal_page(gate_vma, start, *pte);
++                              if (!page) {
++                                      if (!(gup_flags & FOLL_DUMP) &&
++                                           is_zero_pfn(pte_pfn(*pte)))
++                                              page = pte_page(*pte);
++                                      else {
++                                              pte_unmap(pte);
++                                              return i ? : -EFAULT;
++                                      }
++                              }
+                               pages[i] = page;
+-                              if (page)
+-                                      get_page(page);
++                              get_page(page);
+                       }
+                       pte_unmap(pte);
+                       if (vmas)
diff --git a/queue-2.6.32/sched-cgroup-implement-different-treatment-for-idle-shares.patch b/queue-2.6.32/sched-cgroup-implement-different-treatment-for-idle-shares.patch
new file mode 100644 (file)
index 0000000..fb8e7fb
--- /dev/null
@@ -0,0 +1,66 @@
+From cd8ad40de36c2fe75f3b731bd70198b385895246 Mon Sep 17 00:00:00 2001
+From: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Date: Thu, 3 Dec 2009 18:00:07 +0100
+Subject: sched: cgroup: Implement different treatment for idle shares
+
+From: Peter Zijlstra <a.p.zijlstra@chello.nl>
+
+commit cd8ad40de36c2fe75f3b731bd70198b385895246 upstream.
+
+When setting the weight for a per-cpu task-group, we have to put in a
+phantom weight when there is no work on that cpu, otherwise we'll not
+service that cpu when new work gets placed there until we again update
+the per-cpu weights.
+
+We used to add these phantom weights to the total, so that the idle
+per-cpu shares don't get inflated, this however causes the non-idle
+parts to get deflated, causing unexpected weight distibutions.
+
+Reverse this, so that the non-idle shares are correct but the idle
+shares are inflated.
+
+Reported-by: Yasunori Goto <y-goto@jp.fujitsu.com>
+Tested-by: Yasunori Goto <y-goto@jp.fujitsu.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+LKML-Reference: <1257934048.23203.76.camel@twins>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sched.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -1623,7 +1623,7 @@ static void update_group_shares_cpu(stru
+  */
+ static int tg_shares_up(struct task_group *tg, void *data)
+ {
+-      unsigned long weight, rq_weight = 0, shares = 0;
++      unsigned long weight, rq_weight = 0, sum_weight = 0, shares = 0;
+       unsigned long *usd_rq_weight;
+       struct sched_domain *sd = data;
+       unsigned long flags;
+@@ -1639,6 +1639,7 @@ static int tg_shares_up(struct task_grou
+               weight = tg->cfs_rq[i]->load.weight;
+               usd_rq_weight[i] = weight;
++              rq_weight += weight;
+               /*
+                * If there are currently no tasks on the cpu pretend there
+                * is one of average load so that when a new task gets to
+@@ -1647,10 +1648,13 @@ static int tg_shares_up(struct task_grou
+               if (!weight)
+                       weight = NICE_0_LOAD;
+-              rq_weight += weight;
++              sum_weight += weight;
+               shares += tg->cfs_rq[i]->shares;
+       }
++      if (!rq_weight)
++              rq_weight = sum_weight;
++
+       if ((!shares && rq_weight) || shares > tg->shares)
+               shares = tg->shares;