--- /dev/null
+From gregkh@mini.kroah.org Tue Jun 30 17:03:56 2009
+Message-Id: <20090701000356.273052636@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:45 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Philippe De Muyter <phdm@macqel.be>
+Subject: [patch 01/30] parport: netmos 9845 & 9855 1P4S fixes
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=parport-netmos-9845-9855-1p4s-fixes.patch
+Content-Length: 5045
+Lines: 121
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Philippe De Muyter <phdm@macqel.be>
+
+commit 50db9d8e4ca17974595e3848cb65f9371a304de4 upstream.
+
+netmos serial/parallel adapters come in different flavour differing only
+by the number of parallel and serial ports, which are encoded in the
+subdevice ID.
+
+Last fix of Christian Pellegrin for 9855 2P2S broke support for 9855 1P4S,
+and works only by side-effect for the first parallel port of a 2P2S, as
+this first parallel port is found by reading the second addr entry of
+(struct parport_pc_pci) cards[netmos_9855], which is not initialized, and
+hence has value 0, which happens to be the BAR of the first parallel port.
+
+netmos_9xx5_combo entry in (struct parport_pc_pci) cards[], which is used
+for a 9845 1P4S must also be fixed for the parallel port support when
+there are 4 serial ports because this entry currently gives 2 as BAR index
+for the parallel port. Actually, in this case, BAR 2 is the 3rd serial
+port while the parallel port is at BAR 4.
+
+I fixed 9845 1P4S and 9855 1P4S support, while preserving 9855 2P2S support,
+
+- by creating a netmos_9855_2p entry and using it for 9855 boards with 2
+ parallel ports : 9855 2P2S and 9855 2P0S boards,
+
+- and by allowing netmos_parallel_init to change not only the number of
+ parallel ports (0 or 1), but making it also change the BAR index of the
+ parallel port when the serial ports are before the parallel port.
+
+PS: the netmos_9855_2p entry in (struct pciserial_board)
+pci_parport_serial_boards[] is needed because netmos_parallel_init has no
+clean way to replace FL_BASE2 by FL_BASE4 in the description of the serial
+ports in function of the number of parallel ports on the card.
+
+Tested with 9845 1P4S, 9855 1P4S and 9855 2P2S boards.
+
+Signed-off-by: Philippe De Muyter <phdm@macqel.be>
+Tested-by: Christian Pellegrin <chripell@fsfe.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/parport/parport_serial.c | 30 +++++++++++++++++++++++++-----
+ 1 file changed, 25 insertions(+), 5 deletions(-)
+
+--- a/drivers/parport/parport_serial.c
++++ b/drivers/parport/parport_serial.c
+@@ -30,6 +30,7 @@ enum parport_pc_pci_cards {
+ titan_210l,
+ netmos_9xx5_combo,
+ netmos_9855,
++ netmos_9855_2p,
+ avlab_1s1p,
+ avlab_1s2p,
+ avlab_2s1p,
+@@ -62,7 +63,7 @@ struct parport_pc_pci {
+ struct parport_pc_pci *card, int failed);
+ };
+
+-static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *card, int autoirq, int autodma)
++static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *par, int autoirq, int autodma)
+ {
+ /* the rule described below doesn't hold for this device */
+ if (dev->device == PCI_DEVICE_ID_NETMOS_9835 &&
+@@ -74,9 +75,17 @@ static int __devinit netmos_parallel_ini
+ * and serial ports. The form is 0x00PS, where <P> is the number of
+ * parallel ports and <S> is the number of serial ports.
+ */
+- card->numports = (dev->subsystem_device & 0xf0) >> 4;
+- if (card->numports > ARRAY_SIZE(card->addr))
+- card->numports = ARRAY_SIZE(card->addr);
++ par->numports = (dev->subsystem_device & 0xf0) >> 4;
++ if (par->numports > ARRAY_SIZE(par->addr))
++ par->numports = ARRAY_SIZE(par->addr);
++ /*
++ * This function is currently only called for cards with up to
++ * one parallel port.
++ * Parallel port BAR is either before or after serial ports BARS;
++ * hence, lo should be either 0 or equal to the number of serial ports.
++ */
++ if (par->addr[0].lo != 0)
++ par->addr[0].lo = dev->subsystem_device & 0xf;
+ return 0;
+ }
+
+@@ -84,7 +93,8 @@ static struct parport_pc_pci cards[] __d
+ /* titan_110l */ { 1, { { 3, -1 }, } },
+ /* titan_210l */ { 1, { { 3, -1 }, } },
+ /* netmos_9xx5_combo */ { 1, { { 2, -1 }, }, netmos_parallel_init },
+- /* netmos_9855 */ { 1, { { 2, -1 }, }, netmos_parallel_init },
++ /* netmos_9855 */ { 1, { { 0, -1 }, }, netmos_parallel_init },
++ /* netmos_9855_2p */ { 2, { { 0, -1 }, { 2, -1 }, } },
+ /* avlab_1s1p */ { 1, { { 1, 2}, } },
+ /* avlab_1s2p */ { 2, { { 1, 2}, { 3, 4 },} },
+ /* avlab_2s1p */ { 1, { { 2, 3}, } },
+@@ -110,6 +120,10 @@ static struct pci_device_id parport_seri
+ { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9845,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9xx5_combo },
+ { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855,
++ 0x1000, 0x0020, 0, 0, netmos_9855_2p },
++ { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855,
++ 0x1000, 0x0022, 0, 0, netmos_9855_2p },
++ { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9855 },
+ /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
+ { PCI_VENDOR_ID_AFAVLAB, 0x2110,
+@@ -192,6 +206,12 @@ static struct pciserial_board pci_parpor
+ .uart_offset = 8,
+ },
+ [netmos_9855] = {
++ .flags = FL_BASE2 | FL_BASE_BARS,
++ .num_ports = 1,
++ .base_baud = 115200,
++ .uart_offset = 8,
++ },
++ [netmos_9855_2p] = {
+ .flags = FL_BASE4 | FL_BASE_BARS,
+ .num_ports = 1,
+ .base_baud = 115200,
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:56 2009
+Message-Id: <20090701000356.430732937@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:46 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Nicolas Ferre <nicolas.ferre@atmel.com>,
+ Andrew Victor <avictor.za@gmail.com>,
+ Haavard Skinnemoen <hskinnemoen@atmel.com>
+Subject: [patch 02/30] atmel_lcdfb: correct fifo size for some products
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=atmel_lcdfb-correct-fifo-size-for-some-products.patch
+Content-Length: 1354
+Lines: 41
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Nicolas Ferre <nicolas.ferre@atmel.com>
+
+commit 53b7479bbdaedcc7846c66fd608fe66f1b5aa35b upstream.
+
+Remove wrong fifo size definition for some AT91 products.
+
+Due to a misunderstanding of some AT91 datasheets, a fifo size of 2048
+(words) has been introduced by mistake. In fact, all products (AT91/AT32)
+are sharing the same fifo size of 512 words.
+
+Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+Cc: Andrew Victor <avictor.za@gmail.com>
+Acked-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/video/atmel_lcdfb.c | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+--- a/drivers/video/atmel_lcdfb.c
++++ b/drivers/video/atmel_lcdfb.c
+@@ -29,14 +29,8 @@
+
+ /* configurable parameters */
+ #define ATMEL_LCDC_CVAL_DEFAULT 0xc8
+-#define ATMEL_LCDC_DMA_BURST_LEN 8
+-
+-#if defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91CAP9) || \
+- defined(CONFIG_ARCH_AT91SAM9RL)
+-#define ATMEL_LCDC_FIFO_SIZE 2048
+-#else
+-#define ATMEL_LCDC_FIFO_SIZE 512
+-#endif
++#define ATMEL_LCDC_DMA_BURST_LEN 8 /* words */
++#define ATMEL_LCDC_FIFO_SIZE 512 /* words */
+
+ #if defined(CONFIG_ARCH_AT91)
+ #define ATMEL_LCDFB_FBINFO_DEFAULT (FBINFO_DEFAULT \
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:56 2009
+Message-Id: <20090701000356.613902877@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:47 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Stephen Hemminger <shemminger@vyatta.com>,
+ Jay Vosburgh <fubar@us.ibm.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 03/30] bonding: fix multiple module load problem
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=bonding-fix-multiple-module-load-problem.patch
+Content-Length: 1185
+Lines: 37
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Stephen Hemminger <shemminger@vyatta.com>
+
+[ Upstream commit 130aa61a77b8518f1ea618e1b7d214d60b405f10 ]
+
+Some users still load bond module multiple times to create bonding
+devices. This accidentally was broken by a later patch about
+the time sysfs was fixed. According to Jay, it was broken
+by:
+ commit b8a9787eddb0e4665f31dd1d64584732b2b5d051
+ Author: Jay Vosburgh <fubar@us.ibm.com>
+ Date: Fri Jun 13 18:12:04 2008 -0700
+
+ bonding: Allow setting max_bonds to zero
+
+Note: sysfs and procfs still produce WARN() messages when this is done
+so the sysfs method is the recommended API.
+
+Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
+Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/bonding/bond_sysfs.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/bonding/bond_sysfs.c
++++ b/drivers/net/bonding/bond_sysfs.c
+@@ -1464,6 +1464,7 @@ int bond_create_sysfs(void)
+ printk(KERN_ERR
+ "network device named %s already exists in sysfs",
+ class_attr_bonding_masters.attr.name);
++ ret = 0;
+ }
+
+ return ret;
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:56 2009
+Message-Id: <20090701000356.802112344@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:48 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dirk Eibach <eibach@gdsys.de>,
+ Jiri Slaby <jirislaby@gmail.com>
+Subject: [patch 04/30] char: moxa, prevent opening unavailable ports
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=char-moxa-prevent-opening-unavailable-ports.patch
+Content-Length: 1430
+Lines: 47
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Dirk Eibach <eibach@gdsys.de>
+
+commit a90b037583d5f1ae3e54e9c687c79df82d1d34a4 upstream.
+
+In moxa.c there are 32 minor numbers reserved for each device. The number
+of ports actually available per device is stored in
+moxa_board_conf->numPorts. This number is not considered in moxa_open().
+Opening a port that is not available results in a kernel oops. This patch
+adds a test to moxa_open() that prevents opening unavailable ports.
+
+[akpm@linux-foundation.org: avoid multiple returns]
+Signed-off-by: Dirk Eibach <eibach@gdsys.de>
+Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
+Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/moxa.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/drivers/char/moxa.c
++++ b/drivers/char/moxa.c
+@@ -1158,6 +1158,11 @@ static int moxa_open(struct tty_struct *
+ return -ENODEV;
+ }
+
++ if (port % MAX_PORTS_PER_BOARD >= brd->numPorts) {
++ retval = -ENODEV;
++ goto out_unlock;
++ }
++
+ ch = &brd->ports[port % MAX_PORTS_PER_BOARD];
+ ch->port.count++;
+ tty->driver_data = ch;
+@@ -1182,8 +1187,8 @@ static int moxa_open(struct tty_struct *
+ moxa_close_port(ch);
+ } else
+ ch->port.flags |= ASYNC_NORMAL_ACTIVE;
++out_unlock:
+ mutex_unlock(&moxa_openlock);
+-
+ return retval;
+ }
+
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:57 2009
+Message-Id: <20090701000356.957554861@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:49 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "Peter Botha" <peterb@goldcircle.co.za>,
+ Jiri Slaby <jirislaby@gmail.com>
+Subject: [patch 05/30] char: mxser, fix ISA board lookup
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=char-mxser-fix-isa-board-lookup.patch
+Content-Length: 1134
+Lines: 35
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Peter Botha <peterb@goldcircle.co.za>
+
+commit 96050dfb25966612008dcea7d342e91fa01e993c upstream.
+
+There's a bug in the mxser kernel module that still appears in the
+2.6.29.4 kernel.
+
+mxser_get_ISA_conf takes a ioaddress as its first argument, by passing the
+not of the ioaddr, you're effectively passing 0 which means it won't be
+able to talk to an ISA card. I have tested this, and removing the !
+fixes the problem.
+
+Cc: "Peter Botha" <peterb@goldcircle.co.za>
+Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
+Acked-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/mxser.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/char/mxser.c
++++ b/drivers/char/mxser.c
+@@ -2790,7 +2790,7 @@ static int __init mxser_module_init(void
+ continue;
+
+ brd = &mxser_boards[m];
+- retval = mxser_get_ISA_conf(!ioaddr[b], brd);
++ retval = mxser_get_ISA_conf(ioaddr[b], brd);
+ if (retval <= 0) {
+ brd->info = NULL;
+ continue;
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:57 2009
+Message-Id: <20090701000357.123482034@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:50 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Yinghai Lu <yinghai@kernel.org>,
+ Ingo Molnar <mingo@elte.hu>,
+ "H. Peter Anvin" <hpa@zytor.com>,
+ Thomas Gleixner <tglx@linutronix.de>
+Subject: [patch 06/30] firmware_map: fix hang with x86/32bit
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=firmware_map-fix-hang-with-x86-32bit.patch
+Content-Length: 4211
+Lines: 113
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Yinghai Lu <yinghai@kernel.org>
+
+commit 3b0fde0fac19c180317eb0601b3504083f4b9bf5 upstream.
+
+Addresses http://bugzilla.kernel.org/show_bug.cgi?id=13484
+
+Peer reported:
+| The bug is introduced from kernel 2.6.27, if E820 table reserve the memory
+| above 4G in 32bit OS(BIOS-e820: 00000000fff80000 - 0000000120000000
+| (reserved)), system will report Int 6 error and hang up. The bug is caused by
+| the following code in drivers/firmware/memmap.c, the resource_size_t is 32bit
+| variable in 32bit OS, the BUG_ON() will be invoked to result in the Int 6
+| error. I try the latest 32bit Ubuntu and Fedora distributions, all hit this
+| bug.
+|======
+|static int firmware_map_add_entry(resource_size_t start, resource_size_t end,
+| const char *type,
+| struct firmware_map_entry *entry)
+
+and it only happen with CONFIG_PHYS_ADDR_T_64BIT is not set.
+
+it turns out we need to pass u64 instead of resource_size_t for that.
+
+[akpm@linux-foundation.org: add comment]
+Reported-and-tested-by: Peer Chen <pchen@nvidia.com>
+Signed-off-by: Yinghai Lu <yinghai@kernel.org>
+Cc: Ingo Molnar <mingo@elte.hu>
+Acked-by: H. Peter Anvin <hpa@zytor.com>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/firmware/memmap.c | 16 +++++++++-------
+ include/linux/firmware-map.h | 12 ++++--------
+ 2 files changed, 13 insertions(+), 15 deletions(-)
+
+--- a/drivers/firmware/memmap.c
++++ b/drivers/firmware/memmap.c
+@@ -31,8 +31,12 @@
+ * information is necessary as for the resource tree.
+ */
+ struct firmware_map_entry {
+- resource_size_t start; /* start of the memory range */
+- resource_size_t end; /* end of the memory range (incl.) */
++ /*
++ * start and end must be u64 rather than resource_size_t, because e820
++ * resources can lie at addresses above 4G.
++ */
++ u64 start; /* start of the memory range */
++ u64 end; /* end of the memory range (incl.) */
+ const char *type; /* type of the memory range */
+ struct list_head list; /* entry for the linked list */
+ struct kobject kobj; /* kobject for each entry */
+@@ -101,7 +105,7 @@ static LIST_HEAD(map_entries);
+ * Common implementation of firmware_map_add() and firmware_map_add_early()
+ * which expects a pre-allocated struct firmware_map_entry.
+ **/
+-static int firmware_map_add_entry(resource_size_t start, resource_size_t end,
++static int firmware_map_add_entry(u64 start, u64 end,
+ const char *type,
+ struct firmware_map_entry *entry)
+ {
+@@ -132,8 +136,7 @@ static int firmware_map_add_entry(resour
+ *
+ * Returns 0 on success, or -ENOMEM if no memory could be allocated.
+ **/
+-int firmware_map_add(resource_size_t start, resource_size_t end,
+- const char *type)
++int firmware_map_add(u64 start, u64 end, const char *type)
+ {
+ struct firmware_map_entry *entry;
+
+@@ -157,8 +160,7 @@ int firmware_map_add(resource_size_t sta
+ *
+ * Returns 0 on success, or -ENOMEM if no memory could be allocated.
+ **/
+-int __init firmware_map_add_early(resource_size_t start, resource_size_t end,
+- const char *type)
++int __init firmware_map_add_early(u64 start, u64 end, const char *type)
+ {
+ struct firmware_map_entry *entry;
+
+--- a/include/linux/firmware-map.h
++++ b/include/linux/firmware-map.h
+@@ -24,21 +24,17 @@
+ */
+ #ifdef CONFIG_FIRMWARE_MEMMAP
+
+-int firmware_map_add(resource_size_t start, resource_size_t end,
+- const char *type);
+-int firmware_map_add_early(resource_size_t start, resource_size_t end,
+- const char *type);
++int firmware_map_add(u64 start, u64 end, const char *type);
++int firmware_map_add_early(u64 start, u64 end, const char *type);
+
+ #else /* CONFIG_FIRMWARE_MEMMAP */
+
+-static inline int firmware_map_add(resource_size_t start, resource_size_t end,
+- const char *type)
++static inline int firmware_map_add(u64 start, u64 end, const char *type)
+ {
+ return 0;
+ }
+
+-static inline int firmware_map_add_early(resource_size_t start,
+- resource_size_t end, const char *type)
++static inline int firmware_map_add_early(u64 start, u64 end, const char *type)
+ {
+ return 0;
+ }
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:57 2009
+Message-Id: <20090701000357.276381426@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:51 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jan Kara <jack@suse.cz>,
+ <linux-ext4@vger.kernel.org>
+Subject: [patch 07/30] jbd: fix race in buffer processing in commit code
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=jbd-fix-race-in-buffer-processing-in-commit-code.patch
+Content-Length: 1753
+Lines: 48
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Jan Kara <jack@suse.cz>
+
+commit a61d90d75d0f9e86432c45b496b4b0fbf0fd03dc upstream.
+
+In commit code, we scan buffers attached to a transaction. During this
+scan, we sometimes have to drop j_list_lock and then we recheck whether
+the journal buffer head didn't get freed by journal_try_to_free_buffers().
+ But checking for buffer_jbd(bh) isn't enough because a new journal head
+could get attached to our buffer head. So add a check whether the journal
+head remained the same and whether it's still at the same transaction and
+list.
+
+This is a nasty bug and can cause problems like memory corruption (use after
+free) or trigger various assertions in JBD code (observed).
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Cc: <linux-ext4@vger.kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jbd/commit.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/fs/jbd/commit.c
++++ b/fs/jbd/commit.c
+@@ -238,7 +238,7 @@ write_out_data:
+ spin_lock(&journal->j_list_lock);
+ }
+ /* Someone already cleaned up the buffer? */
+- if (!buffer_jbd(bh)
++ if (!buffer_jbd(bh) || bh2jh(bh) != jh
+ || jh->b_transaction != commit_transaction
+ || jh->b_jlist != BJ_SyncData) {
+ jbd_unlock_bh_state(bh);
+@@ -463,7 +463,9 @@ void journal_commit_transaction(journal_
+ spin_lock(&journal->j_list_lock);
+ continue;
+ }
+- if (buffer_jbd(bh) && jh->b_jlist == BJ_Locked) {
++ if (buffer_jbd(bh) && bh2jh(bh) == jh &&
++ jh->b_transaction == commit_transaction &&
++ jh->b_jlist == BJ_Locked) {
+ __journal_unfile_buffer(jh);
+ jbd_unlock_bh_state(bh);
+ journal_remove_journal_head(bh);
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:57 2009
+Message-Id: <20090701000357.437400136@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:52 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Shaohua Li <shaohua.li@intel.com>,
+ Jesse Barnes <jbarnes@virtuousgeek.org>
+Subject: [patch 08/30] PCI: disable ASPM on VIA root-port-under-bridge configurations
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=pci-disable-aspm-on-via-root-port-under-bridge-configurations.patch
+Content-Length: 933
+Lines: 30
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Shaohua Li <shaohua.li@intel.com>
+
+commit 8e822df700694ca6850d1e0c122fd7004b2778d8 upstream.
+
+VIA has a strange chipset, it has root port under a bridge. Disable ASPM
+for such strange chipset.
+
+Tested-by: Wolfgang Denk <wd@denx.de>
+Signed-off-by: Shaohua Li <shaohua.li@intel.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pci/pcie/aspm.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/pci/pcie/aspm.c
++++ b/drivers/pci/pcie/aspm.c
+@@ -633,6 +633,10 @@ void pcie_aspm_init_link_state(struct pc
+ if (pdev->pcie_type != PCI_EXP_TYPE_ROOT_PORT &&
+ pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM)
+ return;
++ /* VIA has a strange chipset, root port is under a bridge */
++ if (pdev->pcie_type == PCI_EXP_TYPE_ROOT_PORT &&
++ pdev->bus->self)
++ return;
+ down_read(&pci_bus_sem);
+ if (list_empty(&pdev->subordinate->devices))
+ goto out;
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:57 2009
+Message-Id: <20090701000357.604995676@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:53 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eric Dumazet <eric.dumazet@gmail.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 09/30] r8169: fix crash when large packets are received
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=r8169-fix-crash-when-large-packets-are-received.patch
+Content-Length: 2769
+Lines: 82
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Eric Dumazet <eric.dumazet@gmail.com>
+
+commit fdd7b4c3302c93f6833e338903ea77245eb510b4 upstream.
+
+Michael Tokarev reported receiving a large packet could crash
+a machine with RTL8169 NIC.
+( original thread at http://lkml.org/lkml/2009/6/8/192 )
+
+Problem is this driver tells that NIC frames up to 16383 bytes
+can be received but provides skb to rx ring allocated with
+smaller sizes (1536 bytes in case standard 1500 bytes MTU is used)
+
+When a frame larger than what was allocated by driver is received,
+dma transfert can occurs past the end of buffer and corrupt
+kernel memory.
+
+Fix is to tell to NIC what is the maximum size a frame can be.
+
+This bug is very old, (before git introduction, linux-2.6.10), and
+should be backported to stable versions.
+
+Reported-by: Michael Tokarev <mjt@tls.msk.ru>
+Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
+Tested-by: Michael Tokarev <mjt@tls.msk.ru>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/r8169.c | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -65,7 +65,6 @@ static const int multicast_filter_limit
+ #define RX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
+ #define TX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
+ #define EarlyTxThld 0x3F /* 0x3F means NO early transmit */
+-#define RxPacketMaxSize 0x3FE8 /* 16K - 1 - ETH_HLEN - VLAN - CRC... */
+ #define SafeMtu 0x1c20 /* ... actually life sucks beyond ~7k */
+ #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */
+
+@@ -1976,10 +1975,10 @@ static u16 rtl_rw_cpluscmd(void __iomem
+ return cmd;
+ }
+
+-static void rtl_set_rx_max_size(void __iomem *ioaddr)
++static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
+ {
+ /* Low hurts. Let's disable the filtering. */
+- RTL_W16(RxMaxSize, 16383);
++ RTL_W16(RxMaxSize, rx_buf_sz);
+ }
+
+ static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
+@@ -2026,7 +2025,7 @@ static void rtl_hw_start_8169(struct net
+
+ RTL_W8(EarlyTxThres, EarlyTxThld);
+
+- rtl_set_rx_max_size(ioaddr);
++ rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
+
+ if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
+ (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
+@@ -2090,7 +2089,7 @@ static void rtl_hw_start_8168(struct net
+
+ RTL_W8(EarlyTxThres, EarlyTxThld);
+
+- rtl_set_rx_max_size(ioaddr);
++ rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
+
+ rtl_set_rx_tx_config_registers(tp);
+
+@@ -2142,7 +2141,7 @@ static void rtl_hw_start_8101(struct net
+
+ RTL_W8(EarlyTxThres, EarlyTxThld);
+
+- rtl_set_rx_max_size(ioaddr);
++ rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
+
+ tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
+
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:57 2009
+Message-Id: <20090701000357.771968716@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:54 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Karsten Keil <keil@b1-systems.de>
+Subject: [patch 10/30] ISDN: Fix DMA alloc for hfcpci
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=isdn-fix-dma-alloc-for-hfcpci.patch
+Content-Length: 3794
+Lines: 99
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Karsten Keil <keil@b1-systems.de>
+
+commit 8a745b9d91962991ce87a649a4dc3af3206c2c8b upstream.
+
+Replace wrong code with correct DMA API functions.
+
+Signed-off-by: Karsten Keil <keil@b1-systems.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/isdn/hisax/hfc_pci.c | 41 ++++++++++++++++++++++++++++++-----------
+ drivers/isdn/hisax/hisax.h | 2 +-
+ 2 files changed, 31 insertions(+), 12 deletions(-)
+
+--- a/drivers/isdn/hisax/hfc_pci.c
++++ b/drivers/isdn/hisax/hfc_pci.c
+@@ -82,8 +82,9 @@ release_io_hfcpci(struct IsdnCardState *
+ Write_hfc(cs, HFCPCI_INT_M2, cs->hw.hfcpci.int_m2);
+ pci_write_config_word(cs->hw.hfcpci.dev, PCI_COMMAND, 0); /* disable memory mapped ports + busmaster */
+ del_timer(&cs->hw.hfcpci.timer);
+- kfree(cs->hw.hfcpci.share_start);
+- cs->hw.hfcpci.share_start = NULL;
++ pci_free_consistent(cs->hw.hfcpci.dev, 0x8000,
++ cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma);
++ cs->hw.hfcpci.fifos = NULL;
+ iounmap((void *)cs->hw.hfcpci.pci_io);
+ }
+
+@@ -1663,8 +1664,19 @@ setup_hfcpci(struct IsdnCard *card)
+ dev_hfcpci);
+ i++;
+ if (tmp_hfcpci) {
++ dma_addr_t dma_mask = DMA_BIT_MASK(32) & ~0x7fffUL;
+ if (pci_enable_device(tmp_hfcpci))
+ continue;
++ if (pci_set_dma_mask(tmp_hfcpci, dma_mask)) {
++ printk(KERN_WARNING
++ "HiSax hfc_pci: No suitable DMA available.\n");
++ continue;
++ }
++ if (pci_set_consistent_dma_mask(tmp_hfcpci, dma_mask)) {
++ printk(KERN_WARNING
++ "HiSax hfc_pci: No suitable consistent DMA available.\n");
++ continue;
++ }
+ pci_set_master(tmp_hfcpci);
+ if ((card->para[0]) && (card->para[0] != (tmp_hfcpci->resource[ 0].start & PCI_BASE_ADDRESS_IO_MASK)))
+ continue;
+@@ -1693,22 +1705,29 @@ setup_hfcpci(struct IsdnCard *card)
+ printk(KERN_WARNING "HFC-PCI: No IO-Mem for PCI card found\n");
+ return (0);
+ }
++
+ /* Allocate memory for FIFOS */
+- /* Because the HFC-PCI needs a 32K physical alignment, we */
+- /* need to allocate the double mem and align the address */
+- if (!(cs->hw.hfcpci.share_start = kmalloc(65536, GFP_KERNEL))) {
+- printk(KERN_WARNING "HFC-PCI: Error allocating memory for FIFO!\n");
++ cs->hw.hfcpci.fifos = pci_alloc_consistent(cs->hw.hfcpci.dev,
++ 0x8000, &cs->hw.hfcpci.dma);
++ if (!cs->hw.hfcpci.fifos) {
++ printk(KERN_WARNING "HFC-PCI: Error allocating FIFO memory!\n");
++ return 0;
++ }
++ if (cs->hw.hfcpci.dma & 0x7fff) {
++ printk(KERN_WARNING
++ "HFC-PCI: Error DMA memory not on 32K boundary (%lx)\n",
++ (u_long)cs->hw.hfcpci.dma);
++ pci_free_consistent(cs->hw.hfcpci.dev, 0x8000,
++ cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma);
+ return 0;
+ }
+- cs->hw.hfcpci.fifos = (void *)
+- (((ulong) cs->hw.hfcpci.share_start) & ~0x7FFF) + 0x8000;
+- pci_write_config_dword(cs->hw.hfcpci.dev, 0x80, (u_int) virt_to_bus(cs->hw.hfcpci.fifos));
++ pci_write_config_dword(cs->hw.hfcpci.dev, 0x80, (u32)cs->hw.hfcpci.dma);
+ cs->hw.hfcpci.pci_io = ioremap((ulong) cs->hw.hfcpci.pci_io, 256);
+ printk(KERN_INFO
+- "HFC-PCI: defined at mem %p fifo %p(%#x) IRQ %d HZ %d\n",
++ "HFC-PCI: defined at mem %p fifo %p(%lx) IRQ %d HZ %d\n",
+ cs->hw.hfcpci.pci_io,
+ cs->hw.hfcpci.fifos,
+- (u_int) virt_to_bus(cs->hw.hfcpci.fifos),
++ (u_long)cs->hw.hfcpci.dma,
+ cs->irq, HZ);
+
+ spin_lock_irqsave(&cs->lock, flags);
+--- a/drivers/isdn/hisax/hisax.h
++++ b/drivers/isdn/hisax/hisax.h
+@@ -694,7 +694,7 @@ struct hfcPCI_hw {
+ int nt_timer;
+ struct pci_dev *dev;
+ unsigned char *pci_io; /* start of PCI IO memory */
+- void *share_start; /* shared memory for Fifos start */
++ dma_addr_t dma; /* dma handle for Fifos */
+ void *fifos; /* FIFO memory */
+ int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */
+ struct timer_list timer;
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:58 2009
+Message-Id: <20090701000357.950820556@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:55 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean Delvare <jdelvare@suse.de>,
+ Steve Conklin <steve.conklin@canonical.com>,
+ Leann Ogasawara <leann.ogasawara@canonical.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 11/30] x86: Add quirk for reboot stalls on a Dell Optiplex 360
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=x86-add-quirk-for-reboot-stalls-on-a-dell-optiplex-360.patch
+Content-Length: 1174
+Lines: 37
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Jean Delvare <jdelvare@suse.de>
+
+commit 4a4aca641bc4598e77b866804f47c651ec4a764d upstream.
+
+The Dell Optiplex 360 hangs on reboot, just like the Optiplex 330, so
+the same quirk is needed.
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+Cc: Steve Conklin <steve.conklin@canonical.com>
+Cc: Leann Ogasawara <leann.ogasawara@canonical.com>
+LKML-Reference: <200906051202.38311.jdelvare@suse.de>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/reboot.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/arch/x86/kernel/reboot.c
++++ b/arch/x86/kernel/reboot.c
+@@ -169,6 +169,15 @@ static struct dmi_system_id __initdata r
+ DMI_MATCH(DMI_BOARD_NAME, "0KW626"),
+ },
+ },
++ { /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */
++ .callback = set_bios_reboot,
++ .ident = "Dell OptiPlex 360",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"),
++ DMI_MATCH(DMI_BOARD_NAME, "0T656F"),
++ },
++ },
+ { /* Handle problems with rebooting on Dell 2400's */
+ .callback = set_bios_reboot,
+ .ident = "Dell PowerEdge 2400",
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:58 2009
+Message-Id: <20090701000358.122275246@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:56 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Leann Ogasawara <leann.ogasawara@canonical.com>,
+ Steve Conklin <steve.conklin@canonical.com>,
+ Ingo Molnar <mingo@elte.hu>,
+ Jean Delvare <khali@linux-fr.org>
+Subject: [patch 12/30] x86: quirk for reboot stalls on a Dell Optiplex 330
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=x86-quirk-for-reboot-stalls-on-a-dell-optiplex-330.patch
+Content-Length: 1144
+Lines: 36
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Steve Conklin <sconklin@canonical.com>
+
+commit 093bac154c142fa1fb31a3ac69ae1bc08930231b upstream.
+
+Dell Optiplex 330 appears to hang on reboot. This is resolved by adding
+a quirk to set bios reboot.
+
+Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>
+Signed-off-by: Steve Conklin <steve.conklin@canonical.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Cc: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/reboot.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/arch/x86/kernel/reboot.c
++++ b/arch/x86/kernel/reboot.c
+@@ -178,6 +178,15 @@ static struct dmi_system_id __initdata r
+ DMI_MATCH(DMI_BOARD_NAME, "0T656F"),
+ },
+ },
++ { /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */
++ .callback = set_bios_reboot,
++ .ident = "Dell OptiPlex 330",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"),
++ DMI_MATCH(DMI_BOARD_NAME, "0KP561"),
++ },
++ },
+ { /* Handle problems with rebooting on Dell 2400's */
+ .callback = set_bios_reboot,
+ .ident = "Dell PowerEdge 2400",
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:58 2009
+Message-Id: <20090701000358.308541097@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:57 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [patch 13/30] ALSA: ca0106 - Add missing registrations of vmaster controls
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch
+Content-Length: 1035
+Lines: 38
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 601e1cc5df940b59e71c947726640811897d30df upstream.
+
+Although the vmaster controls are created, they aren't registered thus
+they don't appear in the real world. Added the missing snd_ctl_add()
+calls.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/ca0106/ca0106_mixer.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/sound/pci/ca0106/ca0106_mixer.c
++++ b/sound/pci/ca0106/ca0106_mixer.c
+@@ -761,6 +761,9 @@ int __devinit snd_ca0106_mixer(struct sn
+ snd_ca0106_master_db_scale);
+ if (!vmaster)
+ return -ENOMEM;
++ err = snd_ctl_add(card, vmaster);
++ if (err < 0)
++ return err;
+ add_slaves(card, vmaster, slave_vols);
+
+ if (emu->details->spi_dac == 1) {
+@@ -768,6 +771,9 @@ int __devinit snd_ca0106_mixer(struct sn
+ NULL);
+ if (!vmaster)
+ return -ENOMEM;
++ err = snd_ctl_add(card, vmaster);
++ if (err < 0)
++ return err;
+ add_slaves(card, vmaster, slave_sws);
+ }
+ return 0;
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:58 2009
+Message-Id: <20090701000358.476669583@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:58 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Scott James Remnant <scott@canonical.com>,
+ Tim Gardner <tim.gardner@canonical.com>,
+ Bjorn Helgaas <bjorn.helgaas@hp.com>,
+ Philippe De Muyter <phdm@macqel.be>,
+ Kay Sievers <kay.sievers@vrfy.org>
+Subject: [patch 14/30] floppy: provide a PNP device table in the module.
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=floppy-provide-a-pnp-device-table-in-the-module.patch
+Content-Length: 1587
+Lines: 49
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Scott James Remnant <scott@canonical.com>
+
+commit 83f9ef463bcb4ba7b4fee1d6212fac7d277010d3 upstream.
+
+The missing device table means that the floppy module is not auto-loaded,
+even when the appropriate PNP device (0700) is found.
+
+We don't actually use the table in the module, since the device doesn't
+have a struct pnp_driver, but it's sufficient to cause an alias in the
+module that udev/modprobe will use.
+
+Signed-off-by: Scott James Remnant <scott@canonical.com>
+Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
+Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
+Cc: Philippe De Muyter <phdm@macqel.be>
+Acked-by: Kay Sievers <kay.sievers@vrfy.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/floppy.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/block/floppy.c
++++ b/drivers/block/floppy.c
+@@ -177,6 +177,7 @@ static int print_unex = 1;
+ #include <linux/interrupt.h>
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
++#include <linux/mod_devicetable.h>
+ #include <linux/buffer_head.h> /* for invalidate_buffers() */
+ #include <linux/mutex.h>
+
+@@ -4572,6 +4573,13 @@ MODULE_AUTHOR("Alain L. Knaff");
+ MODULE_SUPPORTED_DEVICE("fd");
+ MODULE_LICENSE("GPL");
+
++/* This doesn't actually get used other than for module information */
++static const struct pnp_device_id floppy_pnpids[] = {
++ { "PNP0700", 0 },
++ { }
++};
++MODULE_DEVICE_TABLE(pnp, floppy_pnpids);
++
+ #else
+
+ __setup("floppy=", floppy_setup);
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:58 2009
+Message-Id: <20090701000358.640178641@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:59 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Bjorn Helgaas <bjorn.helgaas@hp.com>,
+ Philippe De Muyter <phdm@macqel.be>,
+ Adam M Belay <abelay@mit.edu>,
+ Robert Hancock <hancockrwd@gmail.com>
+Subject: [patch 15/30] floppy: request and release only the ports we actually use
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=floppy-request-and-release-only-the-ports-we-actually-use.patch
+Content-Length: 5711
+Lines: 196
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Philippe De Muyter <phdm@macqel.be>
+
+commit 5a74db06cc8d36a325913aa4968ae169f997a466 upstream.
+
+The floppy driver requests an I/O port it doesn't need, and sometimes this
+causes a conflict with a motherboard device reported by PNPBIOS.
+
+This patch makes the floppy driver request and release only the ports it
+actually uses. It also factors out the request/release stuff and the
+io-ports list so they're all in one place now.
+
+The current floppy driver uses only these ports:
+
+ 0x3f2 (FD_DOR)
+ 0x3f4 (FD_STATUS)
+ 0x3f5 (FD_DATA)
+ 0x3f7 (FD_DCR/FD_DIR)
+
+but it requests 0x3f2-0x3f5 and 0x3f7, which includes the unused port
+0x3f3.
+
+Some BIOSes report 0x3f3 as a motherboard resource. The PNP system driver
+reserves that, which causes a conflict when the floppy driver requests
+0x3f2-0x3f5 later.
+
+Philippe reported that this conflict broke the floppy driver between
+2.6.11 and 2.6.22. His PNPBIOS reports these devices:
+
+ $ cat 00:07/id 00:07/resources # motherboard device
+ PNP0c02
+ state = active
+ io 0x80-0x80
+ io 0x10-0x1f
+ io 0x22-0x3f
+ io 0x44-0x5f
+ io 0x90-0x9f
+ io 0xa2-0xbf
+ io 0x3f0-0x3f1
+ io 0x3f3-0x3f3
+
+ $ cat 00:03/id 00:03/resources # floppy device
+ PNP0700
+ state = active
+ io 0x3f4-0x3f5
+ io 0x3f2-0x3f2
+
+Reference:
+ http://lkml.org/lkml/2009/1/31/162
+
+Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
+Signed-off-by: Philippe De Muyter <phdm@macqel.be>
+Reported-by: Philippe De Muyter <phdm@macqel.be>
+Tested-by: Philippe De Muyter <phdm@macqel.be>
+Cc: Adam M Belay <abelay@mit.edu>
+Cc: Robert Hancock <hancockrwd@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/floppy.c | 79 ++++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 52 insertions(+), 27 deletions(-)
+
+--- a/drivers/block/floppy.c
++++ b/drivers/block/floppy.c
+@@ -552,6 +552,8 @@ static void process_fd_request(void);
+ static void recalibrate_floppy(void);
+ static void floppy_shutdown(unsigned long);
+
++static int floppy_request_regions(int);
++static void floppy_release_regions(int);
+ static int floppy_grab_irq_and_dma(void);
+ static void floppy_release_irq_and_dma(void);
+
+@@ -4274,8 +4276,7 @@ static int __init floppy_init(void)
+ FDCS->rawcmd = 2;
+ if (user_reset_fdc(-1, FD_RESET_ALWAYS, 0)) {
+ /* free ioports reserved by floppy_grab_irq_and_dma() */
+- release_region(FDCS->address + 2, 4);
+- release_region(FDCS->address + 7, 1);
++ floppy_release_regions(fdc);
+ FDCS->address = -1;
+ FDCS->version = FDC_NONE;
+ continue;
+@@ -4284,8 +4285,7 @@ static int __init floppy_init(void)
+ FDCS->version = get_fdc_version();
+ if (FDCS->version == FDC_NONE) {
+ /* free ioports reserved by floppy_grab_irq_and_dma() */
+- release_region(FDCS->address + 2, 4);
+- release_region(FDCS->address + 7, 1);
++ floppy_release_regions(fdc);
+ FDCS->address = -1;
+ continue;
+ }
+@@ -4358,6 +4358,47 @@ out_put_disk:
+
+ static DEFINE_SPINLOCK(floppy_usage_lock);
+
++static const struct io_region {
++ int offset;
++ int size;
++} io_regions[] = {
++ { 2, 1 },
++ /* address + 3 is sometimes reserved by pnp bios for motherboard */
++ { 4, 2 },
++ /* address + 6 is reserved, and may be taken by IDE.
++ * Unfortunately, Adaptec doesn't know this :-(, */
++ { 7, 1 },
++};
++
++static void floppy_release_allocated_regions(int fdc, const struct io_region *p)
++{
++ while (p != io_regions) {
++ p--;
++ release_region(FDCS->address + p->offset, p->size);
++ }
++}
++
++#define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)]))
++
++static int floppy_request_regions(int fdc)
++{
++ const struct io_region *p;
++
++ for (p = io_regions; p < ARRAY_END(io_regions); p++) {
++ if (!request_region(FDCS->address + p->offset, p->size, "floppy")) {
++ DPRINT("Floppy io-port 0x%04lx in use\n", FDCS->address + p->offset);
++ floppy_release_allocated_regions(fdc, p);
++ return -EBUSY;
++ }
++ }
++ return 0;
++}
++
++static void floppy_release_regions(int fdc)
++{
++ floppy_release_allocated_regions(fdc, ARRAY_END(io_regions));
++}
++
+ static int floppy_grab_irq_and_dma(void)
+ {
+ unsigned long flags;
+@@ -4399,18 +4440,8 @@ static int floppy_grab_irq_and_dma(void)
+
+ for (fdc = 0; fdc < N_FDC; fdc++) {
+ if (FDCS->address != -1) {
+- if (!request_region(FDCS->address + 2, 4, "floppy")) {
+- DPRINT("Floppy io-port 0x%04lx in use\n",
+- FDCS->address + 2);
+- goto cleanup1;
+- }
+- if (!request_region(FDCS->address + 7, 1, "floppy DIR")) {
+- DPRINT("Floppy io-port 0x%04lx in use\n",
+- FDCS->address + 7);
+- goto cleanup2;
+- }
+- /* address + 6 is reserved, and may be taken by IDE.
+- * Unfortunately, Adaptec doesn't know this :-(, */
++ if (floppy_request_regions(fdc))
++ goto cleanup;
+ }
+ }
+ for (fdc = 0; fdc < N_FDC; fdc++) {
+@@ -4432,15 +4463,11 @@ static int floppy_grab_irq_and_dma(void)
+ fdc = 0;
+ irqdma_allocated = 1;
+ return 0;
+-cleanup2:
+- release_region(FDCS->address + 2, 4);
+-cleanup1:
++cleanup:
+ fd_free_irq();
+ fd_free_dma();
+- while (--fdc >= 0) {
+- release_region(FDCS->address + 2, 4);
+- release_region(FDCS->address + 7, 1);
+- }
++ while (--fdc >= 0)
++ floppy_release_regions(fdc);
+ spin_lock_irqsave(&floppy_usage_lock, flags);
+ usage_count--;
+ spin_unlock_irqrestore(&floppy_usage_lock, flags);
+@@ -4501,10 +4528,8 @@ static void floppy_release_irq_and_dma(v
+ #endif
+ old_fdc = fdc;
+ for (fdc = 0; fdc < N_FDC; fdc++)
+- if (FDCS->address != -1) {
+- release_region(FDCS->address + 2, 4);
+- release_region(FDCS->address + 7, 1);
+- }
++ if (FDCS->address != -1)
++ floppy_release_regions(fdc);
+ fdc = old_fdc;
+ }
+
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:58 2009
+Message-Id: <20090701000358.828625631@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:00 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jack Morgenstein <jackm@dev.mellanox.co.il>,
+ Roland Dreier <rolandd@cisco.com>
+Subject: [patch 16/30] IB/mlx4: Add strong ordering to local inval and fast reg work requests
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch
+Content-Length: 1887
+Lines: 54
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Jack Morgenstein <jackm@dev.mellanox.co.il>
+
+commit 2ac6bf4ddc87c3b6b609f8fa82f6ebbffeac12f4 upstream.
+
+The ConnectX Programmer's Reference Manual states that the "SO" bit
+must be set when posting Fast Register and Local Invalidate send work
+requests. When this bit is set, the work request will be executed
+only after all previous work requests on the send queue have been
+executed. (If the bit is not set, Fast Register and Local Invalidate
+WQEs may begin execution too early, which violates the defined
+semantics for these operations)
+
+This fixes the issue with NFS/RDMA reported in
+<http://lists.openfabrics.org/pipermail/general/2009-April/059253.html>
+
+Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
+Signed-off-by: Roland Dreier <rolandd@cisco.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/infiniband/hw/mlx4/qp.c | 4 ++++
+ include/linux/mlx4/qp.h | 1 +
+ 2 files changed, 5 insertions(+)
+
+--- a/drivers/infiniband/hw/mlx4/qp.c
++++ b/drivers/infiniband/hw/mlx4/qp.c
+@@ -1563,12 +1563,16 @@ int mlx4_ib_post_send(struct ib_qp *ibqp
+ break;
+
+ case IB_WR_LOCAL_INV:
++ ctrl->srcrb_flags |=
++ cpu_to_be32(MLX4_WQE_CTRL_STRONG_ORDER);
+ set_local_inv_seg(wqe, wr->ex.invalidate_rkey);
+ wqe += sizeof (struct mlx4_wqe_local_inval_seg);
+ size += sizeof (struct mlx4_wqe_local_inval_seg) / 16;
+ break;
+
+ case IB_WR_FAST_REG_MR:
++ ctrl->srcrb_flags |=
++ cpu_to_be32(MLX4_WQE_CTRL_STRONG_ORDER);
+ set_fmr_seg(wqe, wr);
+ wqe += sizeof (struct mlx4_wqe_fmr_seg);
+ size += sizeof (struct mlx4_wqe_fmr_seg) / 16;
+--- a/include/linux/mlx4/qp.h
++++ b/include/linux/mlx4/qp.h
+@@ -165,6 +165,7 @@ enum {
+ MLX4_WQE_CTRL_IP_CSUM = 1 << 4,
+ MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5,
+ MLX4_WQE_CTRL_INS_VLAN = 1 << 6,
++ MLX4_WQE_CTRL_STRONG_ORDER = 1 << 7,
+ };
+
+ struct mlx4_wqe_ctrl_seg {
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:59 2009
+Message-Id: <20090701000358.988293686@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:01 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Yinghai Lu <yinghai@kernel.org>,
+ "H. Peter Anvin" <hpa@zytor.com>
+Subject: [patch 17/30] x86: handle initrd that extends into unusable memory
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=x86-handle-initrd-that-extends-into-unusable-memory.patch
+Content-Length: 2135
+Lines: 72
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Yinghai Lu <yinghai@kernel.org>
+
+commit 8c5dd8f43367f4f266dd616f11658005bc2d20ef upstream.
+
+On a system where system memory (according e820) is not covered by
+mtrr, mtrr_trim_memory converts a portion of memory to reserved, but
+bootloader has already put the initrd in that range.
+
+Thus, we need to have 64bit to use relocate_initrd too.
+
+[ Impact: fix using initrd when mtrr_trim_memory happen ]
+
+Signed-off-by: Yinghai Lu <yinghai@kernel.org>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/setup.c | 15 +++------------
+ 1 file changed, 3 insertions(+), 12 deletions(-)
+
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -250,15 +250,13 @@ static inline void copy_edd(void)
+
+ #ifdef CONFIG_BLK_DEV_INITRD
+
+-#ifdef CONFIG_X86_32
+-
+ #define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT)
+ static void __init relocate_initrd(void)
+ {
+
+ u64 ramdisk_image = boot_params.hdr.ramdisk_image;
+ u64 ramdisk_size = boot_params.hdr.ramdisk_size;
+- u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT;
++ u64 end_of_lowmem = max_low_pfn_mapped << PAGE_SHIFT;
+ u64 ramdisk_here;
+ unsigned long slop, clen, mapaddr;
+ char *p, *q;
+@@ -314,14 +312,13 @@ static void __init relocate_initrd(void)
+ ramdisk_image, ramdisk_image + ramdisk_size - 1,
+ ramdisk_here, ramdisk_here + ramdisk_size - 1);
+ }
+-#endif
+
+ static void __init reserve_initrd(void)
+ {
+ u64 ramdisk_image = boot_params.hdr.ramdisk_image;
+ u64 ramdisk_size = boot_params.hdr.ramdisk_size;
+ u64 ramdisk_end = ramdisk_image + ramdisk_size;
+- u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT;
++ u64 end_of_lowmem = max_low_pfn_mapped << PAGE_SHIFT;
+
+ if (!boot_params.hdr.type_of_loader ||
+ !ramdisk_image || !ramdisk_size)
+@@ -351,14 +348,8 @@ static void __init reserve_initrd(void)
+ return;
+ }
+
+-#ifdef CONFIG_X86_32
+ relocate_initrd();
+-#else
+- printk(KERN_ERR "initrd extends beyond end of memory "
+- "(0x%08llx > 0x%08llx)\ndisabling initrd\n",
+- ramdisk_end, end_of_lowmem);
+- initrd_start = 0;
+-#endif
++
+ free_early(ramdisk_image, ramdisk_end);
+ }
+ #else
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:59 2009
+Message-Id: <20090701000359.166987776@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:02 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Peter Zijlstra <a.p.zijlstra@chello.nl>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 18/30] lockdep: Select frame pointers on x86
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=lockdep-select-frame-pointers-on-x86.patch
+Content-Length: 925
+Lines: 30
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Peter Zijlstra <a.p.zijlstra@chello.nl>
+
+commit 00540e5d54be972a94a3b2ce6da8621bebe731a2 upstream.
+
+x86 stack traces are a piece of crap without frame pointers, and its not
+like the 'performance gain' of not having stack pointers matters when you
+selected lockdep.
+
+Reported-by: Andrew Morton <akpm@linux-foundation.org>
+LKML-Reference: <new-submission>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ lib/Kconfig.debug | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
+@@ -394,7 +394,7 @@ config LOCKDEP
+ bool
+ depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
+ select STACKTRACE
+- select FRAME_POINTER if !X86 && !MIPS && !PPC
++ select FRAME_POINTER if !MIPS && !PPC
+ select KALLSYMS
+ select KALLSYMS_ALL
+
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:59 2009
+Message-Id: <20090701000359.325415307@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:03 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dan Williams <dan.j.williams@intel.com>,
+ NeilBrown <neilb@suse.de>
+Subject: [patch 19/30] md/raid5: add missing call to schedule() after prepare_to_wait()
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=md-raid5-add-missing-call-to-schedule-after-prepare_to_wait.patch
+Content-Length: 911
+Lines: 31
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Dan Williams <dan.j.williams@intel.com>
+
+commit 7a3ab908948b6296ee7e81d42f7c176361c51975 upstream.
+
+In the unlikely event that reshape progresses past the current request
+while it is waiting for a stripe we need to schedule() before retrying
+for 2 reasons:
+1/ Prevent list corruption from duplicated list_add() calls without
+ intervening list_del().
+2/ Give the reshape code a chance to make some progress to resolve the
+ conflict.
+
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/raid5.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -3431,6 +3431,7 @@ static int make_request(struct request_q
+ spin_unlock_irq(&conf->device_lock);
+ if (must_retry) {
+ release_stripe(sh);
++ schedule();
+ goto retry;
+ }
+ }
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:59 2009
+Message-Id: <20090701000359.496473288@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:04 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Tom Quetchenbach <virtualphtn@gmail.com>,
+ "David S. Miller" <davem@davemloft.net>,
+ Willy Tarreau <w@1wt.eu>
+Subject: [patch 20/30] tcp: advertise MSS requested by user
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=tcp-advertise-mss-requested-by-user.patch
+Content-Length: 3499
+Lines: 99
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Tom Quetchenbach <virtualphtn@gmail.com>
+
+commit f5fff5dc8a7a3f395b0525c02ba92c95d42b7390 upstream.
+
+I'm trying to use the TCP_MAXSEG option to setsockopt() to set the MSS
+for both sides of a bidirectional connection.
+
+man tcp says: "If this option is set before connection establishment, it
+also changes the MSS value announced to the other end in the initial
+packet."
+
+However, the kernel only uses the MTU/route cache to set the advertised
+MSS. That means if I set the MSS to, say, 500 before calling connect(),
+I will send at most 500-byte packets, but I will still receive 1500-byte
+packets in reply.
+
+This is a bug, either in the kernel or the documentation.
+
+This patch (applies to latest net-2.6) reduces the advertised value to
+that requested by the user as long as setsockopt() is called before
+connect() or accept(). This seems like the behavior that one would
+expect as well as that which is documented.
+
+I've tried to make sure that things that depend on the advertised MSS
+are set correctly.
+
+Signed-off-by: Tom Quetchenbach <virtualphtn@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Willy Tarreau <w@1wt.eu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/tcp_ipv4.c | 4 ++++
+ net/ipv4/tcp_output.c | 13 ++++++++++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+--- a/net/ipv4/tcp_ipv4.c
++++ b/net/ipv4/tcp_ipv4.c
+@@ -1364,6 +1364,10 @@ struct sock *tcp_v4_syn_recv_sock(struct
+ tcp_mtup_init(newsk);
+ tcp_sync_mss(newsk, dst_mtu(dst));
+ newtp->advmss = dst_metric(dst, RTAX_ADVMSS);
++ if (tcp_sk(sk)->rx_opt.user_mss &&
++ tcp_sk(sk)->rx_opt.user_mss < newtp->advmss)
++ newtp->advmss = tcp_sk(sk)->rx_opt.user_mss;
++
+ tcp_initialize_rcv_mss(newsk);
+
+ #ifdef CONFIG_TCP_MD5SIG
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -2252,6 +2252,7 @@ struct sk_buff *tcp_make_synack(struct s
+ struct sk_buff *skb;
+ struct tcp_md5sig_key *md5;
+ __u8 *md5_hash_location;
++ int mss;
+
+ skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15, 1, GFP_ATOMIC);
+ if (skb == NULL)
+@@ -2262,13 +2263,17 @@ struct sk_buff *tcp_make_synack(struct s
+
+ skb->dst = dst_clone(dst);
+
++ mss = dst_metric(dst, RTAX_ADVMSS);
++ if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < mss)
++ mss = tp->rx_opt.user_mss;
++
+ if (req->rcv_wnd == 0) { /* ignored for retransmitted syns */
+ __u8 rcv_wscale;
+ /* Set this up on the first call only */
+ req->window_clamp = tp->window_clamp ? : dst_metric(dst, RTAX_WINDOW);
+ /* tcp_full_space because it is guaranteed to be the first packet */
+ tcp_select_initial_window(tcp_full_space(sk),
+- dst_metric(dst, RTAX_ADVMSS) - (ireq->tstamp_ok ? TCPOLEN_TSTAMP_ALIGNED : 0),
++ mss - (ireq->tstamp_ok ? TCPOLEN_TSTAMP_ALIGNED : 0),
+ &req->rcv_wnd,
+ &req->window_clamp,
+ ireq->wscale_ok,
+@@ -2283,8 +2288,7 @@ struct sk_buff *tcp_make_synack(struct s
+ else
+ #endif
+ TCP_SKB_CB(skb)->when = tcp_time_stamp;
+- tcp_header_size = tcp_synack_options(sk, req,
+- dst_metric(dst, RTAX_ADVMSS),
++ tcp_header_size = tcp_synack_options(sk, req, mss,
+ skb, &opts, &md5) +
+ sizeof(struct tcphdr);
+
+@@ -2353,6 +2357,9 @@ static void tcp_connect_init(struct sock
+ if (!tp->window_clamp)
+ tp->window_clamp = dst_metric(dst, RTAX_WINDOW);
+ tp->advmss = dst_metric(dst, RTAX_ADVMSS);
++ if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < tp->advmss)
++ tp->advmss = tp->rx_opt.user_mss;
++
+ tcp_initialize_rcv_mss(sk);
+
+ tcp_select_initial_window(tcp_full_space(sk),
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:59 2009
+Message-Id: <20090701000359.669419440@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:05 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jens Rottmann <JRottmann@LiPPERTEmbedded.de>,
+ Alan Cox <alan@linux.intel.com>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 21/30] parport_pc: after superio probing restore original register values
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=parport_pc-after-superio-probing-restore-original-register-values.patch
+Content-Length: 4217
+Lines: 130
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Jens Rottmann <JRottmann@LiPPERTEmbedded.de>
+
+commit e2434dc1c19412639dd047a4d4eff8ed0e5d0d50 upstream.
+
+CONFIG_PARPORT_PC_SUPERIO probes for various superio chips by writing
+byte sequences to a set of different potential I/O ranges. But the
+probed ranges are not exclusive to parallel ports. Some of our boards
+just happen to have a watchdog in one of them. Took us almost a week
+to figure out why some distros reboot without warning after running
+flawlessly for 3 hours. For exactly 170 = 0xAA minutes, that is ...
+
+Fixed by restoring original values after probing. Also fixed too small
+request_region() in detect_and_report_it87().
+
+Signed-off-by: Jens Rottmann <JRottmann@LiPPERTEmbedded.de>
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Acked-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/parport/parport_pc.c | 31 +++++++++++++++++++++++++------
+ 1 file changed, 25 insertions(+), 6 deletions(-)
+
+--- a/drivers/parport/parport_pc.c
++++ b/drivers/parport/parport_pc.c
+@@ -1413,11 +1413,13 @@ static void __devinit decode_smsc(int ef
+
+ static void __devinit winbond_check(int io, int key)
+ {
+- int devid,devrev,oldid,x_devid,x_devrev,x_oldid;
++ int origval, devid, devrev, oldid, x_devid, x_devrev, x_oldid;
+
+ if (!request_region(io, 3, __func__))
+ return;
+
++ origval = inb(io); /* Save original value */
++
+ /* First probe without key */
+ outb(0x20,io);
+ x_devid=inb(io+1);
+@@ -1437,6 +1439,8 @@ static void __devinit winbond_check(int
+ oldid=inb(io+1);
+ outb(0xaa,io); /* Magic Seal */
+
++ outb(origval, io); /* in case we poked some entirely different hardware */
++
+ if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid))
+ goto out; /* protection against false positives */
+
+@@ -1447,11 +1451,15 @@ out:
+
+ static void __devinit winbond_check2(int io,int key)
+ {
+- int devid,devrev,oldid,x_devid,x_devrev,x_oldid;
++ int origval[3], devid, devrev, oldid, x_devid, x_devrev, x_oldid;
+
+ if (!request_region(io, 3, __func__))
+ return;
+
++ origval[0] = inb(io); /* Save original values */
++ origval[1] = inb(io + 1);
++ origval[2] = inb(io + 2);
++
+ /* First probe without the key */
+ outb(0x20,io+2);
+ x_devid=inb(io+2);
+@@ -1470,6 +1478,10 @@ static void __devinit winbond_check2(int
+ oldid=inb(io+2);
+ outb(0xaa,io); /* Magic Seal */
+
++ outb(origval[0], io); /* in case we poked some entirely different hardware */
++ outb(origval[1], io + 1);
++ outb(origval[2], io + 2);
++
+ if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid))
+ goto out; /* protection against false positives */
+
+@@ -1480,11 +1492,13 @@ out:
+
+ static void __devinit smsc_check(int io, int key)
+ {
+- int id,rev,oldid,oldrev,x_id,x_rev,x_oldid,x_oldrev;
++ int origval, id, rev, oldid, oldrev, x_id, x_rev, x_oldid, x_oldrev;
+
+ if (!request_region(io, 3, __func__))
+ return;
+
++ origval = inb(io); /* Save original value */
++
+ /* First probe without the key */
+ outb(0x0d,io);
+ x_oldid=inb(io+1);
+@@ -1508,6 +1522,8 @@ static void __devinit smsc_check(int io,
+ rev=inb(io+1);
+ outb(0xaa,io); /* Magic Seal */
+
++ outb(origval, io); /* in case we poked some entirely different hardware */
++
+ if ((x_id == id) && (x_oldrev == oldrev) &&
+ (x_oldid == oldid) && (x_rev == rev))
+ goto out; /* protection against false positives */
+@@ -1544,11 +1560,12 @@ static void __devinit detect_and_report_
+ static void __devinit detect_and_report_it87(void)
+ {
+ u16 dev;
+- u8 r;
++ u8 origval, r;
+ if (verbose_probing)
+ printk(KERN_DEBUG "IT8705 Super-IO detection, now testing port 2E ...\n");
+- if (!request_region(0x2e, 1, __func__))
++ if (!request_region(0x2e, 2, __func__))
+ return;
++ origval = inb(0x2e); /* Save original value */
+ outb(0x87, 0x2e);
+ outb(0x01, 0x2e);
+ outb(0x55, 0x2e);
+@@ -1568,8 +1585,10 @@ static void __devinit detect_and_report_
+ outb(r | 8, 0x2F);
+ outb(0x02, 0x2E); /* Lock */
+ outb(0x02, 0x2F);
++ } else {
++ outb(origval, 0x2e); /* Oops, sorry to disturb */
+ }
+- release_region(0x2e, 1);
++ release_region(0x2e, 2);
+ }
+ #endif /* CONFIG_PARPORT_PC_SUPERIO */
+
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:59 2009
+Message-Id: <20090701000359.818617936@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:06 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
+ Alan Cox <alan@linux.intel.com>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 22/30] parport_pc: set properly the dma_mask for parport_pc device
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=parport_pc-set-properly-the-dma_mask-for-parport_pc-device.patch
+Content-Length: 1667
+Lines: 44
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+
+commit dfa7c4d869b7d3d37b70f1de856f2901b6ebfcf0 upstream.
+
+parport_pc_probe_port() creates the own 'parport_pc' device if the
+device argument is NULL. Then parport_pc_probe_port() doesn't
+initialize the dma_mask and coherent_dma_mask of the device and calls
+dma_alloc_coherent with it. dma_alloc_coherent fails because
+dma_alloc_coherent() doesn't accept the uninitialized dma_mask:
+
+http://lkml.org/lkml/2009/6/16/150
+
+Long ago, X86_32 and X86_64 had the own dma_alloc_coherent
+implementations; X86_32 accepted a device having dma_mask that is not
+initialized however X86_64 didn't. When we merged them, we chose to
+prohibit a device having dma_mask that is not initialized. I think
+that it's good to require drivers to set up dma_mask (and
+coherent_dma_mask) properly if the drivers want DMA.
+
+Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Reported-by: Malcom Blaney <malcolm.blaney@maptek.com.au>
+Tested-by: Malcom Blaney <malcolm.blaney@maptek.com.au>
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Acked-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/parport/parport_pc.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/parport/parport_pc.c
++++ b/drivers/parport/parport_pc.c
+@@ -2211,6 +2211,9 @@ struct parport *parport_pc_probe_port (u
+ if (IS_ERR(pdev))
+ return NULL;
+ dev = &pdev->dev;
++
++ dev->coherent_dma_mask = DMA_BIT_MASK(24);
++ dev->dma_mask = &dev->coherent_dma_mask;
+ }
+
+ ops = kmalloc(sizeof (struct parport_operations), GFP_KERNEL);
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:04:00 2009
+Message-Id: <20090701000359.976817296@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:07 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "Rafael J. Wysocki" <rjw@sisk.pl>,
+ Jesse Barnes <jbarnes@virtuousgeek.org>
+Subject: [patch 23/30] PCI PM: Fix handling of devices without PM support by pci_target_state()
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=pci-pm-fix-handling-of-devices-without-pm-support-by-pci_target_state.patch
+Content-Length: 1472
+Lines: 44
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Rafael J. Wysocki <rjw@sisk.pl>
+
+commit d2abdf62882d982c58e7a6b09ecdcfcc28075e2e upstream.
+
+If a PCI device is not power-manageable either by the platform, or
+with the help of the native PCI PM interface, pci_target_state() will
+return either PCI_D3hot, or PCI_POWER_ERROR for it, depending on
+whether or not the device is configured to wake up the system. Alas,
+none of these return values is correct, because each of them causes
+pci_prepare_to_sleep() to return error code, although it should
+complete successfully in such a case.
+
+Fix this problem by making pci_target_state() always return PCI_D0
+for devices that cannot be power managed.
+
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pci/pci.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/drivers/pci/pci.c
++++ b/drivers/pci/pci.c
+@@ -1184,15 +1184,14 @@ pci_power_t pci_target_state(struct pci_
+ default:
+ target_state = state;
+ }
++ } else if (!dev->pm_cap) {
++ target_state = PCI_D0;
+ } else if (device_may_wakeup(&dev->dev)) {
+ /*
+ * Find the deepest state from which the device can generate
+ * wake-up events, make it the target state and enable device
+ * to generate PME#.
+ */
+- if (!dev->pm_cap)
+- return PCI_POWER_ERROR;
+-
+ if (dev->pme_support) {
+ while (target_state
+ && !(dev->pme_support & (1 << target_state)))
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:04:00 2009
+Message-Id: <20090701000400.146322438@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:08 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "Rafael J. Wysocki" <rjw@sisk.pl>,
+ Jesse Barnes <jbarnes@virtuousgeek.org>
+Subject: [patch 24/30] PCI PM: Follow PCI_PM_CTRL_NO_SOFT_RESET during transitions from D3
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=pci-pm-follow-pci_pm_ctrl_no_soft_reset-during-transitions-from-d3.patch
+Content-Length: 1442
+Lines: 38
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Rafael J. Wysocki <rjw@sisk.pl>
+
+commit f62795f1e892ca9269849fa83de97621da7e02c0 upstream.
+
+According to the PCI PM specification (PCI Bus Power Management
+Interface Specification, Rev. 1.2, Section 5.4.1) we are supposed to
+reinitialize devices that have PCI_PM_CTRL_NO_SOFT_RESET clear during
+all transitions from PCI_D3hot to PCI_D0, but we only do it if the
+device's current_state field is equal to PCI_UNKNOWN.
+
+This may lead to problems if a device with PCI_PM_CTRL_NO_SOFT_RESET
+unset is put into PCI_D3hot at run time by its driver and
+pci_set_power_state() is used to put it back into PCI_D0, because in
+that case the device will remain uninitialized after
+pci_set_power_state() has returned. Prevent that from happening by
+modifying pci_raw_set_power_state() to reinitialize devices with
+PCI_PM_CTRL_NO_SOFT_RESET unset during all transitions from D3 to D0.
+
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pci/pci.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/pci/pci.c
++++ b/drivers/pci/pci.c
+@@ -473,6 +473,8 @@ pci_raw_set_power_state(struct pci_dev *
+ pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
+ pmcsr |= state;
+ break;
++ case PCI_D3hot:
++ case PCI_D3cold:
+ case PCI_UNKNOWN: /* Boot-up */
+ if ((pmcsr & PCI_PM_CTRL_STATE_MASK) == PCI_D3hot
+ && !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET))
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:04:00 2009
+Message-Id: <20090701000400.308901757@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:09 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jiri Slaby <jirislaby@gmail.com>,
+ Alan Cox <alan@linux.intel.com>
+Subject: [patch 25/30] pcmcia/cm4000: fix lock imbalance
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=pcmcia-cm4000-fix-lock-imbalance.patch
+Content-Length: 777
+Lines: 28
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Jiri Slaby <jirislaby@gmail.com>
+
+commit 69ae59d7d8df14413cf0a97b3e372d7dc8352563 upstream.
+
+Don't return from switch/case, break instead, so that we unlock BKL.
+
+Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/pcmcia/cm4000_cs.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/char/pcmcia/cm4000_cs.c
++++ b/drivers/char/pcmcia/cm4000_cs.c
+@@ -1575,7 +1575,8 @@ static long cmm_ioctl(struct file *filp,
+ clear_bit(LOCK_IO, &dev->flags);
+ wake_up_interruptible(&dev->ioq);
+
+- return 0;
++ rc = 0;
++ break;
+ case CM_IOCSPTS:
+ {
+ struct ptsreq krnptsreq;
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:04:00 2009
+Message-Id: <20090701000400.480520283@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:10 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Clemens Ladisch <clemens@ladisch.de>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [patch 26/30] sound: seq_midi_event: fix decoding of (N)RPN events
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=sound-seq_midi_event-fix-decoding-of-rpn-events.patch
+Content-Length: 1289
+Lines: 34
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Clemens Ladisch <clemens@ladisch.de>
+
+commit 6423f9ea8035138d70bae1a278d3b57b743f8b3e upstream.
+
+When decoding (N)RPN sequencer events into raw MIDI commands, the
+extra_decode_xrpn() function had accidentally swapped the MSB and LSB
+controller values of both the parameter number and the data value.
+
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/core/seq/seq_midi_event.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/sound/core/seq/seq_midi_event.c
++++ b/sound/core/seq/seq_midi_event.c
+@@ -504,10 +504,10 @@ static int extra_decode_xrpn(struct snd_
+ if (dev->nostat && count < 12)
+ return -ENOMEM;
+ cmd = MIDI_CMD_CONTROL|(ev->data.control.channel & 0x0f);
+- bytes[0] = ev->data.control.param & 0x007f;
+- bytes[1] = (ev->data.control.param & 0x3f80) >> 7;
+- bytes[2] = ev->data.control.value & 0x007f;
+- bytes[3] = (ev->data.control.value & 0x3f80) >> 7;
++ bytes[0] = (ev->data.control.param & 0x3f80) >> 7;
++ bytes[1] = ev->data.control.param & 0x007f;
++ bytes[2] = (ev->data.control.value & 0x3f80) >> 7;
++ bytes[3] = ev->data.control.value & 0x007f;
+ if (cmd != dev->lastcmd && !dev->nostat) {
+ if (count < 9)
+ return -ENOMEM;
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:04:00 2009
+Message-Id: <20090701000400.649668117@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:11 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dimitri Sivanich <sivanich@sgi.com>,
+ Christoph Lameter <cl@linux-foundation.org>,
+ Nick Piggin <nickpiggin@yahoo.com.au>,
+ Mel Gorman <mel@csn.ul.ie>
+Subject: [patch 27/30] mm: fix handling of pagesets for downed cpus
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=mm-fix-handling-of-pagesets-for-downed-cpus.patch
+Content-Length: 1836
+Lines: 58
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Dimitri Sivanich <sivanich@sgi.com>
+
+commit 364df0ebfbbb1330bfc6ca159f4d6020efc15a12 upstream.
+
+After downing/upping a cpu, an attempt to set
+/proc/sys/vm/percpu_pagelist_fraction results in an oops in
+percpu_pagelist_fraction_sysctl_handler().
+
+If a processor is downed then we need to set the pageset pointer back to
+the boot pageset.
+
+Updates of the high water marks should not access pagesets of unpopulated
+zones (those pointer go to the boot pagesets which would be no longer
+functional if their size would be increased beyond zero).
+
+Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
+Signed-off-by: Christoph Lameter <cl@linux-foundation.org>
+Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
+Cc: Nick Piggin <nickpiggin@yahoo.com.au>
+Cc: Mel Gorman <mel@csn.ul.ie>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/page_alloc.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -2764,7 +2764,7 @@ bad:
+ if (dzone == zone)
+ break;
+ kfree(zone_pcp(dzone, cpu));
+- zone_pcp(dzone, cpu) = NULL;
++ zone_pcp(dzone, cpu) = &boot_pageset[cpu];
+ }
+ return -ENOMEM;
+ }
+@@ -2779,7 +2779,7 @@ static inline void free_zone_pagesets(in
+ /* Free per_cpu_pageset if it is slab allocated */
+ if (pset != &boot_pageset[cpu])
+ kfree(pset);
+- zone_pcp(zone, cpu) = NULL;
++ zone_pcp(zone, cpu) = &boot_pageset[cpu];
+ }
+ }
+
+@@ -4409,6 +4409,8 @@ int percpu_pagelist_fraction_sysctl_hand
+ if (!write || (ret == -EINVAL))
+ return ret;
+ for_each_zone(zone) {
++ if (!populated_zone(zone))
++ continue;
+ for_each_online_cpu(cpu) {
+ unsigned long high;
+ high = zone->present_pages / percpu_pagelist_fraction;
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:04:00 2009
+Message-Id: <20090701000400.797655009@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:12 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mikulas Patocka <mpatocka@redhat.com>,
+ Alasdair G Kergon <agk@redhat.com>
+Subject: [patch 28/30] dm mpath: validate hw_handler argument count
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=dm-mpath-validate-hw_handler-argument-count.patch
+Content-Length: 804
+Lines: 29
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit e094f4f15f5169526c7200b9bde44b900548a81e upstream.
+
+Fix arg count parsing error in hw handlers.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/dm-mpath.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/md/dm-mpath.c
++++ b/drivers/md/dm-mpath.c
+@@ -684,6 +684,11 @@ static int parse_hw_handler(struct arg_s
+ if (!hw_argc)
+ return 0;
+
++ if (hw_argc > as->argc) {
++ ti->error = "not enough arguments for hardware handler";
++ return -EINVAL;
++ }
++
+ m->hw_handler_name = kstrdup(shift(as), GFP_KERNEL);
+ request_module("scsi_dh_%s", m->hw_handler_name);
+ if (scsi_dh_handler_exist(m->hw_handler_name) == 0) {
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:04:01 2009
+Message-Id: <20090701000400.977850179@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:13 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mikulas Patocka <mpatocka@redhat.com>,
+ Alasdair G Kergon <agk@redhat.com>
+Subject: [patch 29/30] dm mpath: validate table argument count
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=dm-mpath-validate-table-argument-count.patch
+Content-Length: 1060
+Lines: 36
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit 0e0497c0c017664994819f4602dc07fd95896c52 upstream.
+
+The parser reads the argument count as a number but doesn't check that
+sufficient arguments are supplied. This command triggers the bug:
+
+dmsetup create mpath --table "0 `blockdev --getsize /dev/mapper/cr0`
+ multipath 0 0 2 1 round-robin 1000 0 1 1 /dev/mapper/cr0
+ round-robin 0 1 1 /dev/mapper/cr1 1000"
+kernel BUG at drivers/md/dm-mpath.c:530!
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/dm-mpath.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/md/dm-mpath.c
++++ b/drivers/md/dm-mpath.c
+@@ -540,6 +540,12 @@ static int parse_path_selector(struct ar
+ return -EINVAL;
+ }
+
++ if (ps_argc > as->argc) {
++ dm_put_path_selector(pst);
++ ti->error = "not enough arguments for path selector";
++ return -EINVAL;
++ }
++
+ r = pst->create(&pg->ps, ps_argc, as->argv);
+ if (r) {
+ dm_put_path_selector(pst);
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:04:01 2009
+Message-Id: <20090701000401.164726524@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 17:00:14 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Milan Broz <mbroz@redhat.com>,
+ Alasdair G Kergon <agk@redhat.com>
+Subject: [patch 30/30] dm: sysfs skip output when device is being destroyed
+References: <20090630235944.868879272@mini.kroah.org>
+Content-Disposition: inline; filename=dm-sysfs-skip-output-when-device-is-being-destroyed.patch
+Content-Length: 740
+Lines: 32
+
+2.6.27-stable review patch. If anyone has any objections, please let us know.
+
+------------------
+
+From: Milan Broz <mbroz@redhat.com>
+
+commit 4d89b7b4e4726893453d0fb4ddbb5b3e16353994 upstream.
+
+Do not process sysfs attributes when device is being destroyed.
+
+Otherwise code can cause
+ BUG_ON(test_bit(DMF_FREEING, &md->flags));
+in dm_put() call.
+
+Signed-off-by: Milan Broz <mbroz@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/dm.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/md/dm.c
++++ b/drivers/md/dm.c
+@@ -265,6 +265,10 @@ static int dm_blk_open(struct inode *ino
+ goto out;
+ }
+
++ if (test_bit(DMF_FREEING, &md->flags) ||
++ test_bit(DMF_DELETING, &md->flags))
++ return NULL;
++
+ dm_get(md);
+ atomic_inc(&md->open_count);
+
+
+
+From gregkh@mini.kroah.org Tue Jun 30 17:03:56 2009
+Message-Id: <20090630235944.868879272@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Tue, 30 Jun 2009 16:59:44 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk
+Subject: [patch 00/30] 2.6.27-stable review
+Content-Length: 2370
+Lines: 54
+
+This is the start of the stable review cycle for the 2.6.27.26 release.
+There are 30 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 Friday, Jul 3, 00:00:00 2009 UTC.
+Anything received after that time might be too late.
+
+The whole patch series can be found in one patch at:
+ kernel.org/pub/linux/kernel/v2.6/stable-review/patch-2.6.27.26-rc1.gz
+and the diffstat can be found below.
+
+
+thanks,
+
+greg k-h
+
+ Makefile | 2 +-
+ arch/x86/kernel/reboot.c | 18 ++++++++
+ arch/x86/kernel/setup.c | 15 +-----
+ drivers/block/floppy.c | 87 ++++++++++++++++++++++++++------------
+ drivers/char/moxa.c | 7 +++-
+ drivers/char/mxser.c | 2 +-
+ drivers/char/pcmcia/cm4000_cs.c | 3 +-
+ drivers/firmware/memmap.c | 16 ++++---
+ drivers/infiniband/hw/mlx4/qp.c | 4 ++
+ drivers/isdn/hisax/hfc_pci.c | 41 +++++++++++++-----
+ drivers/isdn/hisax/hisax.h | 2 +-
+ drivers/md/dm-mpath.c | 11 +++++
+ drivers/md/dm.c | 4 ++
+ drivers/md/raid5.c | 1 +
+ drivers/net/bonding/bond_sysfs.c | 1 +
+ drivers/net/r8169.c | 11 ++---
+ drivers/parport/parport_pc.c | 34 ++++++++++++---
+ drivers/parport/parport_serial.c | 30 +++++++++++--
+ drivers/pci/pci.c | 7 ++-
+ drivers/pci/pcie/aspm.c | 4 ++
+ drivers/video/atmel_lcdfb.c | 10 +----
+ fs/jbd/commit.c | 6 ++-
+ include/linux/firmware-map.h | 12 ++----
+ include/linux/mlx4/qp.h | 1 +
+ lib/Kconfig.debug | 2 +-
+ mm/page_alloc.c | 6 ++-
+ net/ipv4/tcp_ipv4.c | 4 ++
+ net/ipv4/tcp_output.c | 13 ++++-
+ sound/core/seq/seq_midi_event.c | 8 ++--
+ sound/pci/ca0106/ca0106_mixer.c | 6 +++
+ 30 files changed, 258 insertions(+), 110 deletions(-)
+