]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
add mbox file for 2.6.20.2 review
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 7 Mar 2007 18:29:24 +0000 (10:29 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 7 Mar 2007 18:29:24 +0000 (10:29 -0800)
queue-2.6.20/mbox [new file with mode: 0644]

diff --git a/queue-2.6.20/mbox b/queue-2.6.20/mbox
new file mode 100644 (file)
index 0000000..14e3a05
--- /dev/null
@@ -0,0 +1,9768 @@
+From gregkh@mini.kroah.org Wed Mar  7 09:06:10 2007
+Message-Id: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:23 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk
+Subject: [patch 000/101] 2.6.20-stable review
+Status: RO
+Content-Length: 822
+Lines: 22
+
+After many weeks of backlogs, I've finally flushed out all of the
+pending -stable patches, bringing this series to a whopping 101 patches
+pending for the next 2.6.20.2 release.
+
+If everyone could please take the time to review them and let me know if
+there are any issues with any of these being applied.
+
+Also, if there are any patches that I am somehow missing that should go
+into the 2.6.20-stable tree, please forward them on to the
+stable@kernel.org alias.
+
+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 March 9, 17:00:00 UTC.  Anything
+received after that time might be too late.
+
+thanks,
+
+greg k-h
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:10 2007
+Message-Id: <20070307170610.531145296@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:24 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mark Fasheh <mark.fasheh@oracle.com>,
+ Chris Wright <chrisw@sous-sol.org>
+Subject: [patch 001/101] ocfs2: ocfs2_link() journal credits update
+Content-Disposition: inline; filename=ocfs2-ocfs2_link-journal-credits-update.patch
+Content-Length: 1129
+Lines: 27
+
+Commit 592282cf2eaa33409c6511ddd3f3ecaa57daeaaa fixed some missing directory
+c/mtime updates in part by introducing a dinode update in ocfs2_add_entry().
+Unfortunately, ocfs2_link() (which didn't update the directory inode before)
+is now missing a single journal credit. Fix this by doubling the number of
+inode updates expected during hard link creation.
+
+Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ fs/ocfs2/journal.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/fs/ocfs2/journal.h
++++ linux-2.6.20.1/fs/ocfs2/journal.h
+@@ -306,8 +306,8 @@ int                  ocfs2_journal_dirty
+  * for the dinode, one for the new block. */
+ #define OCFS2_SIMPLE_DIR_EXTEND_CREDITS (2)
+-/* file update (nlink, etc) + dir entry block */
+-#define OCFS2_LINK_CREDITS  (OCFS2_INODE_UPDATE_CREDITS + 1)
++/* file update (nlink, etc) + directory mtime/ctime + dir entry block */
++#define OCFS2_LINK_CREDITS  (2*OCFS2_INODE_UPDATE_CREDITS + 1)
+ /* inode + dir inode (if we unlink a dir), + dir entry block + orphan
+  * dir inode link */
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:10 2007
+Message-Id: <20070307170610.662438762@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:25 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Andrew Morton <akpm@osdl.org>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jeff Dike <jdike@addtoit.com>,
+ Andi Kleen <ak@suse.de>,
+ user-mode-linux-devel@lists.sourceforge.net,
+ Paolo Blaisorblade Giarrusso <blaisorblade@yahoo.it>
+Subject: [patch 002/101] x86_64: fix 2.6.18 regression - PTRACE_OLDSETOPTIONS should be accepted
+Content-Disposition: inline; filename=x86_64-fix-2.6.18-regression-ptrace_oldsetoptions-should-be-accepted.patch
+Content-Length: 1292
+Lines: 42
+
+
+Also PTRACE_OLDSETOPTIONS should be accepted, as done by kernel/ptrace.c and
+forced by binary compatibility. UML/32bit breaks because of this - since it is wise
+enough to use PTRACE_OLDSETOPTIONS to be binary compatible with 2.4 host
+kernels.
+
+Until 2.6.17 (commit f0f2d6536e3515b5b1b7ae97dc8f176860c8c2ce) we had:
+
+       default:
+                return sys_ptrace(request, pid, addr, data);
+
+Instead here we have:
+        case PTRACE_GET_THREAD_AREA:
+       case ...:
+                return sys_ptrace(request, pid, addr, data);
+
+        default:
+                return -EINVAL;
+
+This change was a style change - when a case is added, it must be explicitly
+tested this way. In this case, not enough testing was done.
+
+Cc: Andi Kleen <ak@suse.de>
+Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86_64/ia32/ptrace32.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.20.1.orig/arch/x86_64/ia32/ptrace32.c
++++ linux-2.6.20.1/arch/x86_64/ia32/ptrace32.c
+@@ -243,6 +243,7 @@ asmlinkage long sys32_ptrace(long reques
+       case PTRACE_SINGLESTEP:
+       case PTRACE_DETACH:
+       case PTRACE_SYSCALL:
++      case PTRACE_OLDSETOPTIONS:
+       case PTRACE_SETOPTIONS:
+       case PTRACE_SET_THREAD_AREA:
+       case PTRACE_GET_THREAD_AREA:
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:10 2007
+Message-Id: <20070307170610.794616138@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:26 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ akpm@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ jean-baptiste.maneyrol@teamlog.com,
+ a.zummo@towertech.it,
+ dbrownell@users.sourceforge.net,
+ Atsushi Nemoto <anemo@mba.ocn.ne.jp>
+Subject: [patch 003/101] rtc-pcf8563: detect polarity of century bit automatically
+Content-Disposition: inline; filename=rtc-pcf8563-detect-polarity-of-century-bit-automatically.patch
+Content-Length: 4808
+Lines: 139
+
+
+From: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
+
+The usage of the century bit was inverted on 2.6.19 following to PCF8563's
+description, but it was not match to usage suggested by RTC8564's
+datasheet.  Anyway what MO_C=1 means can vary on each platform.  This patch
+is to detect its polarity in get_datetime routine.  The default value of
+c_polarity is 0 (MO_C=1 means 19xx) so that this patch does not change
+current behavior even if get_datetime was not called before set_datetime.
+
+Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
+Cc: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@teamlog.com>
+Cc: David Brownell <dbrownell@users.sourceforge.net>
+Cc: Alessandro Zummo <a.zummo@towertech.it>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/rtc/rtc-pcf8563.c |   40 ++++++++++++++++++++++++++++++++++------
+ 1 file changed, 34 insertions(+), 6 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/rtc/rtc-pcf8563.c
++++ linux-2.6.20.1/drivers/rtc/rtc-pcf8563.c
+@@ -53,6 +53,25 @@ I2C_CLIENT_INSMOD;
+ #define PCF8563_SC_LV         0x80 /* low voltage */
+ #define PCF8563_MO_C          0x80 /* century */
++struct pcf8563 {
++      struct i2c_client client;
++      /*
++       * The meaning of MO_C bit varies by the chip type.
++       * From PCF8563 datasheet: this bit is toggled when the years
++       * register overflows from 99 to 00
++       *   0 indicates the century is 20xx
++       *   1 indicates the century is 19xx
++       * From RTC8564 datasheet: this bit indicates change of
++       * century. When the year digit data overflows from 99 to 00,
++       * this bit is set. By presetting it to 0 while still in the
++       * 20th century, it will be set in year 2000, ...
++       * There seems no reliable way to know how the system use this
++       * bit.  So let's do it heuristically, assuming we are live in
++       * 1970...2069.
++       */
++      int c_polarity; /* 0: MO_C=1 means 19xx, otherwise MO_C=1 means 20xx */
++};
++
+ static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind);
+ static int pcf8563_detach(struct i2c_client *client);
+@@ -62,6 +81,7 @@ static int pcf8563_detach(struct i2c_cli
+  */
+ static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)
+ {
++      struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client);
+       unsigned char buf[13] = { PCF8563_REG_ST1 };
+       struct i2c_msg msgs[] = {
+@@ -94,8 +114,12 @@ static int pcf8563_get_datetime(struct i
+       tm->tm_mday = BCD2BIN(buf[PCF8563_REG_DM] & 0x3F);
+       tm->tm_wday = buf[PCF8563_REG_DW] & 0x07;
+       tm->tm_mon = BCD2BIN(buf[PCF8563_REG_MO] & 0x1F) - 1; /* rtc mn 1-12 */
+-      tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR])
+-              + (buf[PCF8563_REG_MO] & PCF8563_MO_C ? 0 : 100);
++      tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR]);
++      if (tm->tm_year < 70)
++              tm->tm_year += 100;     /* assume we are in 1970...2069 */
++      /* detect the polarity heuristically. see note above. */
++      pcf8563->c_polarity = (buf[PCF8563_REG_MO] & PCF8563_MO_C) ?
++              (tm->tm_year >= 100) : (tm->tm_year < 100);
+       dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
+               "mday=%d, mon=%d, year=%d, wday=%d\n",
+@@ -114,6 +138,7 @@ static int pcf8563_get_datetime(struct i
+ static int pcf8563_set_datetime(struct i2c_client *client, struct rtc_time *tm)
+ {
++      struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client);
+       int i, err;
+       unsigned char buf[9];
+@@ -135,7 +160,7 @@ static int pcf8563_set_datetime(struct i
+       /* year and century */
+       buf[PCF8563_REG_YR] = BIN2BCD(tm->tm_year % 100);
+-      if (tm->tm_year < 100)
++      if (pcf8563->c_polarity ? (tm->tm_year >= 100) : (tm->tm_year < 100))
+               buf[PCF8563_REG_MO] |= PCF8563_MO_C;
+       buf[PCF8563_REG_DW] = tm->tm_wday & 0x07;
+@@ -248,6 +273,7 @@ static struct i2c_driver pcf8563_driver 
+ static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind)
+ {
++      struct pcf8563 *pcf8563;
+       struct i2c_client *client;
+       struct rtc_device *rtc;
+@@ -260,11 +286,12 @@ static int pcf8563_probe(struct i2c_adap
+               goto exit;
+       }
+-      if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
++      if (!(pcf8563 = kzalloc(sizeof(struct pcf8563), GFP_KERNEL))) {
+               err = -ENOMEM;
+               goto exit;
+       }
++      client = &pcf8563->client;
+       client->addr = address;
+       client->driver = &pcf8563_driver;
+       client->adapter = adapter;
+@@ -301,7 +328,7 @@ exit_detach:
+       i2c_detach_client(client);
+ exit_kfree:
+-      kfree(client);
++      kfree(pcf8563);
+ exit:
+       return err;
+@@ -309,6 +336,7 @@ exit:
+ static int pcf8563_detach(struct i2c_client *client)
+ {
++      struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client);
+       int err;
+       struct rtc_device *rtc = i2c_get_clientdata(client);
+@@ -318,7 +346,7 @@ static int pcf8563_detach(struct i2c_cli
+       if ((err = i2c_detach_client(client)))
+               return err;
+-      kfree(client);
++      kfree(pcf8563);
+       return 0;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:11 2007
+Message-Id: <20070307170610.924156309@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:27 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dan Williams <dcbw@redhat.com>
+Subject: [patch 004/101] prism54: correct assignment of DOT1XENABLE in WE-19 codepaths
+Content-Disposition: inline; filename=prism54-correct-assignment-of-dot1xenable-in-we-19-codepaths.patch
+Content-Length: 1483
+Lines: 49
+
+
+Correct assignment of DOT1XENABLE in WE-19 codepaths.
+RX_UNENCRYPTED_EAPOL = 1 really means setting DOT1XENABLE _off_, and
+vice versa.  The original WE-19 patch erroneously reversed that.  This
+patch fixes association with unencrypted and WEP networks when using
+wpa_supplicant.
+
+It also adds two missing break statements that, left out, could result
+in incorrect card configuration.
+
+Applies to (I think) 2.6.19 and later.
+
+Signed-off-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/prism54/isl_ioctl.c |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/net/wireless/prism54/isl_ioctl.c
++++ linux-2.6.20.1/drivers/net/wireless/prism54/isl_ioctl.c
+@@ -1395,11 +1395,16 @@ static int prism54_set_auth(struct net_d
+               break;
+       case IW_AUTH_RX_UNENCRYPTED_EAPOL:
+-              dot1x = param->value ? 1 : 0;
++              /* dot1x should be the opposite of RX_UNENCRYPTED_EAPOL;
++               * turn off dot1x when  allowing recepit of unencrypted eapol
++               * frames, turn on dot1x when we disallow receipt
++               */
++              dot1x = param->value ? 0x00 : 0x01;
+               break;
+       case IW_AUTH_PRIVACY_INVOKED:
+               privinvoked = param->value ? 1 : 0;
++              break;
+       case IW_AUTH_DROP_UNENCRYPTED:
+               exunencrypt = param->value ? 1 : 0;
+@@ -1589,6 +1594,7 @@ static int prism54_set_encodeext(struct 
+                       }
+                       key.type = DOT11_PRIV_TKIP;
+                       key.length = KEY_SIZE_TKIP;
++                      break;
+               default:
+                       return -EINVAL;
+               }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:11 2007
+Message-Id: <20070307170611.060014600@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:28 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Jeff Garzik <jeff@garzik.org>,
+ Alan Cox <alan@lxorguk.ukuu.org.uk>,
+ linux-ide@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ Tejun Heo <htejun@gmail.com>
+Subject: [patch 005/101] pata_amd: fix an obvious bug in cable detection
+Content-Disposition: inline; filename=pata_amd-fix-an-obvious-bug-in-cable-detection.patch
+Content-Length: 994
+Lines: 33
+
+
+80c test mask is at bits 18 and 19 of EIDE Controller Configuration
+not 22 and 23.  Fix it.
+
+Signed-off-by: Tejun Heo <htejun@gmail.com>
+Acked-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
+
+---
+ drivers/ata/pata_amd.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/ata/pata_amd.c
++++ linux-2.6.20.1/drivers/ata/pata_amd.c
+@@ -128,7 +128,7 @@ static void timing_setup(struct ata_port
+ static int amd_pre_reset(struct ata_port *ap)
+ {
+-      static const u32 bitmask[2] = {0x03, 0xC0};
++      static const u32 bitmask[2] = {0x03, 0x0C};
+       static const struct pci_bits amd_enable_bits[] = {
+               { 0x40, 1, 0x02, 0x02 },
+               { 0x40, 1, 0x01, 0x01 }
+@@ -247,7 +247,7 @@ static void amd133_set_dmamode(struct at
+  */
+ static int nv_pre_reset(struct ata_port *ap) {
+-      static const u8 bitmask[2] = {0x03, 0xC0};
++      static const u8 bitmask[2] = {0x03, 0x0C};
+       static const struct pci_bits nv_enable_bits[] = {
+               { 0x50, 1, 0x02, 0x02 },
+               { 0x50, 1, 0x01, 0x01 }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:11 2007
+Message-Id: <20070307170611.193900293@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:29 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Andrew Morton <akpm@osdl.org>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ nfs@lists.sourceforge.net,
+ Neil Brown <neilb@suse.de>
+Subject: [patch 006/101] knfsd: Fix a race in closing NFSd connections.
+Content-Disposition: inline; filename=knfsd-fix-a-race-in-closing-nfsd-connections.patch
+Content-Length: 6430
+Lines: 201
+
+If you lose this race, it can iput a socket inode twice and you
+get a BUG in fs/inode.c
+
+When I added the option for user-space to close a socket,
+I added some cruft to svc_delete_socket so that I could call
+that function when closing a socket per user-space request.
+
+This was the wrong thing to do.  I should have just set SK_CLOSE
+and let normal mechanisms do the work.
+
+Not only wrong, but buggy.  The locking is all wrong and it openned
+up a race where-by a socket could be closed twice.
+
+So this patch:
+  Introduces svc_close_socket which sets SK_CLOSE then either leave
+  the close up to a thread, or calls svc_delete_socket if it can
+  get SK_BUSY.
+
+  Adds a bias to sk_busy which is removed when SK_DEAD is set,
+  This avoid races around shutting down the socket.
+
+  Changes several 'spin_lock' to 'spin_lock_bh' where the _bh 
+  was missing.
+
+Bugzilla-url: http://bugzilla.kernel.org/show_bug.cgi?id=7916
+
+Signed-off-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ include/linux/sunrpc/svcsock.h |    2 -
+ net/sunrpc/svc.c               |    4 +--
+ net/sunrpc/svcsock.c           |   52 +++++++++++++++++++++++++++++------------
+ 3 files changed, 41 insertions(+), 17 deletions(-)
+
+--- linux-2.6.20.1.orig/include/linux/sunrpc/svcsock.h
++++ linux-2.6.20.1/include/linux/sunrpc/svcsock.h
+@@ -63,7 +63,7 @@ struct svc_sock {
+  * Function prototypes.
+  */
+ int           svc_makesock(struct svc_serv *, int, unsigned short);
+-void          svc_delete_socket(struct svc_sock *);
++void          svc_close_socket(struct svc_sock *);
+ int           svc_recv(struct svc_rqst *, long);
+ int           svc_send(struct svc_rqst *);
+ void          svc_drop(struct svc_rqst *);
+--- linux-2.6.20.1.orig/net/sunrpc/svc.c
++++ linux-2.6.20.1/net/sunrpc/svc.c
+@@ -386,7 +386,7 @@ svc_destroy(struct svc_serv *serv)
+               svsk = list_entry(serv->sv_tempsocks.next,
+                                 struct svc_sock,
+                                 sk_list);
+-              svc_delete_socket(svsk);
++              svc_close_socket(svsk);
+       }
+       if (serv->sv_shutdown)
+               serv->sv_shutdown(serv);
+@@ -395,7 +395,7 @@ svc_destroy(struct svc_serv *serv)
+               svsk = list_entry(serv->sv_permsocks.next,
+                                 struct svc_sock,
+                                 sk_list);
+-              svc_delete_socket(svsk);
++              svc_close_socket(svsk);
+       }
+       
+       cache_clean_deferred(serv);
+--- linux-2.6.20.1.orig/net/sunrpc/svcsock.c
++++ linux-2.6.20.1/net/sunrpc/svcsock.c
+@@ -62,6 +62,12 @@
+  *            after a clear, the socket must be read/accepted
+  *             if this succeeds, it must be set again.
+  *    SK_CLOSE can set at any time. It is never cleared.
++ *      sk_inuse contains a bias of '1' until SK_DEAD is set.
++ *             so when sk_inuse hits zero, we know the socket is dead
++ *             and no-one is using it.
++ *      SK_DEAD can only be set while SK_BUSY is held which ensures
++ *             no other thread will be using the socket or will try to
++ *           set SK_DEAD.
+  *
+  */
+@@ -70,6 +76,7 @@
+ static struct svc_sock *svc_setup_socket(struct svc_serv *, struct socket *,
+                                        int *errp, int pmap_reg);
++static void           svc_delete_socket(struct svc_sock *svsk);
+ static void           svc_udp_data_ready(struct sock *, int);
+ static int            svc_udp_recvfrom(struct svc_rqst *);
+ static int            svc_udp_sendto(struct svc_rqst *);
+@@ -329,8 +336,9 @@ void svc_reserve(struct svc_rqst *rqstp,
+ static inline void
+ svc_sock_put(struct svc_sock *svsk)
+ {
+-      if (atomic_dec_and_test(&svsk->sk_inuse) &&
+-                      test_bit(SK_DEAD, &svsk->sk_flags)) {
++      if (atomic_dec_and_test(&svsk->sk_inuse)) {
++              BUG_ON(! test_bit(SK_DEAD, &svsk->sk_flags));
++
+               dprintk("svc: releasing dead socket\n");
+               if (svsk->sk_sock->file)
+                       sockfd_put(svsk->sk_sock);
+@@ -520,7 +528,7 @@ svc_sock_names(char *buf, struct svc_ser
+       if (!serv)
+               return 0;
+-      spin_lock(&serv->sv_lock);
++      spin_lock_bh(&serv->sv_lock);
+       list_for_each_entry(svsk, &serv->sv_permsocks, sk_list) {
+               int onelen = one_sock_name(buf+len, svsk);
+               if (toclose && strcmp(toclose, buf+len) == 0)
+@@ -528,12 +536,12 @@ svc_sock_names(char *buf, struct svc_ser
+               else
+                       len += onelen;
+       }
+-      spin_unlock(&serv->sv_lock);
++      spin_unlock_bh(&serv->sv_lock);
+       if (closesk)
+               /* Should unregister with portmap, but you cannot
+                * unregister just one protocol...
+                */
+-              svc_delete_socket(closesk);
++              svc_close_socket(closesk);
+       else if (toclose)
+               return -ENOENT;
+       return len;
+@@ -683,6 +691,11 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
+               return svc_deferred_recv(rqstp);
+       }
++      if (test_bit(SK_CLOSE, &svsk->sk_flags)) {
++              svc_delete_socket(svsk);
++              return 0;
++      }
++
+       clear_bit(SK_DATA, &svsk->sk_flags);
+       while ((skb = skb_recv_datagram(svsk->sk_sk, 0, 1, &err)) == NULL) {
+               if (err == -EAGAIN) {
+@@ -1176,7 +1189,8 @@ svc_tcp_sendto(struct svc_rqst *rqstp)
+                      rqstp->rq_sock->sk_server->sv_name,
+                      (sent<0)?"got error":"sent only",
+                      sent, xbufp->len);
+-              svc_delete_socket(rqstp->rq_sock);
++              set_bit(SK_CLOSE, &rqstp->rq_sock->sk_flags);
++              svc_sock_enqueue(rqstp->rq_sock);
+               sent = -EAGAIN;
+       }
+       return sent;
+@@ -1495,7 +1509,7 @@ svc_setup_socket(struct svc_serv *serv, 
+       svsk->sk_odata = inet->sk_data_ready;
+       svsk->sk_owspace = inet->sk_write_space;
+       svsk->sk_server = serv;
+-      atomic_set(&svsk->sk_inuse, 0);
++      atomic_set(&svsk->sk_inuse, 1);
+       svsk->sk_lastrecv = get_seconds();
+       spin_lock_init(&svsk->sk_defer_lock);
+       INIT_LIST_HEAD(&svsk->sk_deferred);
+@@ -1618,7 +1632,7 @@ bummer:
+ /*
+  * Remove a dead socket
+  */
+-void
++static void
+ svc_delete_socket(struct svc_sock *svsk)
+ {
+       struct svc_serv *serv;
+@@ -1644,16 +1658,26 @@ svc_delete_socket(struct svc_sock *svsk)
+        * while still attached to a queue, the queue itself
+        * is about to be destroyed (in svc_destroy).
+        */
+-      if (!test_and_set_bit(SK_DEAD, &svsk->sk_flags))
++      if (!test_and_set_bit(SK_DEAD, &svsk->sk_flags)) {
++              BUG_ON(atomic_read(&svsk->sk_inuse)<2);
++              atomic_dec(&svsk->sk_inuse);
+               if (test_bit(SK_TEMP, &svsk->sk_flags))
+                       serv->sv_tmpcnt--;
++      }
+-      /* This atomic_inc should be needed - svc_delete_socket
+-       * should have the semantic of dropping a reference.
+-       * But it doesn't yet....
+-       */
+-      atomic_inc(&svsk->sk_inuse);
+       spin_unlock_bh(&serv->sv_lock);
++}
++
++void svc_close_socket(struct svc_sock *svsk)
++{
++      set_bit(SK_CLOSE, &svsk->sk_flags);
++      if (test_and_set_bit(SK_BUSY, &svsk->sk_flags))
++              /* someone else will have to effect the close */
++              return;
++
++      atomic_inc(&svsk->sk_inuse);
++      svc_delete_socket(svsk);
++      clear_bit(SK_BUSY, &svsk->sk_flags);
+       svc_sock_put(svsk);
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:11 2007
+Message-Id: <20070307170611.330628526@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:30 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ David Howells <dhowells@redhat.com>
+Subject: [patch 007/101] Keys: Fix key serial number collision handling
+Content-Disposition: inline; filename=keys-fix-key-serial-number-collision-handling.patch
+Content-Length: 2817
+Lines: 93
+
+From: David Howells <dhowells@redhat.com>
+
+[PATCH] Keys: Fix key serial number collision handling
+
+Fix the key serial number collision avoidance code in key_alloc_serial().
+
+This didn't use to be so much of a problem as the key serial numbers were
+allocated from a simple incremental counter, and it would have to go through
+two billion keys before it could possibly encounter a collision.  However, now
+that random numbers are used instead, collisions are much more likely.
+
+This is fixed by finding a hole in the rbtree where the next unused serial
+number ought to be and using that by going almost back to the top of the
+insertion routine and redoing the insertion with the new serial number rather
+than trying to be clever and attempting to work out the insertion point
+pointer directly.
+
+This fixes kernel BZ #7727.
+
+Signed-off-by: David Howells <dhowells@redhat.com>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ security/keys/key.c |   33 ++++++++++++++-------------------
+ 1 file changed, 14 insertions(+), 19 deletions(-)
+
+--- linux-2.6.20.1.orig/security/keys/key.c
++++ linux-2.6.20.1/security/keys/key.c
+@@ -188,6 +188,7 @@ static inline void key_alloc_serial(stru
+       spin_lock(&key_serial_lock);
++attempt_insertion:
+       parent = NULL;
+       p = &key_serial_tree.rb_node;
+@@ -202,39 +203,33 @@ static inline void key_alloc_serial(stru
+               else
+                       goto serial_exists;
+       }
+-      goto insert_here;
++
++      /* we've found a suitable hole - arrange for this key to occupy it */
++      rb_link_node(&key->serial_node, parent, p);
++      rb_insert_color(&key->serial_node, &key_serial_tree);
++
++      spin_unlock(&key_serial_lock);
++      return;
+       /* we found a key with the proposed serial number - walk the tree from
+        * that point looking for the next unused serial number */
+ serial_exists:
+       for (;;) {
+               key->serial++;
+-              if (key->serial < 2)
+-                      key->serial = 2;
+-
+-              if (!rb_parent(parent))
+-                      p = &key_serial_tree.rb_node;
+-              else if (rb_parent(parent)->rb_left == parent)
+-                      p = &(rb_parent(parent)->rb_left);
+-              else
+-                      p = &(rb_parent(parent)->rb_right);
++              if (key->serial < 3) {
++                      key->serial = 3;
++                      goto attempt_insertion;
++              }
+               parent = rb_next(parent);
+               if (!parent)
+-                      break;
++                      goto attempt_insertion;
+               xkey = rb_entry(parent, struct key, serial_node);
+               if (key->serial < xkey->serial)
+-                      goto insert_here;
++                      goto attempt_insertion;
+       }
+-      /* we've found a suitable hole - arrange for this key to occupy it */
+-insert_here:
+-      rb_link_node(&key->serial_node, parent, p);
+-      rb_insert_color(&key->serial_node, &key_serial_tree);
+-
+-      spin_unlock(&key_serial_lock);
+-
+ } /* end key_alloc_serial() */
+ /*****************************************************************************/
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:11 2007
+Message-Id: <20070307170611.456270996@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:31 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Alan <alan@lxorguk.ukuu.org.uk>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ linux-ide@vger.kernel.org,
+ bzolnier@gmail.com,
+ Tejun Heo <htejun@gmail.com>
+Subject: [patch 008/101] ide: fix drive side 80c cable check
+Content-Disposition: inline; filename=ide-fix-drive-side-80c-cable-check.patch
+Content-Length: 802
+Lines: 28
+
+
+eighty_ninty_three() had word 93 validitity check but not the 80c bit
+test itself (bit 12).  This increases the chance of incorrect wire
+detection especially because host side cable detection is often
+unreliable and we sometimes soley depend on drive side cable
+detection.  Fix it.
+
+Signed-off-by: Tejun Heo <htejun@gmail.com>
+Acked-by: Alan <alan@lxorguk.ukuu.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ide/ide-iops.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/ide/ide-iops.c
++++ linux-2.6.20.1/drivers/ide/ide-iops.c
+@@ -607,6 +607,8 @@ u8 eighty_ninty_three (ide_drive_t *driv
+       if(!(drive->id->hw_config & 0x4000))
+               return 0;
+ #endif /* CONFIG_IDEDMA_IVB */
++      if (!(drive->id->hw_config & 0x2000))
++              return 0;
+       return 1;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:11 2007
+Message-Id: <20070307170611.586849567@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:32 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Larry Finger <Larry.Finger@lwfinger.net>
+Subject: [patch 009/101] bcm43xx: Fix for oops on resume
+Content-Disposition: inline; filename=bcm43xx-fix-for-oops-on-resume.patch
+Content-Length: 638
+Lines: 23
+
+
+There is a kernel oops on bcm43xx when resuming due to an overly tight timeout loop.
+
+Signed-off-by: Larry Finger<Larry.Finger@lwfinger.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/bcm43xx/bcm43xx.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx.h
++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx.h
+@@ -21,7 +21,7 @@
+ #define PFX                           KBUILD_MODNAME ": "
+ #define BCM43xx_SWITCH_CORE_MAX_RETRIES       50
+-#define BCM43xx_IRQWAIT_MAX_RETRIES   50
++#define BCM43xx_IRQWAIT_MAX_RETRIES   100
+ #define BCM43xx_IO_SIZE                       8192
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:11 2007
+Message-Id: <20070307170611.718039667@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:33 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michael Buesch <mb@bu3sch.de>,
+ Larry Finger <Larry.Finger@lwfinger.net>
+Subject: [patch 010/101] bcm43xx: Fix for oops on ampdu status
+Content-Disposition: inline; filename=bcm43xx-fix-for-oops-on-ampdu-status.patch
+Content-Length: 1930
+Lines: 54
+
+
+From: Michael Buesch <mb@bu3sch.de>
+
+If bcm43xx were to process an afterburner (ampdu) status response, Linux would oops. The
+ampdu and intermediate status bits are properly named.
+
+Signed-off-by: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/bcm43xx/bcm43xx_main.c |    8 +++-----
+ drivers/net/wireless/bcm43xx/bcm43xx_xmit.h |   10 ++--------
+ 2 files changed, 5 insertions(+), 13 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c
++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+@@ -1453,12 +1453,10 @@ static void handle_irq_transmit_status(s
+               bcm43xx_debugfs_log_txstat(bcm, &stat);
+-              if (stat.flags & BCM43xx_TXSTAT_FLAG_IGNORE)
++              if (stat.flags & BCM43xx_TXSTAT_FLAG_AMPDU)
++                      continue;
++              if (stat.flags & BCM43xx_TXSTAT_FLAG_INTER)
+                       continue;
+-              if (!(stat.flags & BCM43xx_TXSTAT_FLAG_ACK)) {
+-                      //TODO: packet was not acked (was lost)
+-              }
+-              //TODO: There are more (unknown) flags to test. see bcm43xx_main.h
+               if (bcm43xx_using_pio(bcm))
+                       bcm43xx_pio_handle_xmitstatus(bcm, &stat);
+--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h
++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h
+@@ -137,14 +137,8 @@ struct bcm43xx_xmitstatus {
+       u16 unknown; //FIXME
+ };
+-#define BCM43xx_TXSTAT_FLAG_ACK               0x01
+-//TODO #define BCM43xx_TXSTAT_FLAG_???        0x02
+-//TODO #define BCM43xx_TXSTAT_FLAG_???        0x04
+-//TODO #define BCM43xx_TXSTAT_FLAG_???        0x08
+-//TODO #define BCM43xx_TXSTAT_FLAG_???        0x10
+-#define BCM43xx_TXSTAT_FLAG_IGNORE    0x20
+-//TODO #define BCM43xx_TXSTAT_FLAG_???        0x40
+-//TODO #define BCM43xx_TXSTAT_FLAG_???        0x80
++#define BCM43xx_TXSTAT_FLAG_AMPDU     0x10
++#define BCM43xx_TXSTAT_FLAG_INTER     0x20
+ u8 bcm43xx_plcp_get_ratecode_cck(const u8 bitrate);
+ u8 bcm43xx_plcp_get_ratecode_ofdm(const u8 bitrate);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:11 2007
+Message-Id: <20070307170611.843281807@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:34 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Eric Piel <Eric.Piel@tremplin-utc.net>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Wang Zhenyu <zhenyu.z.wang@intel.com>,
+ Adrian Bunk <bunk@stusta.de>
+Subject: [patch 011/101] AGP: intel-agp bugfix
+Content-Disposition: inline; filename=agp-intel-agp-bugfix.patch
+Content-Length: 2650
+Lines: 69
+
+From: Dave Jones <davej@redhat.com>
+
+On Sun, Feb 04, 2007 at 04:51:38PM +0100, Eric Piel wrote:
+ > Hello,
+ > 
+ > I've got a regression in 2.6.20-rc7 (-rc6 was fine) due to commit 
+ > 4b95320fc4d21b0ff2f8604305dd6c851aff6096 ([AGPGART] intel_agp: restore 
+ > graphics device's pci space early in resume).
+
+I think the key to this failure is the last line here ..
+
+ > agpgart-intel 0000:00:00.0: resuming
+ > PM: Writing back config space on device 0000:00:02.0 at offset f (was 10b, writing 0)
+ > PM: Writing back config space on device 0000:00:02.0 at offset d (was dc, writing 0)
+ > PM: Writing back config space on device 0000:00:02.0 at offset b (was 10161025, writing 0)
+ > PM: Writing back config space on device 0000:00:02.0 at offset 5 (was f4000000, writing 0)
+ > PM: Writing back config space on device 0000:00:02.0 at offset 4 (was f8000008, writing 0)
+ > PM: Writing back config space on device 0000:00:02.0 at offset 2 (was 3000011, writing 0)
+ > PM: Writing back config space on device 0000:00:02.0 at offset 1 (was 2b00007, writing 0)
+ > PM: Writing back config space on device 0000:00:02.0 at offset 0 (was 11328086, writing 0)
+ > agpgart: Unable to remap memory.
+
+This then blows up the next access to intel_i810_private.registers, which happens to
+be intel_i810_insert_entries.
+
+Either we need .suspend methods which unmap these regions, or we need
+to skip trying to map them a second time on resume.
+
+There's an ugly patch below which does the latter. Give it a try?
+
+The intel-agp suspend/resume code has really grown into something
+of a monster, and could use some refactoring in a big way.
+
+               Dave
+
+
+From: Dave Jones <davej@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/agp/intel-agp.c |   14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/char/agp/intel-agp.c
++++ linux-2.6.20.1/drivers/char/agp/intel-agp.c
+@@ -117,13 +117,15 @@ static int intel_i810_configure(void)
+       current_size = A_SIZE_FIX(agp_bridge->current_size);
+-      pci_read_config_dword(intel_i810_private.i810_dev, I810_MMADDR, &temp);
+-      temp &= 0xfff80000;
+-
+-      intel_i810_private.registers = ioremap(temp, 128 * 4096);
+       if (!intel_i810_private.registers) {
+-              printk(KERN_ERR PFX "Unable to remap memory.\n");
+-              return -ENOMEM;
++              pci_read_config_dword(intel_i810_private.i810_dev, I810_MMADDR, &temp);
++              temp &= 0xfff80000;
++
++              intel_i810_private.registers = ioremap(temp, 128 * 4096);
++              if (!intel_i810_private.registers) {
++                      printk(KERN_ERR PFX "Unable to remap memory.\n");
++                      return -ENOMEM;
++              }
+       }
+       if ((readl(intel_i810_private.registers+I810_DRAM_CTL)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:12 2007
+Message-Id: <20070307170611.973927704@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:35 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ discuss@x86-64.org,
+ Jan Beulich <jbeulich@novell.com>,
+ David Moore <dcm@MIT.EDU>,
+ linux1394-devel <linux1394-devel@lists.sourceforge.net>,
+ David Moore <dcm@acm.org>,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>
+Subject: [patch 012/101] Missing critical phys_to_virt in lib/swiotlb.c
+Content-Disposition: inline; filename=missing-critical-phys_to_virt-in-lib-swiotlb.c.patch
+Content-Length: 974
+Lines: 31
+
+From: David Moore <dcm@acm.org>
+
+Missing critical phys_to_virt in lib/swiotlb.c
+
+Adds missing call to phys_to_virt() in the
+lib/swiotlb.c:swiotlb_sync_sg() function.  Without this change, a kernel
+panic will always occur whenever a SWIOTLB bounce buffer from a
+scatter-gather list gets synced.  Affected are especially Intel x86_64
+machines with more than about 3 GB RAM.
+
+Signed-off-by: David Moore <dcm@acm.org>
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ lib/swiotlb.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/lib/swiotlb.c
++++ linux-2.6.20.1/lib/swiotlb.c
+@@ -750,7 +750,7 @@ swiotlb_sync_sg(struct device *hwdev, st
+       for (i = 0; i < nelems; i++, sg++)
+               if (sg->dma_address != SG_ENT_PHYS_ADDRESS(sg))
+-                      sync_single(hwdev, (void *) sg->dma_address,
++                      sync_single(hwdev, phys_to_virt(sg->dma_address),
+                                   sg->dma_length, dir, target);
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:12 2007
+Message-Id: <20070307170612.107455810@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:36 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Greg KH <greg@kroah.com>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ USB development list <linux-usb-devel@lists.sourceforge.net>,
+ Adrian Bunk <bunk@stusta.de>,
+ Alan Stern <stern@rowland.harvard.edu>
+Subject: [patch 013/101] USB: fix concurrent buffer access in the hub driver
+Content-Disposition: inline; filename=usb-fix-concurrent-buffer-access-in-the-hub-driver.patch
+Content-Length: 1819
+Lines: 65
+
+
+This patch (as849) fixes a bug in the USB hub driver.  A single
+pre-allocated buffer is used for all port status reads, but nothing
+guarantees exclusive use of the buffer.  A mutex is added to provide
+this guarantee.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/hub.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/usb/core/hub.c
++++ linux-2.6.20.1/drivers/usb/core/hub.c
+@@ -44,6 +44,7 @@ struct usb_hub {
+               struct usb_hub_status   hub;
+               struct usb_port_status  port;
+       }                       *status;        /* buffer for status reports */
++      struct mutex            status_mutex;   /* for the status buffer */
+       int                     error;          /* last reported error */
+       int                     nerrors;        /* track consecutive errors */
+@@ -538,6 +539,7 @@ static int hub_hub_status(struct usb_hub
+ {
+       int ret;
++      mutex_lock(&hub->status_mutex);
+       ret = get_hub_status(hub->hdev, &hub->status->hub);
+       if (ret < 0)
+               dev_err (hub->intfdev,
+@@ -547,6 +549,7 @@ static int hub_hub_status(struct usb_hub
+               *change = le16_to_cpu(hub->status->hub.wHubChange); 
+               ret = 0;
+       }
++      mutex_unlock(&hub->status_mutex);
+       return ret;
+ }
+@@ -620,6 +623,7 @@ static int hub_configure(struct usb_hub 
+               ret = -ENOMEM;
+               goto fail;
+       }
++      mutex_init(&hub->status_mutex);
+       hub->descriptor = kmalloc(sizeof(*hub->descriptor), GFP_KERNEL);
+       if (!hub->descriptor) {
+@@ -1418,6 +1422,7 @@ static int hub_port_status(struct usb_hu
+ {
+       int ret;
++      mutex_lock(&hub->status_mutex);
+       ret = get_port_status(hub->hdev, port1, &hub->status->port);
+       if (ret < 4) {
+               dev_err (hub->intfdev,
+@@ -1429,6 +1434,7 @@ static int hub_port_status(struct usb_hu
+               *change = le16_to_cpu(hub->status->port.wPortChange); 
+               ret = 0;
+       }
++      mutex_unlock(&hub->status_mutex);
+       return ret;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:12 2007
+Message-Id: <20070307170612.262729971@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:37 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Gregor Jasny <gjasny@web.de>,
+ Takashi Iwai <tiwai@suse.de>,
+ Jaroslav Kysela <perex@suse.cz>
+Subject: [patch 014/101] USB audio fixes 1
+Content-Disposition: inline; filename=usb-audio-fixes-1.patch
+Content-Length: 1467
+Lines: 47
+
+From: Takashi Iwai <tiwai@suse.de>
+
+[PATCH] usbaudio - Fix Oops with broken usb descriptors
+
+This is a patch for ALSA Bug #2724. Some webcams provide bogus
+settings with no valid rates. With this patch those are skipped.
+
+Signed-off-by: Gregor Jasny <gjasny@web.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Jaroslav Kysela <perex@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/usb/usbaudio.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- linux-2.6.20.1.orig/sound/usb/usbaudio.c
++++ linux-2.6.20.1/sound/usb/usbaudio.c
+@@ -2456,6 +2456,7 @@ static int parse_audio_format_rates(stru
+                * build the rate table and bitmap flags
+                */
+               int r, idx, c;
++              unsigned int nonzero_rates = 0;
+               /* this table corresponds to the SNDRV_PCM_RATE_XXX bit */
+               static unsigned int conv_rates[] = {
+                       5512, 8000, 11025, 16000, 22050, 32000, 44100, 48000,
+@@ -2478,6 +2479,7 @@ static int parse_audio_format_rates(stru
+                           fp->altsetting == 5 && fp->maxpacksize == 392)
+                               rate = 96000;
+                       fp->rate_table[r] = rate;
++                      nonzero_rates |= rate;
+                       if (rate < fp->rate_min)
+                               fp->rate_min = rate;
+                       else if (rate > fp->rate_max)
+@@ -2493,6 +2495,10 @@ static int parse_audio_format_rates(stru
+                       if (!found)
+                               fp->needs_knot = 1;
+               }
++              if (!nonzero_rates) {
++                      hwc_debug("All rates were zero. Skipping format!\n");
++                      return -1;
++              }
+               if (fp->needs_knot)
+                       fp->rates |= SNDRV_PCM_RATE_KNOT;
+       } else {
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:12 2007
+Message-Id: <20070307170612.374647516@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:38 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [patch 015/101] USB audio fixes 2
+Content-Disposition: inline; filename=usb-audio-fixes-2.patch
+Content-Length: 2519
+Lines: 87
+
+From: Takashi Iwai <tiwai@suse.de>
+
+[PATCH] usbaudio - Fix Oops with unconventional sample rates
+
+The patch fixes the memory corruption by the support of unconventional
+sample rates.  Also, it avoids the too restrictive constraints if
+any of usb descriptions contain continuous rates.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/usb/usbaudio.c |   43 +++++++++++++++++++++++++------------------
+ 1 file changed, 25 insertions(+), 18 deletions(-)
+
+--- linux-2.6.20.1.orig/sound/usb/usbaudio.c
++++ linux-2.6.20.1/sound/usb/usbaudio.c
+@@ -186,6 +186,7 @@ struct snd_usb_substream {
+       u64 formats;                    /* format bitmasks (all or'ed) */
+       unsigned int num_formats;               /* number of supported audio formats (list) */
+       struct list_head fmt_list;      /* format list */
++      struct snd_pcm_hw_constraint_list rate_list;    /* limited rates */
+       spinlock_t lock;
+       struct snd_urb_ops ops;         /* callbacks (must be filled at init) */
+@@ -1810,28 +1811,33 @@ static int check_hw_params_convention(st
+ static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime,
+                                 struct snd_usb_substream *subs)
+ {
+-      struct list_head *p;
+-      struct snd_pcm_hw_constraint_list constraints_rates;
++      struct audioformat *fp;
++      int count = 0, needs_knot = 0;
+       int err;
+-      list_for_each(p, &subs->fmt_list) {
+-              struct audioformat *fp;
+-              fp = list_entry(p, struct audioformat, list);
+-
+-              if (!fp->needs_knot)
+-                      continue;
+-
+-              constraints_rates.count = fp->nr_rates;
+-              constraints_rates.list = fp->rate_table;
+-              constraints_rates.mask = 0;
+-
+-              err = snd_pcm_hw_constraint_list(runtime, 0,
+-                      SNDRV_PCM_HW_PARAM_RATE,
+-                      &constraints_rates);
++      list_for_each_entry(fp, &subs->fmt_list, list) {
++              if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)
++                      return 0;
++              count += fp->nr_rates;
++              if (fp->needs_knot)
++                      needs_knot = 1;
++      }
++      if (!needs_knot)
++              return 0;
+-              if (err < 0)
+-                      return err;
++      subs->rate_list.count = count;
++      subs->rate_list.list = kmalloc(sizeof(int) * count, GFP_KERNEL);
++      subs->rate_list.mask = 0;
++      count = 0;
++      list_for_each_entry(fp, &subs->fmt_list, list) {
++              int i;
++              for (i = 0; i < fp->nr_rates; i++)
++                      subs->rate_list.list[count++] = fp->rate_table[i];
+       }
++      err = snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
++                                       &subs->rate_list);
++      if (err < 0)
++              return err;
+       return 0;
+ }
+@@ -2231,6 +2237,7 @@ static void free_substream(struct snd_us
+               kfree(fp->rate_table);
+               kfree(fp);
+       }
++      kfree(subs->rate_list.list);
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:12 2007
+Message-Id: <20070307170612.498003382@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:39 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Takashi Iwai <tiwai@suse.de>,
+ Jaroslav Kysela <perex@suse.cz>
+Subject: [patch 016/101] hda-intel - Dont try to probe invalid codecs
+Content-Disposition: inline; filename=hda-intel-don-t-try-to-probe-invalid-codecs.patch
+Content-Length: 881
+Lines: 30
+
+From: Takashi Iwai <tiwai@suse.de>
+
+[ALSA] hda-intel - Don't try to probe invalid codecs
+
+Fix the max number of codecs detected by HD-intel (and compatible)
+controllers to 3.  Some hardware reports extra bits as if
+connected, and the driver gets confused to probe unexisting codecs.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Jaroslav Kysela <perex@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ sound/pci/hda/hda_intel.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/sound/pci/hda/hda_intel.c
++++ linux-2.6.20.1/sound/pci/hda/hda_intel.c
+@@ -199,7 +199,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO
+ /* STATESTS int mask: SD2,SD1,SD0 */
+ #define STATESTS_INT_MASK     0x07
+-#define AZX_MAX_CODECS                4
++#define AZX_MAX_CODECS                3
+ /* SD_CTL bits */
+ #define SD_CTL_STREAM_RESET   0x01    /* stream reset bit */
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:12 2007
+Message-Id: <20070307170612.646730623@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:40 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ "Kai" <epimetreus@fastmail.fm>,
+ Andrew Morton <akpm@linux-foundation.org>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jens Axboe <jens.axboe@oracle.com>,
+ Neil Brown <neilb@suse.de>
+Subject: [patch 017/101] Fix various bugs with aligned reads in RAID5.
+Content-Disposition: inline; filename=fix-various-bugs-with-aligned-reads-in-raid5.patch
+Content-Length: 3276
+Lines: 110
+
+From: Neil Brown <neilb@suse.de>
+
+Fix various bugs with aligned reads in RAID5.
+
+It is possible for raid5 to be sent a bio that is too big
+for an underlying device.  So if it is a READ that we
+pass stright down to a device, it will fail and confuse
+RAID5.
+
+So in 'chunk_aligned_read' we check that the bio fits within the
+parameters for the target device and if it doesn't fit, fall back
+on reading through the stripe cache and making lots of one-page
+requests.
+
+Note that this is the earliest time we can check against the device
+because earlier we don't have a lock on the device, so it could change
+underneath us.
+
+Also, the code for handling a retry through the cache when a read
+fails has not been tested and was badly broken.  This patch fixes that
+code.
+
+Signed-off-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/raid5.c |   42 +++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 39 insertions(+), 3 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/md/raid5.c
++++ linux-2.6.20.1/drivers/md/raid5.c
+@@ -2620,7 +2620,7 @@ static struct bio *remove_bio_from_retry
+       }
+       bi = conf->retry_read_aligned_list;
+       if(bi) {
+-              conf->retry_read_aligned = bi->bi_next;
++              conf->retry_read_aligned_list = bi->bi_next;
+               bi->bi_next = NULL;
+               bi->bi_phys_segments = 1; /* biased count of active stripes */
+               bi->bi_hw_segments = 0; /* count of processed stripes */
+@@ -2669,6 +2669,27 @@ static int raid5_align_endio(struct bio 
+       return 0;
+ }
++static int bio_fits_rdev(struct bio *bi)
++{
++      request_queue_t *q = bdev_get_queue(bi->bi_bdev);
++
++      if ((bi->bi_size>>9) > q->max_sectors)
++              return 0;
++      blk_recount_segments(q, bi);
++      if (bi->bi_phys_segments > q->max_phys_segments ||
++          bi->bi_hw_segments > q->max_hw_segments)
++              return 0;
++
++      if (q->merge_bvec_fn)
++              /* it's too hard to apply the merge_bvec_fn at this stage,
++               * just just give up
++               */
++              return 0;
++
++      return 1;
++}
++
++
+ static int chunk_aligned_read(request_queue_t *q, struct bio * raid_bio)
+ {
+       mddev_t *mddev = q->queuedata;
+@@ -2715,6 +2736,13 @@ static int chunk_aligned_read(request_qu
+               align_bi->bi_flags &= ~(1 << BIO_SEG_VALID);
+               align_bi->bi_sector += rdev->data_offset;
++              if (!bio_fits_rdev(align_bi)) {
++                      /* too big in some way */
++                      bio_put(align_bi);
++                      rdev_dec_pending(rdev, mddev);
++                      return 0;
++              }
++
+               spin_lock_irq(&conf->device_lock);
+               wait_event_lock_irq(conf->wait_for_stripe,
+                                   conf->quiesce == 0,
+@@ -3107,7 +3135,9 @@ static int  retry_aligned_read(raid5_con
+       last_sector = raid_bio->bi_sector + (raid_bio->bi_size>>9);
+       for (; logical_sector < last_sector;
+-           logical_sector += STRIPE_SECTORS, scnt++) {
++           logical_sector += STRIPE_SECTORS,
++                   sector += STRIPE_SECTORS,
++                   scnt++) {
+               if (scnt < raid_bio->bi_hw_segments)
+                       /* already done this stripe */
+@@ -3123,7 +3153,13 @@ static int  retry_aligned_read(raid5_con
+               }
+               set_bit(R5_ReadError, &sh->dev[dd_idx].flags);
+-              add_stripe_bio(sh, raid_bio, dd_idx, 0);
++              if (!add_stripe_bio(sh, raid_bio, dd_idx, 0)) {
++                      release_stripe(sh);
++                      raid_bio->bi_hw_segments = scnt;
++                      conf->retry_read_aligned = raid_bio;
++                      return handled;
++              }
++
+               handle_stripe(sh, NULL);
+               release_stripe(sh);
+               handled++;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:12 2007
+Message-Id: <20070307170612.752732614@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:41 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ Daniel Walker <dwalker@mvista.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 018/101] Fix ATM initcall ordering.
+Content-Disposition: inline; filename=fix-atm-initcall-ordering.patch
+Content-Length: 1057
+Lines: 40
+
+From: Daniel Walker <dwalker@mvista.com>
+
+[ATM]: Fix for crash in adummy_init()
+
+This was reported by Ingo Molnar here,
+
+http://lkml.org/lkml/2006/12/18/119
+
+The problem is that adummy_init() depends on atm_init() , but adummy_init()
+is called first.
+
+So I put atm_init() into subsys_initcall which seems appropriate, and it
+will still get module_init() if it becomes a module.
+
+Interesting to note that you could crash your system here if you just load
+the modules in the wrong order.
+
+Signed-off-by: Daniel Walker <dwalker@mvista.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/atm/common.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/net/atm/common.c
++++ linux-2.6.20.1/net/atm/common.c
+@@ -816,7 +816,8 @@ static void __exit atm_exit(void)
+       proto_unregister(&vcc_proto);
+ }
+-module_init(atm_init);
++subsys_initcall(atm_init);
++
+ module_exit(atm_exit);
+ MODULE_LICENSE("GPL");
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:13 2007
+Message-Id: <20070307170612.890693963@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:42 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ John Heffner <jheffner@psc.edu>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 019/101] Fix TCP FIN handling
+Content-Disposition: inline; filename=fix-tcp-fin-handling.patch
+Content-Length: 886
+Lines: 29
+
+From: John Heffner <jheffner@psc.edu>
+
+We can accidently spit out a huge burst of packets with TSO
+when the FIN back is piggybacked onto the final packet.
+
+[TCP]: Don't apply FIN exception to full TSO segments.
+
+Signed-off-by: John Heffner <jheffner@psc.edu>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/tcp_output.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/net/ipv4/tcp_output.c
++++ linux-2.6.20.1/net/ipv4/tcp_output.c
+@@ -965,7 +965,8 @@ static inline unsigned int tcp_cwnd_test
+       u32 in_flight, cwnd;
+       /* Don't be strict about the congestion window for the final FIN.  */
+-      if (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN)
++      if ((TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) &&
++          tcp_skb_pcount(skb) == 1)
+               return 1;
+       in_flight = tcp_packets_in_flight(tp);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:13 2007
+Message-Id: <20070307170613.018724166@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:43 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ Alexey Dobriyan <adobriyan@openvz.org>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 020/101] Fix allocation failure handling in multicast
+Content-Disposition: inline; filename=fix-allocation-failure-handling-in-multicast.patch
+Content-Length: 1154
+Lines: 40
+
+From: Alexey Dobriyan <adobriyan@openvz.org>
+
+[IPV4/IPV6] multicast: Check add_grhead() return value
+
+add_grhead() allocates memory with GFP_ATOMIC and in at least two places skb
+from it passed to skb_put() without checking.
+
+Signed-off-by: Alexey Dobriyan <adobriyan@openvz.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/igmp.c  |    2 ++
+ net/ipv6/mcast.c |    2 ++
+ 2 files changed, 4 insertions(+)
+
+--- linux-2.6.20.1.orig/net/ipv4/igmp.c
++++ linux-2.6.20.1/net/ipv4/igmp.c
+@@ -455,6 +455,8 @@ static struct sk_buff *add_grec(struct s
+                       skb = add_grhead(skb, pmc, type, &pgr);
+                       first = 0;
+               }
++              if (!skb)
++                      return NULL;
+               psrc = (__be32 *)skb_put(skb, sizeof(__be32));
+               *psrc = psf->sf_inaddr;
+               scount++; stotal++;
+--- linux-2.6.20.1.orig/net/ipv6/mcast.c
++++ linux-2.6.20.1/net/ipv6/mcast.c
+@@ -1582,6 +1582,8 @@ static struct sk_buff *add_grec(struct s
+                       skb = add_grhead(skb, pmc, type, &pgr);
+                       first = 0;
+               }
++              if (!skb)
++                      return NULL;
+               psrc = (struct in6_addr *)skb_put(skb, sizeof(*psrc));
+               *psrc = psf->sf_addr;
+               scount++; stotal++;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:13 2007
+Message-Id: <20070307170613.142342637@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:44 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ akpm@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux-raid@vger.kernel.org,
+ Neil Brown <neilb@suse.de>
+Subject: [patch 021/101] md: Avoid possible BUG_ON in md bitmap handling.
+Content-Disposition: inline; filename=md-avoid-possible-bug_on-in-md-bitmap-handling.patch
+Content-Length: 2846
+Lines: 95
+
+From: Neil Brown <neilb@suse.de>
+
+md/bitmap tracks how many active write requests are pending on blocks
+associated with each bit in the bitmap, so that it knows when it can
+clear the bit (when count hits zero).
+
+The counter has 14 bits of space, so if there are ever more than 16383,
+we cannot cope.
+
+Currently the code just calles BUG_ON as "all" drivers have request queue
+limits much smaller than this.
+
+However is seems that some don't.  Apparently some multipath configurations
+can allow more than 16383 concurrent write requests.
+
+So, in this unlikely situation, instead of calling BUG_ON we now wait
+for the count to drop down a bit.  This requires a new wait_queue_head,
+some waiting code, and a wakeup call.
+
+Tested by limiting the counter to 20 instead of 16383 (writes go a lot slower
+in that case...).
+
+Signed-off-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+diff .prev/drivers/md/bitmap.c ./drivers/md/bitmap.c
+---
+ drivers/md/bitmap.c         |   22 +++++++++++++++++++++-
+ include/linux/raid/bitmap.h |    1 +
+ 2 files changed, 22 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/md/bitmap.c
++++ linux-2.6.20.1/drivers/md/bitmap.c
+@@ -1160,6 +1160,22 @@ int bitmap_startwrite(struct bitmap *bit
+                       return 0;
+               }
++              if (unlikely((*bmc & COUNTER_MAX) == COUNTER_MAX)) {
++                      DEFINE_WAIT(__wait);
++                      /* note that it is safe to do the prepare_to_wait
++                       * after the test as long as we do it before dropping
++                       * the spinlock.
++                       */
++                      prepare_to_wait(&bitmap->overflow_wait, &__wait,
++                                      TASK_UNINTERRUPTIBLE);
++                      spin_unlock_irq(&bitmap->lock);
++                      bitmap->mddev->queue
++                              ->unplug_fn(bitmap->mddev->queue);
++                      schedule();
++                      finish_wait(&bitmap->overflow_wait, &__wait);
++                      continue;
++              }
++
+               switch(*bmc) {
+               case 0:
+                       bitmap_file_set_bit(bitmap, offset);
+@@ -1169,7 +1185,7 @@ int bitmap_startwrite(struct bitmap *bit
+               case 1:
+                       *bmc = 2;
+               }
+-              BUG_ON((*bmc & COUNTER_MAX) == COUNTER_MAX);
++
+               (*bmc)++;
+               spin_unlock_irq(&bitmap->lock);
+@@ -1207,6 +1223,9 @@ void bitmap_endwrite(struct bitmap *bitm
+               if (!success && ! (*bmc & NEEDED_MASK))
+                       *bmc |= NEEDED_MASK;
++              if ((*bmc & COUNTER_MAX) == COUNTER_MAX)
++                      wake_up(&bitmap->overflow_wait);
++
+               (*bmc)--;
+               if (*bmc <= 2) {
+                       set_page_attr(bitmap,
+@@ -1431,6 +1450,7 @@ int bitmap_create(mddev_t *mddev)
+       spin_lock_init(&bitmap->lock);
+       atomic_set(&bitmap->pending_writes, 0);
+       init_waitqueue_head(&bitmap->write_wait);
++      init_waitqueue_head(&bitmap->overflow_wait);
+       bitmap->mddev = mddev;
+--- linux-2.6.20.1.orig/include/linux/raid/bitmap.h
++++ linux-2.6.20.1/include/linux/raid/bitmap.h
+@@ -247,6 +247,7 @@ struct bitmap {
+       atomic_t pending_writes; /* pending writes to the bitmap file */
+       wait_queue_head_t write_wait;
++      wait_queue_head_t overflow_wait;
+ };
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:13 2007
+Message-Id: <20070307170613.294748556@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:45 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ imr@rtschenk.de,
+ linuxppc-embedded@ozlabs.org,
+ Kumar Gala <galak@kernel.crashing.org>
+Subject: [patch 022/101] Fix compile error for e500 core based processors
+Content-Disposition: inline; filename=fix-compile-error-for-e500-core-based-processors.patch
+Content-Length: 1269
+Lines: 34
+
+From: Rojhalat Ibrahim <imr@rtschenk.de>
+
+We get the following compiler error:
+
+   CC      arch/ppc/kernel/ppc_ksyms.o
+arch/ppc/kernel/ppc_ksyms.c:275: error: '__mtdcr' undeclared here (not in a function)
+arch/ppc/kernel/ppc_ksyms.c:275: warning: type defaults to 'int' in declaration of '__mtdcr'
+arch/ppc/kernel/ppc_ksyms.c:276: error: '__mfdcr' undeclared here (not in a function)
+arch/ppc/kernel/ppc_ksyms.c:276: warning: type defaults to 'int' in declaration of '__mfdcr'
+make[1]: *** [arch/ppc/kernel/ppc_ksyms.o] Error 1
+
+This is due to the EXPORT_SYMBOL for __mtdcr/__mfdcr not having the proper CONFIG protection
+
+Signed-off-by: Rojhalat Ibrahim <imr@rtschenk.de>
+Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/ppc/kernel/ppc_ksyms.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/arch/ppc/kernel/ppc_ksyms.c
++++ linux-2.6.20.1/arch/ppc/kernel/ppc_ksyms.c
+@@ -270,7 +270,7 @@ EXPORT_SYMBOL(mmu_hash_lock); /* For MOL
+ extern long *intercept_table;
+ EXPORT_SYMBOL(intercept_table);
+ #endif /* CONFIG_PPC_STD_MMU */
+-#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
++#ifdef CONFIG_PPC_DCR_NATIVE
+ EXPORT_SYMBOL(__mtdcr);
+ EXPORT_SYMBOL(__mfdcr);
+ #endif
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:13 2007
+Message-Id: <20070307170613.395535918@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:46 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux1394-devel@lists.sourceforge.net,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>,
+ David Moore <dcm@acm.org>
+Subject: [patch 023/101] ieee1394: video1394: DMA fix
+Content-Disposition: inline; filename=ieee1394-video1394-dma-fix.patch
+Content-Length: 1633
+Lines: 48
+
+From: David Moore <dcm@acm.org>
+
+This together with the phys_to_virt fix in lib/swiotlb.c::swiotlb_sync_sg
+fixes video1394 DMA on machines with DMA bounce buffers, especially Intel
+x86-64 machines with > 3GB RAM.
+
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: David Moore <dcm@acm.org>
+Tested-by: Nicolas Turro <Nicolas.Turro@inrialpes.fr>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ieee1394/video1394.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/ieee1394/video1394.c
++++ linux-2.6.20.1/drivers/ieee1394/video1394.c
+@@ -489,6 +489,9 @@ static void wakeup_dma_ir_ctx(unsigned l
+                       reset_ir_status(d, i);
+                       d->buffer_status[d->buffer_prg_assignment[i]] = VIDEO1394_BUFFER_READY;
+                       do_gettimeofday(&d->buffer_time[d->buffer_prg_assignment[i]]);
++                      dma_region_sync_for_cpu(&d->dma,
++                              d->buffer_prg_assignment[i] * d->buf_size,
++                              d->buf_size);
+               }
+       }
+@@ -1096,6 +1099,8 @@ static long video1394_ioctl(struct file 
+                       DBGMSG(ohci->host->id, "Starting iso transmit DMA ctx=%d",
+                              d->ctx);
+                       put_timestamp(ohci, d, d->last_buffer);
++                      dma_region_sync_for_device(&d->dma,
++                              v.buffer * d->buf_size, d->buf_size);
+                       /* Tell the controller where the first program is */
+                       reg_write(ohci, d->cmdPtr,
+@@ -1111,6 +1116,9 @@ static long video1394_ioctl(struct file 
+                                     "Waking up iso transmit dma ctx=%d",
+                                     d->ctx);
+                               put_timestamp(ohci, d, d->last_buffer);
++                              dma_region_sync_for_device(&d->dma,
++                                      v.buffer * d->buf_size, d->buf_size);
++
+                               reg_write(ohci, d->ctrlSet, 0x1000);
+                       }
+               }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:13 2007
+Message-Id: <20070307170613.527416889@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:47 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux1394-devel@lists.sourceforge.net,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>
+Subject: [patch 024/101] ieee1394: fix host device registering when nodemgr disabled
+Content-Disposition: inline; filename=ieee1394-fix-host-device-registering-when-nodemgr-disabled.patch
+Content-Length: 1855
+Lines: 67
+
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+
+Since my commit 8252bbb1363b7fe963a3eb6f8a36da619a6f5a65 in 2.6.20-rc1,
+host devices have a dummy driver attached.  Alas the driver was not
+registered before use if ieee1394 was loaded with disable_nodemgr=1.
+
+This resulted in non-functional FireWire drivers or kernel lockup.
+http://bugzilla.kernel.org/show_bug.cgi?id=7942
+
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ieee1394/nodemgr.c |   24 ++++++++++++++++--------
+ 1 file changed, 16 insertions(+), 8 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/ieee1394/nodemgr.c
++++ linux-2.6.20.1/drivers/ieee1394/nodemgr.c
+@@ -274,7 +274,6 @@ static struct device_driver nodemgr_mid_
+ struct device nodemgr_dev_template_host = {
+       .bus            = &ieee1394_bus_type,
+       .release        = nodemgr_release_host,
+-      .driver         = &nodemgr_mid_layer_driver,
+ };
+@@ -1889,22 +1888,31 @@ int init_ieee1394_nodemgr(void)
+       error = class_register(&nodemgr_ne_class);
+       if (error)
+-              return error;
+-
++              goto fail_ne;
+       error = class_register(&nodemgr_ud_class);
+-      if (error) {
+-              class_unregister(&nodemgr_ne_class);
+-              return error;
+-      }
++      if (error)
++              goto fail_ud;
+       error = driver_register(&nodemgr_mid_layer_driver);
++      if (error)
++              goto fail_ml;
++      /* This driver is not used if nodemgr is off (disable_nodemgr=1). */
++      nodemgr_dev_template_host.driver = &nodemgr_mid_layer_driver;
++
+       hpsb_register_highlevel(&nodemgr_highlevel);
+       return 0;
++
++fail_ml:
++      class_unregister(&nodemgr_ud_class);
++fail_ud:
++      class_unregister(&nodemgr_ne_class);
++fail_ne:
++      return error;
+ }
+ void cleanup_ieee1394_nodemgr(void)
+ {
+       hpsb_unregister_highlevel(&nodemgr_highlevel);
+-
++      driver_unregister(&nodemgr_mid_layer_driver);
+       class_unregister(&nodemgr_ud_class);
+       class_unregister(&nodemgr_ne_class);
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:13 2007
+Message-Id: <20070307170613.654016184@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:48 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ len.brown@intel.com,
+ cappaberra@gmail.com,
+ Michael Hanselmann <linux-kernel@hansmi.ch>
+Subject: [patch 025/101] Fix null pointer dereference in appledisplay driver
+Content-Disposition: inline; filename=fix-null-pointer-dereference-in-appledisplay-driver.patch
+Content-Length: 994
+Lines: 29
+
+From: Michael Hanselmann <linux-kernel@hansmi.ch>
+
+Commit 40b20c257a13c5a526ac540bc5e43d0fdf29792a by Len Brown introduced
+a null pointer dereference in the appledisplay driver. This patch fixes
+it.
+
+Signed-off-by: Michael Hanselmann <linux-kernel@hansmi.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/usb/misc/appledisplay.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/usb/misc/appledisplay.c
++++ linux-2.6.20.1/drivers/usb/misc/appledisplay.c
+@@ -281,8 +281,8 @@ static int appledisplay_probe(struct usb
+       /* Register backlight device */
+       snprintf(bl_name, sizeof(bl_name), "appledisplay%d",
+               atomic_inc_return(&count_displays) - 1);
+-      pdata->bd = backlight_device_register(bl_name, NULL, NULL,
+-                                              &appledisplay_bl_data);
++      pdata->bd = backlight_device_register(bl_name, NULL,
++              pdata, &appledisplay_bl_data);
+       if (IS_ERR(pdata->bd)) {
+               err("appledisplay: Backlight registration failed");
+               goto error;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:13 2007
+Message-Id: <20070307170613.810740248@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:49 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Julien BLACHE <jb@jblache.org>,
+ Jiri Kosina <jkosina@suse.cz>
+Subject: [patch 026/101] USB HID: Fix USB vendor and product IDs endianness for USB HID devices
+Content-Disposition: inline; filename=usb-hid-fix-usb-vendor-and-product-ids-endianness-for-usb-hid-devices.patch
+Content-Length: 1078
+Lines: 32
+
+From: Julien BLACHE <jb@jblache.org>
+
+[PATCH] USB HID: Fix USB vendor and product IDs endianness for USB HID devices
+
+The USB vendor and product IDs are not byteswapped appropriately, and
+thus come out in the wrong endianness when fetched through the evdev
+using ioctl() on big endian platforms.
+
+Signed-off-by: Julien BLACHE <jb@jblache.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/usb/input/hid-core.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/usb/input/hid-core.c
++++ linux-2.6.20.1/drivers/usb/input/hid-core.c
+@@ -1212,8 +1212,8 @@ static struct hid_device *usb_hid_config
+                        le16_to_cpu(dev->descriptor.idProduct));
+       hid->bus = BUS_USB;
+-      hid->vendor = dev->descriptor.idVendor;
+-      hid->product = dev->descriptor.idProduct;
++      hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
++      hid->product = le16_to_cpu(dev->descriptor.idProduct);
+       usb_make_path(dev, hid->phys, sizeof(hid->phys));
+       strlcat(hid->phys, "/input", sizeof(hid->phys));
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:14 2007
+Message-Id: <20070307170613.912981985@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:50 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Andrew Morton <akpm@osdl.org>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Paolo Blaisorblade Giarrusso <blaisorblade@yahoo.it>
+Subject: [patch 027/101] Kconfig: FAULT_INJECTION can be selected only if LOCKDEP is enabled.
+Content-Disposition: inline; filename=kconfig-fault_injection-can-be-selected-only-if-lockdep-is-enabled.patch
+Content-Length: 789
+Lines: 26
+
+From: "Paolo 'Blaisorblade' Giarrusso" <blaisorblade@yahoo.it>
+
+There is no prompt for STACKTRACE, so it is enabled only when 'select'ed.
+FAULT_INJECTION depends on it, while LOCKDEP selects it. So FAULT_INJECTION
+becomes visible in Kconfig only when LOCKDEP is enabled.
+
+Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ lib/Kconfig.debug |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/lib/Kconfig.debug
++++ linux-2.6.20.1/lib/Kconfig.debug
+@@ -400,7 +400,7 @@ config LKDTM
+ config FAULT_INJECTION
+       bool "Fault-injection framework"
+       depends on DEBUG_KERNEL
+-      depends on STACKTRACE
++      select STACKTRACE
+       select FRAME_POINTER
+       help
+         Provide fault-injection framework.
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:14 2007
+Message-Id: <20070307170614.038888455@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:51 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Andrew Morton <akpm@osdl.org>,
+ David Woodhouse <dwmw2@infradead.org>,
+ Martin Michlmayr <tbm@cyrius.com>,
+ Yoshinori Sato <ysato@users.sourceforge.jp>,
+ Rod Whitby <rod@whitby.id.au>
+Subject: [patch 028/101] MTD: Fatal regression in drivers/mtd/redboot.c in 2.6.20
+Content-Disposition: inline; filename=mtd-fatal-regression-in-drivers-mtd-redboot.c-in-2.6.20.patch
+Content-Length: 2161
+Lines: 60
+
+From: David Woodhouse <dwmw2@infradead.org>
+
+[MTD] Fix regression in RedBoot partition scanning
+
+This fixes a regression introduced by the attempt to handle RedBoot FIS
+tables which are smaller than an eraseblock, in commit
+0b47d654089c5ce3f2ea26a4485db9bcead1e515
+
+It moves the recalculation of the number of slots in the table to the
+correct place, and improves the heuristic for when we think we need to
+byte-swap what we read from the flash.
+
+Signed-off-by: David Woodhouse <dwmw2@infradead.org>
+Cc: Rod Whitby <rod@whitby.id.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/mtd/redboot.c |   19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/mtd/redboot.c
++++ linux-2.6.20.1/drivers/mtd/redboot.c
+@@ -94,8 +94,19 @@ static int parse_redboot_partitions(stru
+                        * (NOTE: this is 'size' not 'data_length'; size is
+                        * the full size of the entry.)
+                        */
+-                      if (swab32(buf[i].size) == master->erasesize) {
++
++                      /* RedBoot can combine the FIS directory and
++                         config partitions into a single eraseblock;
++                         we assume wrong-endian if either the swapped
++                         'size' matches the eraseblock size precisely,
++                         or if the swapped size actually fits in an
++                         eraseblock while the unswapped size doesn't. */
++                      if (swab32(buf[i].size) == master->erasesize ||
++                          (buf[i].size > master->erasesize
++                           && swab32(buf[i].size) < master->erasesize)) {
+                               int j;
++                              /* Update numslots based on actual FIS directory size */
++                              numslots = swab32(buf[i].size) / sizeof (struct fis_image_desc);
+                               for (j = 0; j < numslots; ++j) {
+                                       /* A single 0xff denotes a deleted entry.
+@@ -120,11 +131,11 @@ static int parse_redboot_partitions(stru
+                                       swab32s(&buf[j].desc_cksum);
+                                       swab32s(&buf[j].file_cksum);
+                               }
++                      } else if (buf[i].size < master->erasesize) {
++                              /* Update numslots based on actual FIS directory size */
++                              numslots = buf[i].size / sizeof(struct fis_image_desc);
+                       }
+                       break;
+-              } else {
+-                      /* re-calculate of real numslots */
+-                      numslots = buf[i].size / sizeof(struct fis_image_desc);
+               }
+       }
+       if (i == numslots) {
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:14 2007
+Message-Id: <20070307170614.168292296@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:52 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ davem@davemloft.net
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ yoshfuji@linux-ipv6.org,
+ netdev@vger.kernel.org,
+ handat@pm.nttdata.co.jp
+Subject: [patch 029/101] IPV6: HASHTABLES: Use appropriate seed for caluculating ehash index.
+Content-Disposition: inline; filename=ipv6-hashtables-use-appropriate-seed-for-caluculating-ehash-index.patch
+Content-Length: 1212
+Lines: 30
+
+From: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
+
+Tetsuo Handa <handat@pm.nttdata.co.jp> told me that connect(2) with TCPv6
+socket almost always took a few minutes to return when we did not have any
+ports available in the range of net.ipv4.ip_local_port_range.
+
+The reason was that we used incorrect seed for calculating index of
+hash when we check established sockets in __inet6_check_established().
+
+Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv6/inet6_hashtables.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/net/ipv6/inet6_hashtables.c
++++ linux-2.6.20.1/net/ipv6/inet6_hashtables.c
+@@ -172,7 +172,7 @@ static int __inet6_check_established(str
+       const struct in6_addr *saddr = &np->daddr;
+       const int dif = sk->sk_bound_dev_if;
+       const __portpair ports = INET_COMBINED_PORTS(inet->dport, lport);
+-      const unsigned int hash = inet6_ehashfn(daddr, inet->num, saddr,
++      const unsigned int hash = inet6_ehashfn(daddr, lport, saddr,
+                                               inet->dport);
+       struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash);
+       struct sock *sk2;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:14 2007
+Message-Id: <20070307170614.302656541@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:53 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Stern <stern@rowland.harvard.edu>
+Subject: [patch 030/101] EHCI: turn off remote wakeup during shutdown
+Content-Disposition: inline; filename=ehci-turn-off-remote-wakeup-during-shutdown.patch
+Content-Length: 1709
+Lines: 51
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+This patch (as850b) disables remote wakeup (and everything else!) on
+all EHCI ports when the shutdown() method is called.  If remote wakeup
+is left active then some systems will reboot instead of powering off.
+This fixes Bugzilla #7828.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-hcd.c |   16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/usb/host/ehci-hcd.c
++++ linux-2.6.20.1/drivers/usb/host/ehci-hcd.c
+@@ -296,6 +296,18 @@ static void ehci_watchdog (unsigned long
+       spin_unlock_irqrestore (&ehci->lock, flags);
+ }
++/* On some systems, leaving remote wakeup enabled prevents system shutdown.
++ * The firmware seems to think that powering off is a wakeup event!
++ * This routine turns off remote wakeup and everything else, on all ports.
++ */
++static void ehci_turn_off_all_ports(struct ehci_hcd *ehci)
++{
++      int     port = HCS_N_PORTS(ehci->hcs_params);
++
++      while (port--)
++              writel(PORT_RWC_BITS, &ehci->regs->port_status[port]);
++}
++
+ /* ehci_shutdown kick in for silicon on any bus (not just pci, etc).
+  * This forcibly disables dma and IRQs, helping kexec and other cases
+  * where the next system software may expect clean state.
+@@ -307,9 +319,13 @@ ehci_shutdown (struct usb_hcd *hcd)
+       ehci = hcd_to_ehci (hcd);
+       (void) ehci_halt (ehci);
++      ehci_turn_off_all_ports(ehci);
+       /* make BIOS/etc use companion controller during reboot */
+       writel (0, &ehci->regs->configured_flag);
++
++      /* unblock posted writes */
++      readl(&ehci->regs->configured_flag);
+ }
+ static void ehci_port_power (struct ehci_hcd *ehci, int is_on)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:14 2007
+Message-Id: <20070307170614.426024980@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:54 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Neil Brown <neilb@suse.de>
+Subject: [patch 031/101] Avoid using nfsd process pools on SMP machines.
+Content-Disposition: inline; filename=avoid-using-nfsd-process-pools-on-smp-machines.patch
+Content-Length: 1021
+Lines: 34
+
+From: NeilBrown <neilb@suse.de>
+
+
+process-pools have real benefits for NUMA, but on SMP
+machines they only work if network interface interrupts
+go to all CPUs (via round-robin or multiple nics).  This is
+not always the case, so disable the pools in this case until
+a better solution is developped.
+
+Signed-off-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+diff .prev/net/sunrpc/svc.c ./net/sunrpc/svc.c
+---
+ net/sunrpc/svc.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/net/sunrpc/svc.c
++++ linux-2.6.20.1/net/sunrpc/svc.c
+@@ -79,7 +79,11 @@ svc_pool_map_choose_mode(void)
+                * x86_64 kernel on Xeons.  In this case we
+                * want to divide the pools on cpu boundaries.
+                */
+-              return SVC_POOL_PERCPU;
++              /* actually, unless your IRQs round-robin nicely,
++               * this turns out to be really bad, so just
++               * go GLOBAL for now until a better fix can be developped
++               */
++              return SVC_POOL_GLOBAL;
+       }
+       /* default: one global pool */
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:14 2007
+Message-Id: <20070307170614.574735180@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:55 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Neil Brown <neilb@suse.de>
+Subject: [patch 032/101] Fix recently introduced problem with shutting down a busy NFS server.
+Content-Disposition: inline; filename=fix-recently-introduced-problem-with-shutting-down-a-busy-nfs-server.patch
+Content-Length: 3715
+Lines: 121
+
+From: NeilBrown <neilb@suse.de>
+
+
+When the last thread of nfsd exits, it shuts down all related sockets.
+It currently uses svc_close_socket to do this, but that only is
+immediately effective if the socket is not SK_BUSY.
+
+If the socket is busy - i.e. if a request has arrived that has not yet
+been processes - svc_close_socket is not effective and the shutdown
+process spins.
+
+So create a new svc_force_close_socket which removes the SK_BUSY flag
+is set and then calls svc_close_socket.
+
+Also change some open-codes loops in svc_destroy to use
+list_for_each_entry_safe.
+
+Signed-off-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ include/linux/sunrpc/svcsock.h |    2 +-
+ net/sunrpc/svc.c               |   23 ++++++++++-------------
+ net/sunrpc/svcsock.c           |   16 +++++++++++++++-
+ 3 files changed, 26 insertions(+), 15 deletions(-)
+
+--- linux-2.6.20.1.orig/include/linux/sunrpc/svcsock.h
++++ linux-2.6.20.1/include/linux/sunrpc/svcsock.h
+@@ -63,7 +63,7 @@ struct svc_sock {
+  * Function prototypes.
+  */
+ int           svc_makesock(struct svc_serv *, int, unsigned short);
+-void          svc_close_socket(struct svc_sock *);
++void          svc_force_close_socket(struct svc_sock *);
+ int           svc_recv(struct svc_rqst *, long);
+ int           svc_send(struct svc_rqst *);
+ void          svc_drop(struct svc_rqst *);
+--- linux-2.6.20.1.orig/net/sunrpc/svc.c
++++ linux-2.6.20.1/net/sunrpc/svc.c
+@@ -371,6 +371,7 @@ void
+ svc_destroy(struct svc_serv *serv)
+ {
+       struct svc_sock *svsk;
++      struct svc_sock *tmp;
+       dprintk("RPC: svc_destroy(%s, %d)\n",
+                               serv->sv_program->pg_name,
+@@ -386,22 +387,18 @@ svc_destroy(struct svc_serv *serv)
+       del_timer_sync(&serv->sv_temptimer);
+-      while (!list_empty(&serv->sv_tempsocks)) {
+-              svsk = list_entry(serv->sv_tempsocks.next,
+-                                struct svc_sock,
+-                                sk_list);
+-              svc_close_socket(svsk);
+-      }
++      list_for_each_entry_safe(svsk, tmp, &serv->sv_tempsocks, sk_list)
++              svc_force_close_socket(svsk);
++
+       if (serv->sv_shutdown)
+               serv->sv_shutdown(serv);
+-      while (!list_empty(&serv->sv_permsocks)) {
+-              svsk = list_entry(serv->sv_permsocks.next,
+-                                struct svc_sock,
+-                                sk_list);
+-              svc_close_socket(svsk);
+-      }
+-      
++      list_for_each_entry_safe(svsk, tmp, &serv->sv_permsocks, sk_list)
++              svc_force_close_socket(svsk);
++
++      BUG_ON(!list_empty(&serv->sv_permsocks));
++      BUG_ON(!list_empty(&serv->sv_tempsocks));
++
+       cache_clean_deferred(serv);
+       /* Unregister service with the portmapper */
+--- linux-2.6.20.1.orig/net/sunrpc/svcsock.c
++++ linux-2.6.20.1/net/sunrpc/svcsock.c
+@@ -80,6 +80,7 @@ static void          svc_delete_socket(struct sv
+ static void           svc_udp_data_ready(struct sock *, int);
+ static int            svc_udp_recvfrom(struct svc_rqst *);
+ static int            svc_udp_sendto(struct svc_rqst *);
++static void           svc_close_socket(struct svc_sock *svsk);
+ static struct svc_deferred_req *svc_deferred_dequeue(struct svc_sock *svsk);
+ static int svc_deferred_recv(struct svc_rqst *rqstp);
+@@ -1668,7 +1669,7 @@ svc_delete_socket(struct svc_sock *svsk)
+       spin_unlock_bh(&serv->sv_lock);
+ }
+-void svc_close_socket(struct svc_sock *svsk)
++static void svc_close_socket(struct svc_sock *svsk)
+ {
+       set_bit(SK_CLOSE, &svsk->sk_flags);
+       if (test_and_set_bit(SK_BUSY, &svsk->sk_flags))
+@@ -1681,6 +1682,19 @@ void svc_close_socket(struct svc_sock *s
+       svc_sock_put(svsk);
+ }
++void svc_force_close_socket(struct svc_sock *svsk)
++{
++      set_bit(SK_CLOSE, &svsk->sk_flags);
++      if (test_bit(SK_BUSY, &svsk->sk_flags)) {
++              /* Waiting to be processed, but no threads left,
++               * So just remove it from the waiting list
++               */
++              list_del_init(&svsk->sk_ready);
++              clear_bit(SK_BUSY, &svsk->sk_flags);
++      }
++      svc_close_socket(svsk);
++}
++
+ /*
+  * Make a socket for nfsd and lockd
+  */
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:14 2007
+Message-Id: <20070307170614.683134122@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:56 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Greg KH <greg@kroah.com>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Guilherme Salgado <gsalgado@gmail.com>,
+ USB development list <linux-usb-devel@lists.sourceforge.net>,
+ Alan Stern <stern@rowland.harvard.edu>
+Subject: [patch 033/101] UHCI: fix port resume problem
+Content-Disposition: inline; filename=uhci-fix-port-resume-problem.patch
+Content-Length: 2096
+Lines: 59
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+This patch (as863) fixes a problem encountered sometimes when resuming
+a port on a UHCI controller.  The hardware may turn off the
+Resume-Detect bit before turning off the Suspend bit, leading usbcore
+to think that the port is still suspended and the resume has failed.
+The patch makes uhci_finish_suspend() wait until both bits are safely
+off.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/uhci-hub.c |   11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/usb/host/uhci-hub.c
++++ linux-2.6.20.1/drivers/usb/host/uhci-hub.c
+@@ -33,6 +33,9 @@ static __u8 root_hub_hub_des[] =
+ /* status change bits:  nonzero writes will clear */
+ #define RWC_BITS      (USBPORTSC_OCC | USBPORTSC_PEC | USBPORTSC_CSC)
++/* suspend/resume bits: port suspended or port resuming */
++#define SUSPEND_BITS  (USBPORTSC_SUSP | USBPORTSC_RD)
++
+ /* A port that either is connected or has a changed-bit set will prevent
+  * us from AUTO_STOPPING.
+  */
+@@ -96,8 +99,8 @@ static void uhci_finish_suspend(struct u
+       int status;
+       int i;
+-      if (inw(port_addr) & (USBPORTSC_SUSP | USBPORTSC_RD)) {
+-              CLR_RH_PORTSTAT(USBPORTSC_SUSP | USBPORTSC_RD);
++      if (inw(port_addr) & SUSPEND_BITS) {
++              CLR_RH_PORTSTAT(SUSPEND_BITS);
+               if (test_bit(port, &uhci->resuming_ports))
+                       set_bit(port, &uhci->port_c_suspend);
+@@ -107,7 +110,7 @@ static void uhci_finish_suspend(struct u
+                * Experiments show that some controllers take longer, so
+                * we'll poll for completion. */
+               for (i = 0; i < 10; ++i) {
+-                      if (!(inw(port_addr) & USBPORTSC_RD))
++                      if (!(inw(port_addr) & SUSPEND_BITS))
+                               break;
+                       udelay(1);
+               }
+@@ -289,7 +292,7 @@ static int uhci_hub_control(struct usb_h
+                       wPortStatus |= USB_PORT_STAT_CONNECTION;
+               if (status & USBPORTSC_PE) {
+                       wPortStatus |= USB_PORT_STAT_ENABLE;
+-                      if (status & (USBPORTSC_SUSP | USBPORTSC_RD))
++                      if (status & SUSPEND_BITS)
+                               wPortStatus |= USB_PORT_STAT_SUSPEND;
+               }
+               if (status & USBPORTSC_OC)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:14 2007
+Message-Id: <20070307170614.809212680@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:57 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 034/101] Fix atmarp.h for userspace
+Content-Disposition: inline; filename=fix-atmarp.h-for-userspace.patch
+Content-Length: 631
+Lines: 30
+
+
+From: David Miller <davem@davemloft.net>
+
+[ATM]: atmarp.h needs to always include linux/types.h
+
+To provide the __be* types, even for userspace includes.
+
+Reported by Andrew Walrond.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/atmarp.h |    2 --
+ 1 file changed, 2 deletions(-)
+
+--- linux-2.6.20.1.orig/include/linux/atmarp.h
++++ linux-2.6.20.1/include/linux/atmarp.h
+@@ -6,9 +6,7 @@
+ #ifndef _LINUX_ATMARP_H
+ #define _LINUX_ATMARP_H
+-#ifdef __KERNEL__
+ #include <linux/types.h>
+-#endif
+ #include <linux/atmapi.h>
+ #include <linux/atmioc.h>
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:15 2007
+Message-Id: <20070307170614.990847447@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:58 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ Herbert Xu <herbert@gondor.apana.org.au>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 035/101] Clear TCP segmentation offload state in ipt_REJECT
+Content-Disposition: inline; filename=clear-tcp-segmentation-offload-state-in-ipt_reject.patch
+Content-Length: 950
+Lines: 33
+
+From: Herbert Xu <herbert@gondor.apana.org.au>
+
+[NETFILTER]: Clear GSO bits for TCP reset packet
+
+The TCP reset packet is copied from the original.  This
+includes all the GSO bits which do not apply to the new
+packet.  So we should clear those bits.
+
+Spotted by Patrick McHardy.
+
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/netfilter/ipt_REJECT.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- linux-2.6.20.1.orig/net/ipv4/netfilter/ipt_REJECT.c
++++ linux-2.6.20.1/net/ipv4/netfilter/ipt_REJECT.c
+@@ -79,6 +79,10 @@ static void send_reset(struct sk_buff *o
+       nskb->mark = 0;
+       skb_init_secmark(nskb);
++      skb_shinfo(nskb)->gso_size = 0;
++      skb_shinfo(nskb)->gso_segs = 0;
++      skb_shinfo(nskb)->gso_type = 0;
++
+       tcph = (struct tcphdr *)((u_int32_t*)nskb->nh.iph + nskb->nh.iph->ihl);
+       /* Swap source and dest */
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:15 2007
+Message-Id: <20070307170615.069330025@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:01:59 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ Jiri Bohac <jbohac@suse.cz>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 036/101] Fix IPX module unload
+Content-Disposition: inline; filename=fix-ipx-module-unload.patch
+Content-Length: 1573
+Lines: 59
+
+From: Jiri Bohac <jbohac@suse.cz>
+
+[IPX]: Fix NULL pointer dereference on ipx unload
+
+Fixes a null pointer dereference when unloading the ipx module.
+
+On initialization of the ipx module, registering certain packet
+types can fail. When this happens, unloading the module later
+dereferences NULL pointers.  This patch fixes that. Please apply.
+
+Signed-off-by: Jiri Bohac <jbohac@suse.cz>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipx/af_ipx.c |   26 +++++++++++++++++---------
+ 1 file changed, 17 insertions(+), 9 deletions(-)
+
+--- linux-2.6.20.1.orig/net/ipx/af_ipx.c
++++ linux-2.6.20.1/net/ipx/af_ipx.c
+@@ -2035,19 +2035,27 @@ static void __exit ipx_proto_finito(void
+       ipxitf_cleanup();
+-      unregister_snap_client(pSNAP_datalink);
+-      pSNAP_datalink = NULL;
+-
+-      unregister_8022_client(p8022_datalink);
+-      p8022_datalink = NULL;
++      if (pSNAP_datalink) {
++              unregister_snap_client(pSNAP_datalink);
++              pSNAP_datalink = NULL;
++      }
++
++      if (p8022_datalink) {
++              unregister_8022_client(p8022_datalink);
++              p8022_datalink = NULL;
++      }
+       dev_remove_pack(&ipx_8023_packet_type);
+-      destroy_8023_client(p8023_datalink);
+-      p8023_datalink = NULL;
++      if (p8023_datalink) {
++              destroy_8023_client(p8023_datalink);
++              p8023_datalink = NULL;
++      }
+       dev_remove_pack(&ipx_dix_packet_type);
+-      destroy_EII_client(pEII_datalink);
+-      pEII_datalink = NULL;
++      if (pEII_datalink) {
++              destroy_EII_client(pEII_datalink);
++              pEII_datalink = NULL;
++      }
+       proto_unregister(&ipx_proto);
+       sock_unregister(ipx_family_ops.family);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:15 2007
+Message-Id: <20070307170615.204525102@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:00 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ =?ISO-8859-15?q?Ilpo=20J=C3=A4rvinen?= <ilpo.jarvinen@helsinki.fi>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 037/101] : Prevent pseudo garbage in SYNs advertized window
+Content-Disposition: inline; filename=prevent-pseudo-garbage-in-syn-s-advertized-window.patch
+Content-Length: 1996
+Lines: 54
+
+From: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
+
+TCP may advertize up to 16-bits window in SYN packets (no window
+scaling allowed). At the same time, TCP may have rcv_wnd
+(32-bits) that does not fit to 16-bits without window scaling
+resulting in pseudo garbage into advertized window from the
+low-order bits of rcv_wnd. This can happen at least when
+mss <= (1<<wscale) (see tcp_select_initial_window). This patch
+fixes the handling of SYN advertized windows (compile tested
+only).
+
+In worst case (which is unlikely to occur though), the receiver
+advertized window could be just couple of bytes. I'm not sure
+that such situation would be handled very well at all by the
+receiver!? Fortunately, the situation normalizes after the
+first non-SYN ACK is received because it has the correct,
+scaled window.
+
+Alternatively, tcp_select_initial_window could be changed to
+prevent too large rcv_wnd in the first place.
+
+[ tcp_make_synack() has the same bug, and I've added a fix for
+  that to this patch -DaveM ]
+
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/tcp_output.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/net/ipv4/tcp_output.c
++++ linux-2.6.20.1/net/ipv4/tcp_output.c
+@@ -481,7 +481,7 @@ static int tcp_transmit_skb(struct sock 
+               /* RFC1323: The window in SYN & SYN/ACK segments
+                * is never scaled.
+                */
+-              th->window      = htons(tp->rcv_wnd);
++              th->window      = htons(min(tp->rcv_wnd, 65535U));
+       } else {
+               th->window      = htons(tcp_select_window(sk));
+       }
+@@ -2160,7 +2160,7 @@ struct sk_buff * tcp_make_synack(struct 
+       }
+       /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */
+-      th->window = htons(req->rcv_wnd);
++      th->window = htons(min(req->rcv_wnd, 65535U));
+       TCP_SKB_CB(skb)->when = tcp_time_stamp;
+       tcp_syn_build_options((__be32 *)(th + 1), dst_metric(dst, RTAX_ADVMSS), ireq->tstamp_ok,
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:15 2007
+Message-Id: <20070307170615.335613514@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:01 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 038/101] Fix oops in xfrm_audit_log()
+Content-Disposition: inline; filename=fix-oops-in-xfrm_audit_log.patch
+Content-Length: 2661
+Lines: 92
+
+From: David Miller <davem@davemloft.net>
+
+[XFRM]: Fix OOPSes in xfrm_audit_log().
+
+Make sure that this function is called correctly, and
+add BUG() checking to ensure the arguments are sane.
+
+Based upon a patch by Joy Latten.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/key/af_key.c       |   11 ++++++-----
+ net/xfrm/xfrm_policy.c |    7 ++++++-
+ net/xfrm/xfrm_user.c   |   12 +++++++-----
+ 3 files changed, 19 insertions(+), 11 deletions(-)
+
+--- linux-2.6.20.1.orig/net/key/af_key.c
++++ linux-2.6.20.1/net/key/af_key.c
+@@ -2297,16 +2297,17 @@ static int pfkey_spddelete(struct sock *
+                                  &sel, tmp.security, 1);
+       security_xfrm_policy_free(&tmp);
+-      xfrm_audit_log(audit_get_loginuid(current->audit_context), 0,
+-                     AUDIT_MAC_IPSEC_DELSPD, (xp) ? 1 : 0, xp, NULL);
+-
+       if (xp == NULL)
+               return -ENOENT;
+-      err = 0;
++      err = security_xfrm_policy_delete(xp);
+-      if ((err = security_xfrm_policy_delete(xp)))
++      xfrm_audit_log(audit_get_loginuid(current->audit_context), 0,
++                     AUDIT_MAC_IPSEC_DELSPD, err ? 0 : 1, xp, NULL);
++
++      if (err)
+               goto out;
++
+       c.seq = hdr->sadb_msg_seq;
+       c.pid = hdr->sadb_msg_pid;
+       c.event = XFRM_MSG_DELPOLICY;
+--- linux-2.6.20.1.orig/net/xfrm/xfrm_policy.c
++++ linux-2.6.20.1/net/xfrm/xfrm_policy.c
+@@ -1997,9 +1997,14 @@ void xfrm_audit_log(uid_t auid, u32 sid,
+       if (audit_enabled == 0)
+               return;
++      BUG_ON((type == AUDIT_MAC_IPSEC_ADDSA ||
++              type == AUDIT_MAC_IPSEC_DELSA) && !x);
++      BUG_ON((type == AUDIT_MAC_IPSEC_ADDSPD ||
++              type == AUDIT_MAC_IPSEC_DELSPD) && !xp);
++
+       audit_buf = audit_log_start(current->audit_context, GFP_ATOMIC, type);
+       if (audit_buf == NULL)
+-      return;
++              return;
+       switch(type) {
+       case AUDIT_MAC_IPSEC_ADDSA:
+--- linux-2.6.20.1.orig/net/xfrm/xfrm_user.c
++++ linux-2.6.20.1/net/xfrm/xfrm_user.c
+@@ -1273,10 +1273,6 @@ static int xfrm_get_policy(struct sk_buf
+               xp = xfrm_policy_bysel_ctx(type, p->dir, &p->sel, tmp.security, delete);
+               security_xfrm_policy_free(&tmp);
+       }
+-      if (delete)
+-              xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid,
+-                             AUDIT_MAC_IPSEC_DELSPD, (xp) ? 1 : 0, xp, NULL);
+-
+       if (xp == NULL)
+               return -ENOENT;
+@@ -1292,8 +1288,14 @@ static int xfrm_get_policy(struct sk_buf
+                                             MSG_DONTWAIT);
+               }
+       } else {
+-              if ((err = security_xfrm_policy_delete(xp)) != 0)
++              err = security_xfrm_policy_delete(xp);
++
++              xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid,
++                             AUDIT_MAC_IPSEC_DELSPD, err ? 0 : 1, xp, NULL);
++
++              if (err != 0)
+                       goto out;
++
+               c.data.byid = p->index;
+               c.event = nlh->nlmsg_type;
+               c.seq = nlh->nlmsg_seq;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:15 2007
+Message-Id: <20070307170615.465996809@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:02 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Stephen Hemminger <shemminger@linux-foundation.org>
+Subject: [patch 039/101] sky2: dont flush good pause frames
+Content-Disposition: inline; filename=sky2-pause-flush.patch
+Content-Length: 781
+Lines: 26
+
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+
+Don't mark pause frames as errors. This problem caused transmitter not
+to pause and would effectively take out a gigabit switch because the
+it can't handle overrun.
+
+Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/sky2.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/net/sky2.h
++++ linux-2.6.20.1/drivers/net/sky2.h
+@@ -1579,7 +1579,7 @@ enum {
+       GMR_FS_ANY_ERR  = GMR_FS_RX_FF_OV | GMR_FS_CRC_ERR |
+                         GMR_FS_FRAGMENT | GMR_FS_LONG_ERR |
+-                        GMR_FS_MII_ERR | GMR_FS_GOOD_FC | GMR_FS_BAD_FC |
++                        GMR_FS_MII_ERR | GMR_FS_BAD_FC |
+                         GMR_FS_UN_SIZE | GMR_FS_JABBER,
+ };
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:15 2007
+Message-Id: <20070307170615.591501552@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:03 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Stephen Hemminger <shemminger@linux-foundation.org>
+Subject: [patch 040/101] sky2: transmit timeout deadlock
+Content-Disposition: inline; filename=sky2-tx-timeout-deadlock.patch
+Content-Length: 1309
+Lines: 43
+
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+
+The code in transmit timeout incorrectly assumed that netif_tx_lock
+was not set.
+
+Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/sky2.c |    6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/net/sky2.c
++++ linux-2.6.20.1/drivers/net/sky2.c
+@@ -1796,6 +1796,7 @@ out:
+ /* Transmit timeout is only called if we are running, carries is up
+  * and tx queue is full (stopped).
++ * Called with netif_tx_lock held.
+  */
+ static void sky2_tx_timeout(struct net_device *dev)
+ {
+@@ -1821,17 +1822,14 @@ static void sky2_tx_timeout(struct net_d
+               sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
+       } else if (report != sky2->tx_cons) {
+               printk(KERN_INFO PFX "status report lost?\n");
+-
+-              netif_tx_lock_bh(dev);
+               sky2_tx_complete(sky2, report);
+-              netif_tx_unlock_bh(dev);
+       } else {
+               printk(KERN_INFO PFX "hardware hung? flushing\n");
+               sky2_write32(hw, Q_ADDR(txq, Q_CSR), BMU_STOP);
+               sky2_write32(hw, Y2_QADDR(txq, PREF_UNIT_CTRL), PREF_UNIT_RST_SET);
+-              sky2_tx_clean(dev);
++              sky2_tx_complete(sky2, sky2->tx_prod);
+               sky2_qset(hw, txq);
+               sky2_prefetch_init(hw, txq, sky2->tx_le_map, TX_RING_SIZE - 1);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:15 2007
+Message-Id: <20070307170615.725538381@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:04 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Andi Kleen <ak@suse.de>
+Subject: [patch 041/101] x86_64: Fix wrong gcc check in bitops.h
+Content-Disposition: inline; filename=x86_64-fix-wrong-gcc-check-in-bitops.h.patch
+Content-Length: 622
+Lines: 25
+
+
+
+gcc 5.0 will likely not have the constraint problem
+
+Signed-off-by: Andi Kleen <ak@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ include/asm-x86_64/bitops.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/include/asm-x86_64/bitops.h
++++ linux-2.6.20.1/include/asm-x86_64/bitops.h
+@@ -7,7 +7,7 @@
+ #include <asm/alternative.h>
+-#if __GNUC__ < 4 || __GNUC_MINOR__ < 1
++#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
+ /* Technically wrong, but this avoids compilation errors on some gcc
+    versions. */
+ #define ADDR "=m" (*(volatile long *) addr)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:15 2007
+Message-Id: <20070307170615.854330133@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:05 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Andi Kleen <ak@suse.de>
+Subject: [patch 042/101] x86: Dont require the vDSO for handling a.out signals
+Content-Disposition: inline; filename=x86-don-t-require-the-vdso-for-handling-a.out-signals.patch
+Content-Length: 2693
+Lines: 87
+
+From: Andi Kleen <ak@suse.de>
+
+x86: Don't require the vDSO for handling a.out signals
+
+and in other strange binfmts. vDSO is not necessarily mapped there.
+
+This fixes signals in a.out programs
+
+Signed-off-by: Andi Kleen <ak@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/i386/kernel/signal.c      |    6 +++++-
+ arch/x86_64/ia32/ia32_signal.c |    7 ++++++-
+ fs/binfmt_elf.c                |    3 ++-
+ include/linux/binfmts.h        |    1 +
+ 4 files changed, 14 insertions(+), 3 deletions(-)
+
+--- linux-2.6.20.1.orig/arch/i386/kernel/signal.c
++++ linux-2.6.20.1/arch/i386/kernel/signal.c
+@@ -21,6 +21,7 @@
+ #include <linux/suspend.h>
+ #include <linux/ptrace.h>
+ #include <linux/elf.h>
++#include <linux/binfmts.h>
+ #include <asm/processor.h>
+ #include <asm/ucontext.h>
+ #include <asm/uaccess.h>
+@@ -349,7 +350,10 @@ static int setup_frame(int sig, struct k
+                       goto give_sigsegv;
+       }
+-      restorer = (void *)VDSO_SYM(&__kernel_sigreturn);
++      if (current->binfmt->hasvdso)
++              restorer = (void *)VDSO_SYM(&__kernel_sigreturn);
++      else
++              restorer = (void *)&frame->retcode;
+       if (ka->sa.sa_flags & SA_RESTORER)
+               restorer = ka->sa.sa_restorer;
+--- linux-2.6.20.1.orig/arch/x86_64/ia32/ia32_signal.c
++++ linux-2.6.20.1/arch/x86_64/ia32/ia32_signal.c
+@@ -21,6 +21,7 @@
+ #include <linux/stddef.h>
+ #include <linux/personality.h>
+ #include <linux/compat.h>
++#include <linux/binfmts.h>
+ #include <asm/ucontext.h>
+ #include <asm/uaccess.h>
+ #include <asm/i387.h>
+@@ -449,7 +450,11 @@ int ia32_setup_frame(int sig, struct k_s
+       /* Return stub is in 32bit vsyscall page */
+       { 
+-              void __user *restorer = VSYSCALL32_SIGRETURN; 
++              void __user *restorer;
++              if (current->binfmt->hasvdso)
++                      restorer = VSYSCALL32_SIGRETURN;
++              else
++                      restorer = (void *)&frame->retcode;
+               if (ka->sa.sa_flags & SA_RESTORER)
+                       restorer = ka->sa.sa_restorer;       
+               err |= __put_user(ptr_to_compat(restorer), &frame->pretcode);
+--- linux-2.6.20.1.orig/fs/binfmt_elf.c
++++ linux-2.6.20.1/fs/binfmt_elf.c
+@@ -76,7 +76,8 @@ static struct linux_binfmt elf_format = 
+               .load_binary    = load_elf_binary,
+               .load_shlib     = load_elf_library,
+               .core_dump      = elf_core_dump,
+-              .min_coredump   = ELF_EXEC_PAGESIZE
++              .min_coredump   = ELF_EXEC_PAGESIZE,
++              .hasvdso        = 1
+ };
+ #define BAD_ADDR(x) ((unsigned long)(x) >= TASK_SIZE)
+--- linux-2.6.20.1.orig/include/linux/binfmts.h
++++ linux-2.6.20.1/include/linux/binfmts.h
+@@ -59,6 +59,7 @@ struct linux_binfmt {
+       int (*load_shlib)(struct file *);
+       int (*core_dump)(long signr, struct pt_regs * regs, struct file * file);
+       unsigned long min_coredump;     /* minimal dump size */
++      int hasvdso;
+ };
+ extern int register_binfmt(struct linux_binfmt *);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:16 2007
+Message-Id: <20070307170616.036012112@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:06 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jan Beulich <jbeulich@novell.com>,
+ Andi Kleen <ak@suse.de>
+Subject: [patch 043/101] i386: Fix broken CONFIG_COMPAT_VDSO on i386
+Content-Disposition: inline; filename=i386-fix-broken-config_compat_vdso-on-i386.patch
+Content-Length: 1367
+Lines: 37
+
+From: "Jan Beulich" <jbeulich@novell.com>
+
+After updating several machines to 2.6.20, I can't boot  anymore the single
+one of them that supports the NX bit and is configured as a 32-bit system.
+
+My understanding is that the VDSO changes in 2.6.20-rc7 were not fully
+cooked, in that with that config option enabled VDSO_SYM(x) now equals
+x, meaning that an address in the fixmap area is now being passed to
+apps via AT_SYSINFO. However, the page is mapped with PAGE_READONLY
+rather than PAGE_READONLY_EXEC.
+
+I'm not certain whether having app code go through the fixmap area is
+intended, but in case it is here is the simple patch that makes things work
+again.
+
+Cc: Theodore Tso <tytso@mit.edu>
+Signed-off-by: Jan Beulich <jbeulich@novell.com>
+Signed-off-by: Andi Kleen <ak@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/i386/kernel/sysenter.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/arch/i386/kernel/sysenter.c
++++ linux-2.6.20.1/arch/i386/kernel/sysenter.c
+@@ -77,7 +77,7 @@ int __init sysenter_setup(void)
+       syscall_page = (void *)get_zeroed_page(GFP_ATOMIC);
+ #ifdef CONFIG_COMPAT_VDSO
+-      __set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_READONLY);
++      __set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_READONLY_EXEC);
+       printk("Compat vDSO mapped to %08lx.\n", __fix_to_virt(FIX_VDSO));
+ #endif
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:16 2007
+Message-Id: <20070307170616.110605929@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:07 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ John Linville <linville@tuxdriver.com>,
+ Stefano Brivio <stefano.brivio@polimi.it>,
+ Larry Finger <larry.finger@lwfinger.net>,
+ Michael Buesch <mb@bu3sch.de>
+Subject: [patch 044/101] bcm43xx: fix for 4309
+Content-Disposition: inline; filename=bcm43xx-fix-for-4309.patch
+Content-Length: 1071
+Lines: 30
+
+From: Stefano Brivio <stefano.brivio@polimi.it>
+
+BCM4309 devices aren't working properly as A PHYs aren't supported yet, but
+we probe 802.11a cores anyway. This fixes it, while still allowing for A PHY code
+to be developed in the future.
+
+Signed-off-by: Stefano Brivio <stefano.brivio@polimi.it>
+Cc: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/bcm43xx/bcm43xx_main.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c
++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+@@ -2736,8 +2736,9 @@ static int bcm43xx_probe_cores(struct bc
+                                * dangling pins on the second core. Be careful
+                                * and ignore these cores here.
+                                */
+-                              if (bcm->pci_dev->device != 0x4324) {
+-                                      dprintk(KERN_INFO PFX "Ignoring additional 802.11 core.\n");
++                              if (1 /*bcm->pci_dev->device != 0x4324*/ ) {
++                              /* TODO: A PHY */
++                                      dprintk(KERN_INFO PFX "Ignoring additional 802.11a core.\n");
+                                       continue;
+                               }
+                       }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:16 2007
+Message-Id: <20070307170616.237061071@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:08 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Andrew Morton <akpm@linux-foundation.org>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux-raid@vger.kernel.org,
+ Neil Brown <neilb@suse.de>
+Subject: [patch 045/101] md: Fix raid10 recovery problem.
+Content-Disposition: inline; filename=md-fix-raid10-recovery-problem.patch
+Content-Length: 3576
+Lines: 111
+
+From: NeilBrown <neilb@suse.de>
+
+There are two errors that can lead to recovery problems with raid10
+when used in 'far' more (not the default).
+
+Due to a '>' instead of '>=' the wrong block is located which would
+result in garbage being written to some random location, quite
+possible outside the range of the device, causing the newly
+reconstructed device to fail.
+
+The device size calculation had some rounding errors (it didn't round
+when it should) and so recovery would go a few blocks too far which
+would again cause a write to a random block address and probably
+a device error.
+
+The code for working with device sizes was fairly confused and spread
+out, so this has been tided up a bit.
+
+Signed-off-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/md/raid10.c |   38 ++++++++++++++++++++------------------
+ 1 file changed, 20 insertions(+), 18 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/md/raid10.c
++++ linux-2.6.20.1/drivers/md/raid10.c
+@@ -429,7 +429,7 @@ static sector_t raid10_find_virt(conf_t 
+               if (dev < 0)
+                       dev += conf->raid_disks;
+       } else {
+-              while (sector > conf->stride) {
++              while (sector >= conf->stride) {
+                       sector -= conf->stride;
+                       if (dev < conf->near_copies)
+                               dev += conf->raid_disks - conf->near_copies;
+@@ -1801,6 +1801,7 @@ static sector_t sync_request(mddev_t *md
+                                               for (k=0; k<conf->copies; k++)
+                                                       if (r10_bio->devs[k].devnum == i)
+                                                               break;
++                                              BUG_ON(k == conf->copies);
+                                               bio = r10_bio->devs[1].bio;
+                                               bio->bi_next = biolist;
+                                               biolist = bio;
+@@ -2021,19 +2022,30 @@ static int run(mddev_t *mddev)
+       if (!conf->tmppage)
+               goto out_free_conf;
++      conf->mddev = mddev;
++      conf->raid_disks = mddev->raid_disks;
+       conf->near_copies = nc;
+       conf->far_copies = fc;
+       conf->copies = nc*fc;
+       conf->far_offset = fo;
+       conf->chunk_mask = (sector_t)(mddev->chunk_size>>9)-1;
+       conf->chunk_shift = ffz(~mddev->chunk_size) - 9;
++      size = mddev->size >> (conf->chunk_shift-1);
++      sector_div(size, fc);
++      size = size * conf->raid_disks;
++      sector_div(size, nc);
++      /* 'size' is now the number of chunks in the array */
++      /* calculate "used chunks per device" in 'stride' */
++      stride = size * conf->copies;
++      sector_div(stride, conf->raid_disks);
++      mddev->size = stride  << (conf->chunk_shift-1);
++
+       if (fo)
+-              conf->stride = 1 << conf->chunk_shift;
+-      else {
+-              stride = mddev->size >> (conf->chunk_shift-1);
++              stride = 1;
++      else
+               sector_div(stride, fc);
+-              conf->stride = stride << conf->chunk_shift;
+-      }
++      conf->stride = stride << conf->chunk_shift;
++
+       conf->r10bio_pool = mempool_create(NR_RAID10_BIOS, r10bio_pool_alloc,
+                                               r10bio_pool_free, conf);
+       if (!conf->r10bio_pool) {
+@@ -2063,8 +2075,6 @@ static int run(mddev_t *mddev)
+               disk->head_position = 0;
+       }
+-      conf->raid_disks = mddev->raid_disks;
+-      conf->mddev = mddev;
+       spin_lock_init(&conf->device_lock);
+       INIT_LIST_HEAD(&conf->retry_list);
+@@ -2106,16 +2116,8 @@ static int run(mddev_t *mddev)
+       /*
+        * Ok, everything is just fine now
+        */
+-      if (conf->far_offset) {
+-              size = mddev->size >> (conf->chunk_shift-1);
+-              size *= conf->raid_disks;
+-              size <<= conf->chunk_shift;
+-              sector_div(size, conf->far_copies);
+-      } else
+-              size = conf->stride * conf->raid_disks;
+-      sector_div(size, conf->near_copies);
+-      mddev->array_size = size/2;
+-      mddev->resync_max_sectors = size;
++      mddev->array_size = size << (conf->chunk_shift-1);
++      mddev->resync_max_sectors = size << conf->chunk_shift;
+       mddev->queue->unplug_fn = raid10_unplug;
+       mddev->queue->issue_flush_fn = raid10_issue_flush;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:16 2007
+Message-Id: <20070307170616.365407516@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:09 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Marcel Siegert <mws@linuxtv.org>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 046/101] dvbdev: fix illegal re-usage of fileoperations struct
+Content-Disposition: inline; filename=dvbdev-fix-illegal-re-usage-of-fileoperations-struct.patch
+Content-Length: 1922
+Lines: 66
+
+From: Marcel Siegert <mws@linuxtv.org>
+
+Arjan van de Ven <arjan@infradead.org> reported an illegal re-usage of
+the fileoperations struct if more than one dvb device (e.g. frontend) is
+present.
+
+This patch fixes this issue.
+
+It allocates a new fileoperations struct each time a device is
+registered and copies the default template fileops.
+
+(backported from commit b61901024776b25ce7b8edc31bb1757c7382a88e)
+
+Signed-off-by: Marcel Siegert <mws@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/dvb/dvb-core/dvbdev.c |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/media/dvb/dvb-core/dvbdev.c
++++ linux-2.6.20.1/drivers/media/dvb/dvb-core/dvbdev.c
+@@ -200,6 +200,8 @@ int dvb_register_device(struct dvb_adapt
+                       const struct dvb_device *template, void *priv, int type)
+ {
+       struct dvb_device *dvbdev;
++      struct file_operations *dvbdevfops;
++
+       int id;
+       if (mutex_lock_interruptible(&dvbdev_register_lock))
+@@ -219,12 +221,22 @@ int dvb_register_device(struct dvb_adapt
+               return -ENOMEM;
+       }
++      dvbdevfops = kzalloc(sizeof(struct file_operations), GFP_KERNEL);
++
++      if (!dvbdevfops) {
++              kfree (dvbdev);
++              mutex_unlock(&dvbdev_register_lock);
++              return -ENOMEM;
++      }
++
+       memcpy(dvbdev, template, sizeof(struct dvb_device));
+       dvbdev->type = type;
+       dvbdev->id = id;
+       dvbdev->adapter = adap;
+       dvbdev->priv = priv;
++      dvbdev->fops = dvbdevfops;
++      memcpy(dvbdev->fops, template->fops, sizeof(struct file_operations));
+       dvbdev->fops->owner = adap->module;
+       list_add_tail (&dvbdev->list_head, &adap->device_list);
+@@ -252,6 +264,7 @@ void dvb_unregister_device(struct dvb_de
+                                       dvbdev->type, dvbdev->id)));
+       list_del (&dvbdev->list_head);
++      kfree (dvbdev->fops);
+       kfree (dvbdev);
+ }
+ EXPORT_SYMBOL(dvb_unregister_device);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:16 2007
+Message-Id: <20070307170616.547905240@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:10 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Mike Isely <isely@pobox.com>
+Subject: [patch 047/101] V4L: pvrusb2: Fix video corruption on stream start
+Content-Disposition: inline; filename=v4l-pvrusb2-fix-video-corruption-on-stream-start.patch
+Content-Length: 2643
+Lines: 79
+
+From: Mike Isely <isely@pobox.com>
+
+This introduces some extra cx23416 commands when streaming is
+started.  The addition of these commands fix random sporadic video
+corruption that can take place when the video stream is temporarily
+disrupted through loss of signal (e.g. changing the channel in the RF
+tuner).
+
+This fix is already in the upstream driver source and has proven
+itself there; this is a backport for the 2.6.20.y kernel series.
+
+(backported from commit 6fe7d2c4660174110c6872cacc4fc2acb6e00acf)
+
+Signed-off-by: Mike Isely <isely@pobox.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/pvrusb2/pvrusb2-encoder.c |   40 ++++++++++++++++++++++++++
+ 1 file changed, 40 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/media/video/pvrusb2/pvrusb2-encoder.c
++++ linux-2.6.20.1/drivers/media/video/pvrusb2/pvrusb2-encoder.c
+@@ -288,6 +288,44 @@ static int pvr2_encoder_vcmd(struct pvr2
+       return pvr2_encoder_cmd(hdw,cmd,args,0,data);
+ }
++
++/* This implements some extra setup for the encoder that seems to be
++   specific to the PVR USB2 hardware. */
++int pvr2_encoder_prep_config(struct pvr2_hdw *hdw)
++{
++      int ret = 0;
++      int encMisc3Arg = 0;
++
++      /* Mike Isely <isely@pobox.com> 22-Feb-2007 The windows driver
++         sends the following list of ENC_MISC commands (for both
++         24xxx and 29xxx devices).  Meanings are not entirely clear,
++         however without the ENC_MISC(3,encMisc3Arg) command then we risk
++         random perpetual video corruption whenever the video input
++         breaks up for a moment (like when switching channels). */
++
++
++      /* This ENC_MISC(3,encMisc3Arg) command is critical - without
++         it there will eventually be video corruption.  Also, the
++         29xxx case is strange - the Windows driver is passing 1
++         regardless of device type but if we have 1 for 29xxx device
++         the video turns sluggish.  */
++      switch (hdw->hdw_type) {
++      case PVR2_HDW_TYPE_24XXX: encMisc3Arg = 1; break;
++      case PVR2_HDW_TYPE_29XXX: encMisc3Arg = 0; break;
++      default: break;
++      }
++      ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 3,
++                               encMisc3Arg,0,0);
++
++      ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 8,0,0,0);
++
++      ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 0,3,0,0);
++      ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4,15,0,0,0);
++
++      return ret;
++}
++
++
+ int pvr2_encoder_configure(struct pvr2_hdw *hdw)
+ {
+       int ret;
+@@ -302,6 +340,8 @@ int pvr2_encoder_configure(struct pvr2_h
+       ret = 0;
++      ret |= pvr2_encoder_prep_config(hdw);
++
+       if (!ret) ret = pvr2_encoder_vcmd(
+               hdw,CX2341X_ENC_SET_NUM_VSYNC_LINES, 2,
+               0xf0, 0xf0);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:16 2007
+Message-Id: <20070307170616.625139336@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:11 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Mike Isely <isely@pobox.com>
+Subject: [patch 048/101] V4L: pvrusb2: Handle larger cx2341x firmware images
+Content-Disposition: inline; filename=v4l-pvrusb2-handle-larger-cx2341x-firmware-images.patch
+Content-Length: 2856
+Lines: 82
+
+From: Mike Isely <isely@pobox.com>
+
+Rework the cx23416 firmware loader so that it longer requires the
+firmware size to be a multiple of 8KB.  Until recently all cx2341x
+firmware images were exactly 256KB, but newer firmware is larger than
+that and also appears to have arbitrary size.  We still must check
+against a multiple of 4 bytes (because the cx23416 itself uses a 32
+bit word size).
+
+This fix is already in the upstream driver source and has proven
+itself there; this is a backport for the 2.6.20.y kernel series.
+
+(backported from commit 90060d32ca0a941b158994f78e60d0381871c84b)
+
+Signed-off-by: Mike Isely <isely@pobox.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/pvrusb2/pvrusb2-hdw.c |   31 ++++++++++++++++--------------
+ 1 file changed, 17 insertions(+), 14 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/media/video/pvrusb2/pvrusb2-hdw.c
++++ linux-2.6.20.1/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+@@ -1041,7 +1041,7 @@ int pvr2_upload_firmware2(struct pvr2_hd
+ {
+       const struct firmware *fw_entry = NULL;
+       void  *fw_ptr;
+-      unsigned int pipe, fw_len, fw_done;
++      unsigned int pipe, fw_len, fw_done, bcnt, icnt;
+       int actual_length;
+       int ret = 0;
+       int fwidx;
+@@ -1093,11 +1093,11 @@ int pvr2_upload_firmware2(struct pvr2_hd
+       fw_len = fw_entry->size;
+-      if (fw_len % FIRMWARE_CHUNK_SIZE) {
++      if (fw_len % sizeof(u32)) {
+               pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+                          "size of %s firmware"
+-                         " must be a multiple of 8192B",
+-                         fw_files[fwidx]);
++                         " must be a multiple of %zu bytes",
++                         fw_files[fwidx],sizeof(u32));
+               release_firmware(fw_entry);
+               return -1;
+       }
+@@ -1112,18 +1112,21 @@ int pvr2_upload_firmware2(struct pvr2_hd
+       pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
+-      for (fw_done = 0 ; (fw_done < fw_len) && !ret ;
+-           fw_done += FIRMWARE_CHUNK_SIZE ) {
+-              int i;
+-              memcpy(fw_ptr, fw_entry->data + fw_done, FIRMWARE_CHUNK_SIZE);
+-              /* Usbsnoop log  shows that we must swap bytes... */
+-              for (i = 0; i < FIRMWARE_CHUNK_SIZE/4 ; i++)
+-                      ((u32 *)fw_ptr)[i] = ___swab32(((u32 *)fw_ptr)[i]);
++      fw_done = 0;
++      for (fw_done = 0; fw_done < fw_len;) {
++              bcnt = fw_len - fw_done;
++              if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
++              memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
++              /* Usbsnoop log shows that we must swap bytes... */
++              for (icnt = 0; icnt < bcnt/4 ; icnt++)
++                      ((u32 *)fw_ptr)[icnt] =
++                              ___swab32(((u32 *)fw_ptr)[icnt]);
+-              ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,
+-                                  FIRMWARE_CHUNK_SIZE,
++              ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
+                                   &actual_length, HZ);
+-              ret |= (actual_length != FIRMWARE_CHUNK_SIZE);
++              ret |= (actual_length != bcnt);
++              if (ret) break;
++              fw_done += bcnt;
+       }
+       trace_firmware("upload of %s : %i / %i ",
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:16 2007
+Message-Id: <20070307170616.758873614@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:12 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Jin-Bong lee <jinbong.lee@samsung.com>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 049/101] DVB: cxusb: fix firmware patch for big endian systems
+Content-Disposition: inline; filename=dvb-cxusb-fix-firmware-patch-for-big-endian-systems.patch
+Content-Length: 1102
+Lines: 33
+
+
+From: Jin-Bong lee <jinbong.lee@samsung.com>
+
+Without this patch, the device will not be detected after firmware download
+on big endian systems.
+
+(cherry picked from commit 1d1370a48ca285ebe197ecd3197a8d5f161bc291)
+
+Signed-off-by: Jin-Bong lee <jinbong.lee@samsung.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/dvb/dvb-usb/cxusb.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/media/dvb/dvb-usb/cxusb.c
++++ linux-2.6.20.1/drivers/media/dvb/dvb-usb/cxusb.c
+@@ -469,9 +469,9 @@ static int bluebird_patch_dvico_firmware
+           fw->data[BLUEBIRD_01_ID_OFFSET + 1] == USB_VID_DVICO >> 8) {
+               fw->data[BLUEBIRD_01_ID_OFFSET + 2] =
+-                      udev->descriptor.idProduct + 1;
++                      le16_to_cpu(udev->descriptor.idProduct) + 1;
+               fw->data[BLUEBIRD_01_ID_OFFSET + 3] =
+-                      udev->descriptor.idProduct >> 8;
++                      le16_to_cpu(udev->descriptor.idProduct) >> 8;
+               return usb_cypress_load_firmware(udev, fw, CYPRESS_FX2);
+       }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:17 2007
+Message-Id: <20070307170616.890408171@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:13 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 050/101] DVB: digitv: open nxt6000 i2c_gate for TDED4 tuner handling
+Content-Disposition: inline; filename=dvb-digitv-open-nxt6000-i2c_gate-for-tded4-tuner-handling.patch
+Content-Length: 1054
+Lines: 30
+
+From: Michael Krufky <mkrufky@linuxtv.org>
+
+dvb-pll normally opens the i2c gate before attempting to communicate with
+the pll, but the code for this device is not using dvb-pll.  This should
+be cleaned up in the future, but for now, just open the i2c gate at the
+appropriate place in order to fix this driver bug.
+
+(cherry picked from commit 2fe22dcdc79b8dd34e61a3f1231caffd6180a626)
+
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/dvb/dvb-usb/digitv.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/media/dvb/dvb-usb/digitv.c
++++ linux-2.6.20.1/drivers/media/dvb/dvb-usb/digitv.c
+@@ -119,6 +119,8 @@ static int digitv_nxt6000_tuner_set_para
+       struct dvb_usb_adapter *adap = fe->dvb->priv;
+       u8 b[5];
+       dvb_usb_tuner_calc_regs(fe,fep,b, 5);
++      if (fe->ops.i2c_gate_ctrl)
++              fe->ops.i2c_gate_ctrl(fe, 1);
+       return digitv_ctrl_msg(adap->dev, USB_WRITE_TUNER, 0, &b[1], 4, NULL, 0);
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:17 2007
+Message-Id: <20070307170617.018552355@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:14 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Hans Verkuil <hverkuil@xs4all.nl>,
+ Mike Isely <isely@pobox.com>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 051/101] V4L: fix cx25840 firmware loading
+Content-Disposition: inline; filename=v4l-fix-cx25840-firmware-loading.patch
+Content-Length: 1589
+Lines: 54
+
+
+From: Hans Verkuil <hverkuil@xs4all.nl>
+Date: Thu, 15 Feb 2007 03:40:34 -0300
+Subject: [patch 051/101] [PATCH] V4L: fix cx25840 firmware loading
+
+Due to changes in the i2c handling in 2.6.20 this cx25840 bug surfaced,
+causing the firmware load to fail for the ivtv driver. The correct
+sequence is to first attach the i2c client, then use the client's
+device to load the firmware.
+
+(cherry picked from commit d55c7aec666658495e5b57a6b194c8c2a1ac255f)
+
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Acked-by: Mike Isely <isely@pobox.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/cx25840/cx25840-core.c     |    4 ++--
+ drivers/media/video/cx25840/cx25840-firmware.c |    2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/media/video/cx25840/cx25840-core.c
++++ linux-2.6.20.1/drivers/media/video/cx25840/cx25840-core.c
+@@ -907,13 +907,13 @@ static int cx25840_detect_client(struct 
+       state->vbi_line_offset = 8;
+       state->id = id;
++      i2c_attach_client(client);
++
+       if (state->is_cx25836)
+               cx25836_initialize(client);
+       else
+               cx25840_initialize(client, 1);
+-      i2c_attach_client(client);
+-
+       return 0;
+ }
+--- linux-2.6.20.1.orig/drivers/media/video/cx25840/cx25840-firmware.c
++++ linux-2.6.20.1/drivers/media/video/cx25840/cx25840-firmware.c
+@@ -37,7 +37,7 @@
+  */
+ #define FWSEND 48
+-#define FWDEV(x) &((x)->adapter->dev)
++#define FWDEV(x) &((x)->dev)
+ static char *firmware = FWFILE;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:17 2007
+Message-Id: <20070307170617.148880056@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:15 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 052/101] V4L: cx88-blackbird: allow usage of 376836 and 262144 sized firmware images
+Content-Disposition: inline; filename=v4l-cx88-blackbird-allow-usage-of-376836-and-262144-sized-firmware-images.patch
+Content-Length: 2529
+Lines: 71
+
+
+From: Michael Krufky <mkrufky@linuxtv.org>
+
+This updates the cx88-blackbird driver to be able to use the new cx23416
+firmware image released by Hauppauge Computer Works, while retaining
+compatibility with the older firmware images.
+cx2341x firmware can be downloaded at: http://dl.ivtvdriver.org/ivtv/firmware/
+
+(cherry picked from commit af70dbd3346999570db73b3bc3d4f7b7c004f2ea)
+
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/cx88/cx88-blackbird.c |   14 +++++++++-----
+ drivers/media/video/cx88/cx88.h           |    1 +
+ 2 files changed, 10 insertions(+), 5 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/media/video/cx88/cx88-blackbird.c
++++ linux-2.6.20.1/drivers/media/video/cx88/cx88-blackbird.c
+@@ -53,7 +53,8 @@ MODULE_PARM_DESC(debug,"enable debug mes
+ /* ------------------------------------------------------------------ */
+-#define BLACKBIRD_FIRM_IMAGE_SIZE 256*1024
++#define OLD_BLACKBIRD_FIRM_IMAGE_SIZE 262144
++#define     BLACKBIRD_FIRM_IMAGE_SIZE 376836
+ /* defines below are from ivtv-driver.h */
+@@ -401,7 +402,7 @@ static int blackbird_find_mailbox(struct
+       u32 value;
+       int i;
+-      for (i = 0; i < BLACKBIRD_FIRM_IMAGE_SIZE; i++) {
++      for (i = 0; i < dev->fw_size; i++) {
+               memory_read(dev->core, i, &value);
+               if (value == signature[signaturecnt])
+                       signaturecnt++;
+@@ -449,12 +450,15 @@ static int blackbird_load_firmware(struc
+               return -1;
+       }
+-      if (firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) {
+-              dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d)\n",
+-                      firmware->size, BLACKBIRD_FIRM_IMAGE_SIZE);
++      if ((firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) &&
++          (firmware->size != OLD_BLACKBIRD_FIRM_IMAGE_SIZE)) {
++              dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d or %d)\n",
++                      firmware->size, BLACKBIRD_FIRM_IMAGE_SIZE,
++                      OLD_BLACKBIRD_FIRM_IMAGE_SIZE);
+               release_firmware(firmware);
+               return -1;
+       }
++      dev->fw_size = firmware->size;
+       if (0 != memcmp(firmware->data, magic, 8)) {
+               dprintk(0, "ERROR: Firmware magic mismatch, wrong file?\n");
+--- linux-2.6.20.1.orig/drivers/media/video/cx88/cx88.h
++++ linux-2.6.20.1/drivers/media/video/cx88/cx88.h
+@@ -459,6 +459,7 @@ struct cx8802_dev {
+       u32                        mailbox;
+       int                        width;
+       int                        height;
++      int                        fw_size;
+       /* for dvb only */
+       struct videobuf_dvb        dvb;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:17 2007
+Message-Id: <20070307170617.306770749@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:16 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Andrew Morton <akpm@linux-foundation.org>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ingo Molnar <mingo@elte.hu>,
+ john stultz <johnstul@us.ibm.com>,
+ Roman Zippel <zippel@linux-m68k.org>,
+ Mike Galbraith <efault@gmx.de>,
+ Ken Chen <kenneth.w.chen@intel.com>,
+ balducci@units.it,
+ Greg KH <greg@kroah.com>,
+ Thomas Gleixner <tglx@linutronix.de>
+Subject: [patch 053/101] Fix posix-cpu-timer breakage caused by stale p->last_ran value
+Content-Disposition: inline; filename=fix-posix-cpu-timer-breakage-caused-by-stale-p-last_ran-value.patch
+Content-Length: 1047
+Lines: 35
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+Problem description at:
+http://bugzilla.kernel.org/show_bug.cgi?id=8048
+
+Commit b18ec80396834497933d77b81ec0918519f4e2a7 
+    [PATCH] sched: improve migration accuracy
+optimized the scheduler time calculations, but broke posix-cpu-timers.
+
+The problem is that the p->last_ran value is not updated after a context
+switch. So a subsequent call to current_sched_time() calculates with a
+stale p->last_ran value, i.e. accounts the full time, which the task was
+scheduled away.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Acked-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sched.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/kernel/sched.c
++++ linux-2.6.20.1/kernel/sched.c
+@@ -3547,7 +3547,7 @@ switch_tasks:
+       sched_info_switch(prev, next);
+       if (likely(prev != next)) {
+-              next->timestamp = now;
++              next->timestamp = next->last_ran = now;
+               rq->nr_switches++;
+               rq->curr = next;
+               ++*switch_count;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:17 2007
+Message-Id: <20070307170617.410426352@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:17 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Stefan Seyfried <seife@suse.de>,
+ Pavel Machek <pavel@ucw.cz>,
+ "Rafael J. Wysocki" <rjw@sisk.pl>
+Subject: [patch 054/101] swsusp: Fix possible oops in userland interface
+Content-Disposition: inline; filename=swsusp-fix-possible-oops-in-userland-interface.patch
+Content-Length: 1684
+Lines: 68
+
+From: Stefan Seyfried <seife@suse.de>
+
+Fix the Oops occuring when SNAPSHOT_PMOPS or SNAPSHOT_S2RAM ioctl is called on
+a system without pm_ops defined (eg. a non-ACPI kernel on x86 PC).
+
+Signed-off-by: Stefan Seyfried <seife@suse.de>
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Acked-by: Pavel Machek <pavel@ucw.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ kernel/power/user.c |   19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+--- linux-2.6.20.1.orig/kernel/power/user.c
++++ linux-2.6.20.1/kernel/power/user.c
+@@ -292,7 +292,7 @@ static int snapshot_ioctl(struct inode *
+                       break;
+               }
+-              if (pm_ops->prepare) {
++              if (pm_ops && pm_ops->prepare) {
+                       error = pm_ops->prepare(PM_SUSPEND_MEM);
+                       if (error)
+                               goto OutS3;
+@@ -311,7 +311,7 @@ static int snapshot_ioctl(struct inode *
+                       device_resume();
+               }
+               resume_console();
+-              if (pm_ops->finish)
++              if (pm_ops && pm_ops->finish)
+                       pm_ops->finish(PM_SUSPEND_MEM);
+  OutS3:
+@@ -322,20 +322,25 @@ static int snapshot_ioctl(struct inode *
+               switch (arg) {
+               case PMOPS_PREPARE:
+-                      if (pm_ops->prepare) {
++                      if (pm_ops && pm_ops->prepare)
+                               error = pm_ops->prepare(PM_SUSPEND_DISK);
+-                      }
++                      else
++                              error = -ENOSYS;
+                       break;
+               case PMOPS_ENTER:
+                       kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK);
+-                      error = pm_ops->enter(PM_SUSPEND_DISK);
++                      if (pm_ops && pm_ops->enter)
++                              error = pm_ops->enter(PM_SUSPEND_DISK);
++                      else
++                              error = -ENOSYS;
+                       break;
+               case PMOPS_FINISH:
+-                      if (pm_ops && pm_ops->finish) {
++                      if (pm_ops && pm_ops->finish)
+                               pm_ops->finish(PM_SUSPEND_DISK);
+-                      }
++                      else
++                              error = -ENOSYS;
+                       break;
+               default:
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:17 2007
+Message-Id: <20070307170617.546647259@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:18 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Jeff Garzik <jeff@garzik.org>,
+  <linux-ide@vger.kernel.org>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Tejun Heo <htejun@gmail.com>
+Subject: [patch 055/101] sata_sil: ignore and clear spurious IRQs while executing commands by polling
+Content-Disposition: inline; filename=sata_sil-ignore-and-clear-spurious-irqs-while-executing-commands-by-polling.patch
+Content-Length: 1157
+Lines: 39
+
+
+sata_sil used to trigger HSM error if IRQ occurs during polling
+command.  This didn't matter because polling wasn't used in sata_sil.
+However, as of 2.6.20, all IDENTIFYs are performed by polling and
+device detection sometimes fails due to spurious IRQ.  This patch
+makes sata_sil ignore and clear spurious IRQ while executing commands
+by polling.
+
+This fixes bug#7996 and IMHO should also be included in -stable.
+
+Signed-off-by: Tejun Heo <htejun@gmail.com>
+Cc: Jeff Garzik <jeff@garzik.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/sata_sil.c |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/ata/sata_sil.c
++++ linux-2.6.20.1/drivers/ata/sata_sil.c
+@@ -383,9 +383,15 @@ static void sil_host_intr(struct ata_por
+               goto freeze;
+       }
+-      if (unlikely(!qc || qc->tf.ctl & ATA_NIEN))
++      if (unlikely(!qc))
+               goto freeze;
++      if (unlikely(qc->tf.flags & ATA_TFLAG_POLLING)) {
++              /* this sometimes happens, just clear IRQ */
++              ata_chk_status(ap);
++              return;
++      }
++
+       /* Check whether we are expecting interrupt in this state */
+       switch (ap->hsm_task_state) {
+       case HSM_ST_FIRST:
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:17 2007
+Message-Id: <20070307170617.670702935@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:19 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Greg KH <greg@kroah.com>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Chris Wright <chrisw@sous-sol.org>,
+ Tigran Aivazian <tigran@aivazian.fsnet.co.uk>,
+ Andreas Gruenbacher <agruen@suse.de>,
+ Hugh Dickins <hugh@veritas.com>
+Subject: [patch 056/101] fix umask when noACL kernel meets extN tuned for ACLs
+Content-Disposition: inline; filename=fix-umask-when-noacl-kernel-meets-extn-tuned-for-acls.patch
+Content-Length: 3339
+Lines: 84
+
+From: Hugh Dickins <hugh@veritas.com>
+
+Fix insecure default behaviour reported by Tigran Aivazian: if an ext2
+or ext3 or ext4 filesystem is tuned to mount with "acl", but mounted by
+a kernel built without ACL support, then umask was ignored when creating
+inodes - though root or user has umask 022, touch creates files as 0666,
+and mkdir creates directories as 0777.
+
+This appears to have worked right until 2.6.11, when a fix to the default
+mode on symlinks (always 0777) assumed VFS applies umask: which it does,
+unless the mount is marked for ACLs; but ext[234] set MS_POSIXACL in
+s_flags according to s_mount_opt set according to def_mount_opts.
+
+We could revert to the 2.6.10 ext[234]_init_acl (adding an S_ISLNK test);
+but other filesystems only set MS_POSIXACL when ACLs are configured.  We
+could fix this at another level; but it seems most robust to avoid setting
+the s_mount_opt flag in the first place (at the expense of more ifdefs).
+
+Likewise don't set the XATTR_USER flag when built without XATTR support.
+
+Signed-off-by: Hugh Dickins <hugh@veritas.com>
+Acked-by: Andreas Gruenbacher <agruen@suse.de>
+Cc: Tigran Aivazian <tigran@aivazian.fsnet.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ext2/super.c |    4 ++++
+ fs/ext3/super.c |    4 ++++
+ fs/ext4/super.c |    4 ++++
+ 3 files changed, 12 insertions(+)
+
+--- linux-2.6.20.1.orig/fs/ext2/super.c
++++ linux-2.6.20.1/fs/ext2/super.c
+@@ -708,10 +708,14 @@ static int ext2_fill_super(struct super_
+               set_opt(sbi->s_mount_opt, GRPID);
+       if (def_mount_opts & EXT2_DEFM_UID16)
+               set_opt(sbi->s_mount_opt, NO_UID32);
++#ifdef CONFIG_EXT2_FS_XATTR
+       if (def_mount_opts & EXT2_DEFM_XATTR_USER)
+               set_opt(sbi->s_mount_opt, XATTR_USER);
++#endif
++#ifdef CONFIG_EXT2_FS_POSIX_ACL
+       if (def_mount_opts & EXT2_DEFM_ACL)
+               set_opt(sbi->s_mount_opt, POSIX_ACL);
++#endif
+       
+       if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_PANIC)
+               set_opt(sbi->s_mount_opt, ERRORS_PANIC);
+--- linux-2.6.20.1.orig/fs/ext3/super.c
++++ linux-2.6.20.1/fs/ext3/super.c
+@@ -1459,10 +1459,14 @@ static int ext3_fill_super (struct super
+               set_opt(sbi->s_mount_opt, GRPID);
+       if (def_mount_opts & EXT3_DEFM_UID16)
+               set_opt(sbi->s_mount_opt, NO_UID32);
++#ifdef CONFIG_EXT3_FS_XATTR
+       if (def_mount_opts & EXT3_DEFM_XATTR_USER)
+               set_opt(sbi->s_mount_opt, XATTR_USER);
++#endif
++#ifdef CONFIG_EXT3_FS_POSIX_ACL
+       if (def_mount_opts & EXT3_DEFM_ACL)
+               set_opt(sbi->s_mount_opt, POSIX_ACL);
++#endif
+       if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_DATA)
+               sbi->s_mount_opt |= EXT3_MOUNT_JOURNAL_DATA;
+       else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_ORDERED)
+--- linux-2.6.20.1.orig/fs/ext4/super.c
++++ linux-2.6.20.1/fs/ext4/super.c
+@@ -1518,10 +1518,14 @@ static int ext4_fill_super (struct super
+               set_opt(sbi->s_mount_opt, GRPID);
+       if (def_mount_opts & EXT4_DEFM_UID16)
+               set_opt(sbi->s_mount_opt, NO_UID32);
++#ifdef CONFIG_EXT4DEV_FS_XATTR
+       if (def_mount_opts & EXT4_DEFM_XATTR_USER)
+               set_opt(sbi->s_mount_opt, XATTR_USER);
++#endif
++#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
+       if (def_mount_opts & EXT4_DEFM_ACL)
+               set_opt(sbi->s_mount_opt, POSIX_ACL);
++#endif
+       if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA)
+               sbi->s_mount_opt |= EXT4_MOUNT_JOURNAL_DATA;
+       else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:17 2007
+Message-Id: <20070307170617.796260198@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:20 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Blaisorblade <blaisorblade@yahoo.it>,
+ user-mode-linux-devel@lists.sourceforge.net,
+ Jeff Dike <jdike@addtoit.com>
+Subject: [patch 057/101] UML - Fix 2.6.20 hang
+Content-Disposition: inline; filename=uml-fix-2.6.20-hang.patch
+Content-Length: 3370
+Lines: 112
+
+From: Jeff Dike <jdike@addtoit.com>
+
+A previous cleanup misused need_poll, which had a fairly broken
+interface.  It implemented a growable array, changing the used
+elements count itself, but leaving it up to the caller to fill in the
+actual elements, including the entire array if the array had to be
+reallocated.  This worked because the previous users were switching
+between two such structures, and the elements were copied from the
+inactive array to the active array after making sure the active array
+had enough room.
+
+maybe_sigio_broken was made to use need_poll, but it was operating on
+a single array, so when the buffer was reallocated, the previous
+contents were lost.
+
+This patch makes need_poll implement more sane semantics.  It merely
+assures that the array is of the proper size and that the contents are
+preserved.  It is up to the caller to adjust the used elements count
+and to ensure that the proper elements are resent.
+
+This manifested itself as a hang in 2.6.20 as the uninitialized buffer
+convinced UML that one of its own file descriptors didn't support
+SIGIO and needed to be watched by poll in a separate thread.  The
+result was an interrupt flood as control traffic over this descriptor
+sparked interrupts, which resulted in more control traffic, ad nauseum.
+
+Signed-off-by: Jeff Dike <jdike@addtoit.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/um/os-Linux/sigio.c |   38 ++++++++++++++++++++------------------
+ 1 file changed, 20 insertions(+), 18 deletions(-)
+
+--- linux-2.6.20.1.orig/arch/um/os-Linux/sigio.c
++++ linux-2.6.20.1/arch/um/os-Linux/sigio.c
+@@ -97,20 +97,22 @@ static int write_sigio_thread(void *unus
+ static int need_poll(struct pollfds *polls, int n)
+ {
+-      if(n <= polls->size){
+-              polls->used = n;
++      struct pollfd *new;
++
++      if(n <= polls->size)
+               return 0;
+-      }
+-      kfree(polls->poll);
+-      polls->poll = um_kmalloc_atomic(n * sizeof(struct pollfd));
+-      if(polls->poll == NULL){
++
++      new = um_kmalloc_atomic(n * sizeof(struct pollfd));
++      if(new == NULL){
+               printk("need_poll : failed to allocate new pollfds\n");
+-              polls->size = 0;
+-              polls->used = 0;
+               return -ENOMEM;
+       }
++
++      memcpy(new, polls->poll, polls->used * sizeof(struct pollfd));
++      kfree(polls->poll);
++
++      polls->poll = new;
+       polls->size = n;
+-      polls->used = n;
+       return 0;
+ }
+@@ -171,15 +173,15 @@ int add_sigio_fd(int fd)
+                       goto out;
+       }
+-      n = current_poll.used + 1;
+-      err = need_poll(&next_poll, n);
++      n = current_poll.used;
++      err = need_poll(&next_poll, n + 1);
+       if(err)
+               goto out;
+-      for(i = 0; i < current_poll.used; i++)
+-              next_poll.poll[i] = current_poll.poll[i];
+-
+-      next_poll.poll[n - 1] = *p;
++      memcpy(next_poll.poll, current_poll.poll,
++             current_poll.used * sizeof(struct pollfd));
++      next_poll.poll[n] = *p;
++      next_poll.used = n + 1;
+       update_thread();
+  out:
+       sigio_unlock();
+@@ -214,6 +216,7 @@ int ignore_sigio_fd(int fd)
+               if(p->fd != fd)
+                       next_poll.poll[n++] = *p;
+       }
++      next_poll.used = current_poll.used - 1;
+       update_thread();
+  out:
+@@ -331,10 +334,9 @@ void maybe_sigio_broken(int fd, int read
+       sigio_lock();
+       err = need_poll(&all_sigio_fds, all_sigio_fds.used + 1);
+-      if(err){
+-              printk("maybe_sigio_broken - failed to add pollfd\n");
++      if(err)
+               goto out;
+-      }
++
+       all_sigio_fds.poll[all_sigio_fds.used++] =
+               ((struct pollfd) { .fd          = fd,
+                                  .events      = read ? POLLIN : POLLOUT,
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:18 2007
+Message-Id: <20070307170617.925538604@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:21 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Darren Salt <linux@youmustbejoking.demon.co.uk>,
+ Pierre Ossman <drzeus@drzeus.cx>
+Subject: [patch 058/101] mmc: Power quirk for ENE controllers
+Content-Disposition: inline; filename=mmc-power-quirk-for-ene-controllers.patch
+Content-Length: 2802
+Lines: 83
+
+From: Darren Salt <linux@youmustbejoking.demon.co.uk>
+
+mmc: Power quirk for ENE controllers
+
+Support for these devices was broken for 2.6.18-rc1 and later by commit
+146ad66eac836c0b976c98f428d73e1f6a75270d, which added voltage level support.
+
+This restores the previous behaviour for these devices by ensuring that when
+the voltage is changed, only one write to set the voltage is performed.
+
+It may be that both writes are needed if the voltage is being changed between
+two non-zero values or that it's safe to ensure that only one write is done
+if the hardware only supports one voltage; I don't know whether either is the
+case nor can I test since I have only the one SD reader (1524:0550), and it
+supports just the one voltage.
+
+Signed-off-by: Darren Salt <linux@youmustbejoking.demon.co.uk>
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/mmc/sdhci.c     |   22 +++++++++++++++++++---
+ include/linux/pci_ids.h |    1 +
+ 2 files changed, 20 insertions(+), 3 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/mmc/sdhci.c
++++ linux-2.6.20.1/drivers/mmc/sdhci.c
+@@ -37,6 +37,7 @@ static unsigned int debug_quirks = 0;
+ #define SDHCI_QUIRK_FORCE_DMA                         (1<<1)
+ /* Controller doesn't like some resets when there is no card inserted. */
+ #define SDHCI_QUIRK_NO_CARD_NO_RESET                  (1<<2)
++#define SDHCI_QUIRK_SINGLE_POWER_WRITE                        (1<<3)
+ static const struct pci_device_id pci_ids[] __devinitdata = {
+       {
+@@ -65,6 +66,14 @@ static const struct pci_device_id pci_id
+               .driver_data    = SDHCI_QUIRK_FORCE_DMA,
+       },
++      {
++              .vendor         = PCI_VENDOR_ID_ENE,
++              .device         = PCI_DEVICE_ID_ENE_CB712_SD,
++              .subvendor      = PCI_ANY_ID,
++              .subdevice      = PCI_ANY_ID,
++              .driver_data    = SDHCI_QUIRK_SINGLE_POWER_WRITE,
++      },
++
+       {       /* Generic SD host controller */
+               PCI_DEVICE_CLASS((PCI_CLASS_SYSTEM_SDHCI << 8), 0xFFFF00)
+       },
+@@ -674,10 +683,17 @@ static void sdhci_set_power(struct sdhci
+       if (host->power == power)
+               return;
+-      writeb(0, host->ioaddr + SDHCI_POWER_CONTROL);
+-
+-      if (power == (unsigned short)-1)
++      if (power == (unsigned short)-1) {
++              writeb(0, host->ioaddr + SDHCI_POWER_CONTROL);
+               goto out;
++      }
++
++      /*
++       * Spec says that we should clear the power reg before setting
++       * a new value. Some controllers don't seem to like this though.
++       */
++      if (!(host->chip->quirks & SDHCI_QUIRK_SINGLE_POWER_WRITE))
++              writeb(0, host->ioaddr + SDHCI_POWER_CONTROL);
+       pwr = SDHCI_POWER_ON;
+--- linux-2.6.20.1.orig/include/linux/pci_ids.h
++++ linux-2.6.20.1/include/linux/pci_ids.h
+@@ -1971,6 +1971,7 @@
+ #define PCI_DEVICE_ID_TOPIC_TP560     0x0000
+ #define PCI_VENDOR_ID_ENE             0x1524
++#define PCI_DEVICE_ID_ENE_CB712_SD    0x0550
+ #define PCI_DEVICE_ID_ENE_1211                0x1211
+ #define PCI_DEVICE_ID_ENE_1225                0x1225
+ #define PCI_DEVICE_ID_ENE_1410                0x1410
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:18 2007
+Message-Id: <20070307170618.054231181@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:22 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux-wireless@vger.kernel.org,
+ Bcm43xx-dev@lists.berlios.de,
+ Michael Buesch <mb@bu3sch.de>,
+ Pavel Roskin <proski@gnu.org>,
+ Larry Finger <Larry.Finger@lwfinger.net>
+Subject: [patch 059/101] bcm43xx: Fix assertion failures in interrupt handler
+Content-Disposition: inline; filename=bcm43xx-fix-assertion-failures-in-interrupt-handler.patch
+Content-Length: 1282
+Lines: 38
+
+
+From: Pavel Roskin <proski@gnu.org>
+
+In the bcm43xx interrupt handler, sanity checks are wrongly done before the
+verification that the interrupt is for the bcm43xx.
+
+Signed-off-by: Pavel Roskin <proski@gnu.org>
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/bcm43xx/bcm43xx_main.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c
++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+@@ -1864,9 +1864,6 @@ static irqreturn_t bcm43xx_interrupt_han
+       spin_lock(&bcm->irq_lock);
+-      assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
+-      assert(bcm->current_core->id == BCM43xx_COREID_80211);
+-
+       reason = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON);
+       if (reason == 0xffffffff) {
+               /* irq not for us (shared irq) */
+@@ -1877,6 +1874,9 @@ static irqreturn_t bcm43xx_interrupt_han
+       if (!reason)
+               goto out;
++      assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
++      assert(bcm->current_core->id == BCM43xx_COREID_80211);
++
+       bcm->dma_reason[0] = bcm43xx_read32(bcm, BCM43xx_MMIO_DMA0_REASON)
+                            & 0x0001DC00;
+       bcm->dma_reason[1] = bcm43xx_read32(bcm, BCM43xx_MMIO_DMA1_REASON)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:18 2007
+Message-Id: <20070307170618.186348774@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:23 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+  <jgarzik@pobox.com>,
+ Tejun Heo <htejun@gmail.com>
+Subject: [patch 060/101] libata: add missing PM callbacks
+Content-Disposition: inline; filename=libata-add-missing-pm-callbacks.patch
+Content-Length: 1254
+Lines: 41
+
+From: Tejun Heo <htejun@gmail.com>
+
+Some LLDs were missing scsi device PM callbacks while having host/port
+suspend support.  Add missing ones.
+
+Signed-off-by: Tejun Heo <htejun@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/pata_jmicron.c |    4 ++++
+ drivers/ata/pata_sil680.c  |    4 ++++
+ 2 files changed, 8 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/ata/pata_jmicron.c
++++ linux-2.6.20.1/drivers/ata/pata_jmicron.c
+@@ -137,6 +137,10 @@ static struct scsi_host_template jmicron
+       .slave_destroy          = ata_scsi_slave_destroy,
+       /* Use standard CHS mapping rules */
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
++      .suspend                = ata_scsi_device_suspend,
++      .resume                 = ata_scsi_device_resume,
++#endif
+ };
+ static const struct ata_port_operations jmicron_ops = {
+--- linux-2.6.20.1.orig/drivers/ata/pata_sil680.c
++++ linux-2.6.20.1/drivers/ata/pata_sil680.c
+@@ -226,6 +226,10 @@ static struct scsi_host_template sil680_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
++      .suspend                = ata_scsi_device_suspend,
++      .resume                 = ata_scsi_device_resume,
++#endif
+ };
+ static struct ata_port_operations sil680_port_ops = {
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:18 2007
+Message-Id: <20070307170618.321127597@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:24 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+  <jgarzik@pobox.com>,
+ Tejun Heo <htejun@gmail.com>
+Subject: [patch 061/101] libata: add missing CONFIG_PM in LLDs
+Content-Disposition: inline; filename=libata-add-missing-config_pm-in-llds.patch
+Content-Length: 33126
+Lines: 1088
+
+From: Tejun Heo <htejun@gmail.com>
+
+Add missing #ifdef CONFIG_PM conditionals around all PM related parts
+in libata LLDs.
+
+Signed-off-by: Tejun Heo <htejun@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/ahci.c              |   14 ++++++++++++++
+ drivers/ata/ata_generic.c       |    4 ++++
+ drivers/ata/ata_piix.c          |    4 ++++
+ drivers/ata/pata_ali.c          |    6 ++++++
+ drivers/ata/pata_amd.c          |    6 ++++++
+ drivers/ata/pata_atiixp.c       |    4 ++++
+ drivers/ata/pata_cmd64x.c       |    6 ++++++
+ drivers/ata/pata_cs5520.c       |    7 +++++++
+ drivers/ata/pata_cs5530.c       |    6 ++++++
+ drivers/ata/pata_cs5535.c       |    4 ++++
+ drivers/ata/pata_cypress.c      |    4 ++++
+ drivers/ata/pata_efar.c         |    4 ++++
+ drivers/ata/pata_hpt366.c       |    7 ++++++-
+ drivers/ata/pata_hpt3x3.c       |    6 ++++++
+ drivers/ata/pata_it821x.c       |    6 ++++++
+ drivers/ata/pata_jmicron.c      |    4 ++++
+ drivers/ata/pata_marvell.c      |    4 ++++
+ drivers/ata/pata_mpiix.c        |    4 ++++
+ drivers/ata/pata_netcell.c      |    4 ++++
+ drivers/ata/pata_ns87410.c      |    4 ++++
+ drivers/ata/pata_oldpiix.c      |    4 ++++
+ drivers/ata/pata_opti.c         |    4 ++++
+ drivers/ata/pata_optidma.c      |    4 ++++
+ drivers/ata/pata_pdc202xx_old.c |    4 ++++
+ drivers/ata/pata_radisys.c      |    4 ++++
+ drivers/ata/pata_rz1000.c       |    6 ++++++
+ drivers/ata/pata_sc1200.c       |    4 ++++
+ drivers/ata/pata_serverworks.c  |    6 ++++++
+ drivers/ata/pata_sil680.c       |    4 ++++
+ drivers/ata/pata_sis.c          |    4 ++++
+ drivers/ata/pata_triflex.c      |    4 ++++
+ drivers/ata/pata_via.c          |    6 ++++++
+ drivers/ata/sata_sil.c          |    2 ++
+ drivers/ata/sata_sil24.c        |    2 ++
+ 34 files changed, 165 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/ata/ahci.c
++++ linux-2.6.20.1/drivers/ata/ahci.c
+@@ -225,10 +225,12 @@ static void ahci_thaw(struct ata_port *a
+ static void ahci_error_handler(struct ata_port *ap);
+ static void ahci_vt8251_error_handler(struct ata_port *ap);
+ static void ahci_post_internal_cmd(struct ata_queued_cmd *qc);
++#ifdef CONFIG_PM
+ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg);
+ static int ahci_port_resume(struct ata_port *ap);
+ static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
+ static int ahci_pci_device_resume(struct pci_dev *pdev);
++#endif
+ static void ahci_remove_one (struct pci_dev *pdev);
+ static struct scsi_host_template ahci_sht = {
+@@ -248,8 +250,10 @@ static struct scsi_host_template ahci_sh
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .suspend                = ata_scsi_device_suspend,
+       .resume                 = ata_scsi_device_resume,
++#endif
+ };
+ static const struct ata_port_operations ahci_ops = {
+@@ -276,8 +280,10 @@ static const struct ata_port_operations 
+       .error_handler          = ahci_error_handler,
+       .post_internal_cmd      = ahci_post_internal_cmd,
++#ifdef CONFIG_PM
+       .port_suspend           = ahci_port_suspend,
+       .port_resume            = ahci_port_resume,
++#endif
+       .port_start             = ahci_port_start,
+       .port_stop              = ahci_port_stop,
+@@ -307,8 +313,10 @@ static const struct ata_port_operations 
+       .error_handler          = ahci_vt8251_error_handler,
+       .post_internal_cmd      = ahci_post_internal_cmd,
++#ifdef CONFIG_PM
+       .port_suspend           = ahci_port_suspend,
+       .port_resume            = ahci_port_resume,
++#endif
+       .port_start             = ahci_port_start,
+       .port_stop              = ahci_port_stop,
+@@ -441,8 +449,10 @@ static struct pci_driver ahci_pci_driver
+       .name                   = DRV_NAME,
+       .id_table               = ahci_pci_tbl,
+       .probe                  = ahci_init_one,
++#ifdef CONFIG_PM
+       .suspend                = ahci_pci_device_suspend,
+       .resume                 = ahci_pci_device_resume,
++#endif
+       .remove                 = ahci_remove_one,
+ };
+@@ -587,6 +597,7 @@ static void ahci_power_up(void __iomem *
+       writel(cmd | PORT_CMD_ICC_ACTIVE, port_mmio + PORT_CMD);
+ }
++#ifdef CONFIG_PM
+ static void ahci_power_down(void __iomem *port_mmio, u32 cap)
+ {
+       u32 cmd, scontrol;
+@@ -604,6 +615,7 @@ static void ahci_power_down(void __iomem
+       cmd &= ~PORT_CMD_SPIN_UP;
+       writel(cmd, port_mmio + PORT_CMD);
+ }
++#endif
+ static void ahci_init_port(void __iomem *port_mmio, u32 cap,
+                          dma_addr_t cmd_slot_dma, dma_addr_t rx_fis_dma)
+@@ -1336,6 +1348,7 @@ static void ahci_post_internal_cmd(struc
+       }
+ }
++#ifdef CONFIG_PM
+ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
+ {
+       struct ahci_host_priv *hpriv = ap->host->private_data;
+@@ -1412,6 +1425,7 @@ static int ahci_pci_device_resume(struct
+       return 0;
+ }
++#endif
+ static int ahci_port_start(struct ata_port *ap)
+ {
+--- linux-2.6.20.1.orig/drivers/ata/ata_generic.c
++++ linux-2.6.20.1/drivers/ata/ata_generic.c
+@@ -119,8 +119,10 @@ static struct scsi_host_template generic
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations generic_port_ops = {
+@@ -230,8 +232,10 @@ static struct pci_driver ata_generic_pci
+       .id_table       = ata_generic,
+       .probe          = ata_generic_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init ata_generic_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/ata_piix.c
++++ linux-2.6.20.1/drivers/ata/ata_piix.c
+@@ -255,8 +255,10 @@ static struct pci_driver piix_pci_driver
+       .id_table               = piix_pci_tbl,
+       .probe                  = piix_init_one,
+       .remove                 = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend                = ata_pci_device_suspend,
+       .resume                 = ata_pci_device_resume,
++#endif
+ };
+ static struct scsi_host_template piix_sht = {
+@@ -275,8 +277,10 @@ static struct scsi_host_template piix_sh
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static const struct ata_port_operations piix_pata_ops = {
+--- linux-2.6.20.1.orig/drivers/ata/pata_ali.c
++++ linux-2.6.20.1/drivers/ata/pata_ali.c
+@@ -345,8 +345,10 @@ static struct scsi_host_template ali_sht
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ /*
+@@ -667,11 +669,13 @@ static int ali_init_one(struct pci_dev *
+       return ata_pci_init_one(pdev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int ali_reinit_one(struct pci_dev *pdev)
+ {
+       ali_init_chipset(pdev);
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+ static const struct pci_device_id ali[] = {
+       { PCI_VDEVICE(AL, PCI_DEVICE_ID_AL_M5228), },
+@@ -685,8 +689,10 @@ static struct pci_driver ali_pci_driver 
+       .id_table       = ali,
+       .probe          = ali_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ali_reinit_one,
++#endif
+ };
+ static int __init ali_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_amd.c
++++ linux-2.6.20.1/drivers/ata/pata_amd.c
+@@ -334,8 +334,10 @@ static struct scsi_host_template amd_sht
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations amd33_port_ops = {
+@@ -663,6 +665,7 @@ static int amd_init_one(struct pci_dev *
+       return ata_pci_init_one(pdev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int amd_reinit_one(struct pci_dev *pdev)
+ {
+       if (pdev->vendor == PCI_VENDOR_ID_AMD) {
+@@ -679,6 +682,7 @@ static int amd_reinit_one(struct pci_dev
+       }
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+ static const struct pci_device_id amd[] = {
+       { PCI_VDEVICE(AMD,      PCI_DEVICE_ID_AMD_COBRA_7401),          0 },
+@@ -708,8 +712,10 @@ static struct pci_driver amd_pci_driver 
+       .id_table       = amd,
+       .probe          = amd_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = amd_reinit_one,
++#endif
+ };
+ static int __init amd_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_atiixp.c
++++ linux-2.6.20.1/drivers/ata/pata_atiixp.c
+@@ -224,8 +224,10 @@ static struct scsi_host_template atiixp_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations atiixp_port_ops = {
+@@ -290,8 +292,10 @@ static struct pci_driver atiixp_pci_driv
+       .id_table       = atiixp,
+       .probe          = atiixp_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .resume         = ata_pci_device_resume,
+       .suspend        = ata_pci_device_suspend,
++#endif
+ };
+ static int __init atiixp_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_cmd64x.c
++++ linux-2.6.20.1/drivers/ata/pata_cmd64x.c
+@@ -285,8 +285,10 @@ static struct scsi_host_template cmd64x_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations cmd64x_port_ops = {
+@@ -479,6 +481,7 @@ static int cmd64x_init_one(struct pci_de
+       return ata_pci_init_one(pdev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int cmd64x_reinit_one(struct pci_dev *pdev)
+ {
+       u8 mrdmode;
+@@ -492,6 +495,7 @@ static int cmd64x_reinit_one(struct pci_
+ #endif
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+ static const struct pci_device_id cmd64x[] = {
+       { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_643), 0 },
+@@ -507,8 +511,10 @@ static struct pci_driver cmd64x_pci_driv
+       .id_table       = cmd64x,
+       .probe          = cmd64x_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = cmd64x_reinit_one,
++#endif
+ };
+ static int __init cmd64x_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_cs5520.c
++++ linux-2.6.20.1/drivers/ata/pata_cs5520.c
+@@ -167,8 +167,10 @@ static struct scsi_host_template cs5520_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations cs5520_port_ops = {
+@@ -298,6 +300,7 @@ static void __devexit cs5520_remove_one(
+       dev_set_drvdata(dev, NULL);
+ }
++#ifdef CONFIG_PM
+ /**
+  *    cs5520_reinit_one       -       device resume
+  *    @pdev: PCI device
+@@ -314,6 +317,8 @@ static int cs5520_reinit_one(struct pci_
+               pci_write_config_byte(pdev, 0x60, pcicfg | 0x40);
+       return ata_pci_device_resume(pdev);
+ }
++#endif
++
+ /* For now keep DMA off. We can set it for all but A rev CS5510 once the
+    core ATA code can handle it */
+@@ -329,8 +334,10 @@ static struct pci_driver cs5520_pci_driv
+       .id_table       = pata_cs5520,
+       .probe          = cs5520_init_one,
+       .remove         = cs5520_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = cs5520_reinit_one,
++#endif
+ };
+ static int __init cs5520_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_cs5530.c
++++ linux-2.6.20.1/drivers/ata/pata_cs5530.c
+@@ -181,8 +181,10 @@ static struct scsi_host_template cs5530_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations cs5530_port_ops = {
+@@ -369,6 +371,7 @@ static int cs5530_init_one(struct pci_de
+       return ata_pci_init_one(pdev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int cs5530_reinit_one(struct pci_dev *pdev)
+ {
+       /* If we fail on resume we are doomed */
+@@ -376,6 +379,7 @@ static int cs5530_reinit_one(struct pci_
+               BUG();
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+       
+ static const struct pci_device_id cs5530[] = {
+       { PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE), },
+@@ -388,8 +392,10 @@ static struct pci_driver cs5530_pci_driv
+       .id_table       = cs5530,
+       .probe          = cs5530_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = cs5530_reinit_one,
++#endif
+ };
+ static int __init cs5530_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_cs5535.c
++++ linux-2.6.20.1/drivers/ata/pata_cs5535.c
+@@ -185,8 +185,10 @@ static struct scsi_host_template cs5535_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations cs5535_port_ops = {
+@@ -270,8 +272,10 @@ static struct pci_driver cs5535_pci_driv
+       .id_table       = cs5535,
+       .probe          = cs5535_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init cs5535_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_cypress.c
++++ linux-2.6.20.1/drivers/ata/pata_cypress.c
+@@ -136,8 +136,10 @@ static struct scsi_host_template cy82c69
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations cy82c693_port_ops = {
+@@ -206,8 +208,10 @@ static struct pci_driver cy82c693_pci_dr
+       .id_table       = cy82c693,
+       .probe          = cy82c693_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init cy82c693_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_efar.c
++++ linux-2.6.20.1/drivers/ata/pata_efar.c
+@@ -234,8 +234,10 @@ static struct scsi_host_template efar_sh
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static const struct ata_port_operations efar_ops = {
+@@ -317,8 +319,10 @@ static struct pci_driver efar_pci_driver
+       .id_table               = efar_pci_tbl,
+       .probe                  = efar_init_one,
+       .remove                 = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend                = ata_pci_device_suspend,
+       .resume                 = ata_pci_device_resume,
++#endif
+ };
+ static int __init efar_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_hpt366.c
++++ linux-2.6.20.1/drivers/ata/pata_hpt366.c
+@@ -338,8 +338,10 @@ static struct scsi_host_template hpt36x_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ /*
+@@ -467,12 +469,13 @@ static int hpt36x_init_one(struct pci_de
+       return ata_pci_init_one(dev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int hpt36x_reinit_one(struct pci_dev *dev)
+ {
+       hpt36x_init_chipset(dev);
+       return ata_pci_device_resume(dev);
+ }
+-
++#endif
+ static const struct pci_device_id hpt36x[] = {
+       { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), },
+@@ -484,8 +487,10 @@ static struct pci_driver hpt36x_pci_driv
+       .id_table       = hpt36x,
+       .probe          = hpt36x_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = hpt36x_reinit_one,
++#endif
+ };
+ static int __init hpt36x_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_hpt3x3.c
++++ linux-2.6.20.1/drivers/ata/pata_hpt3x3.c
+@@ -119,8 +119,10 @@ static struct scsi_host_template hpt3x3_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations hpt3x3_port_ops = {
+@@ -206,11 +208,13 @@ static int hpt3x3_init_one(struct pci_de
+       return ata_pci_init_one(dev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int hpt3x3_reinit_one(struct pci_dev *dev)
+ {
+       hpt3x3_init_chipset(dev);
+       return ata_pci_device_resume(dev);
+ }
++#endif
+ static const struct pci_device_id hpt3x3[] = {
+       { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT343), },
+@@ -223,8 +227,10 @@ static struct pci_driver hpt3x3_pci_driv
+       .id_table       = hpt3x3,
+       .probe          = hpt3x3_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = hpt3x3_reinit_one,
++#endif
+ };
+ static int __init hpt3x3_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_it821x.c
++++ linux-2.6.20.1/drivers/ata/pata_it821x.c
+@@ -676,8 +676,10 @@ static struct scsi_host_template it821x_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations it821x_smart_port_ops = {
+@@ -810,6 +812,7 @@ static int it821x_init_one(struct pci_de
+       return ata_pci_init_one(pdev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int it821x_reinit_one(struct pci_dev *pdev)
+ {
+       /* Resume - turn raid back off if need be */
+@@ -817,6 +820,7 @@ static int it821x_reinit_one(struct pci_
+               it821x_disable_raid(pdev);
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+ static const struct pci_device_id it821x[] = {
+       { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), },
+@@ -830,8 +834,10 @@ static struct pci_driver it821x_pci_driv
+       .id_table       = it821x,
+       .probe          = it821x_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = it821x_reinit_one,
++#endif
+ };
+ static int __init it821x_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_jmicron.c
++++ linux-2.6.20.1/drivers/ata/pata_jmicron.c
+@@ -222,6 +222,7 @@ static int jmicron_init_one (struct pci_
+       return ata_pci_init_one(pdev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int jmicron_reinit_one(struct pci_dev *pdev)
+ {
+       u32 reg;
+@@ -242,6 +243,7 @@ static int jmicron_reinit_one(struct pci
+       }
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+ static const struct pci_device_id jmicron_pci_tbl[] = {
+       { PCI_VDEVICE(JMICRON, PCI_DEVICE_ID_JMICRON_JMB361), 361},
+@@ -258,8 +260,10 @@ static struct pci_driver jmicron_pci_dri
+       .id_table               = jmicron_pci_tbl,
+       .probe                  = jmicron_init_one,
+       .remove                 = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend                = ata_pci_device_suspend,
+       .resume                 = jmicron_reinit_one,
++#endif
+ };
+ static int __init jmicron_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_marvell.c
++++ linux-2.6.20.1/drivers/ata/pata_marvell.c
+@@ -103,8 +103,10 @@ static struct scsi_host_template marvell
+       .slave_destroy          = ata_scsi_slave_destroy,
+       /* Use standard CHS mapping rules */
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static const struct ata_port_operations marvell_ops = {
+@@ -199,8 +201,10 @@ static struct pci_driver marvell_pci_dri
+       .id_table               = marvell_pci_tbl,
+       .probe                  = marvell_init_one,
+       .remove                 = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend                = ata_pci_device_suspend,
+       .resume                 = ata_pci_device_resume,
++#endif
+ };
+ static int __init marvell_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_mpiix.c
++++ linux-2.6.20.1/drivers/ata/pata_mpiix.c
+@@ -167,8 +167,10 @@ static struct scsi_host_template mpiix_s
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations mpiix_port_ops = {
+@@ -287,8 +289,10 @@ static struct pci_driver mpiix_pci_drive
+       .id_table       = mpiix,
+       .probe          = mpiix_init_one,
+       .remove         = mpiix_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init mpiix_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_netcell.c
++++ linux-2.6.20.1/drivers/ata/pata_netcell.c
+@@ -63,8 +63,10 @@ static struct scsi_host_template netcell
+       .slave_destroy          = ata_scsi_slave_destroy,
+       /* Use standard CHS mapping rules */
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static const struct ata_port_operations netcell_ops = {
+@@ -153,8 +155,10 @@ static struct pci_driver netcell_pci_dri
+       .id_table               = netcell_pci_tbl,
+       .probe                  = netcell_init_one,
+       .remove                 = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend                = ata_pci_device_suspend,
+       .resume                 = ata_pci_device_resume,
++#endif
+ };
+ static int __init netcell_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_ns87410.c
++++ linux-2.6.20.1/drivers/ata/pata_ns87410.c
+@@ -157,8 +157,10 @@ static struct scsi_host_template ns87410
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations ns87410_port_ops = {
+@@ -212,8 +214,10 @@ static struct pci_driver ns87410_pci_dri
+       .id_table       = ns87410,
+       .probe          = ns87410_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init ns87410_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_oldpiix.c
++++ linux-2.6.20.1/drivers/ata/pata_oldpiix.c
+@@ -232,8 +232,10 @@ static struct scsi_host_template oldpiix
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static const struct ata_port_operations oldpiix_pata_ops = {
+@@ -315,8 +317,10 @@ static struct pci_driver oldpiix_pci_dri
+       .id_table               = oldpiix_pci_tbl,
+       .probe                  = oldpiix_init_one,
+       .remove                 = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend                = ata_pci_device_suspend,
+       .resume                 = ata_pci_device_resume,
++#endif
+ };
+ static int __init oldpiix_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_opti.c
++++ linux-2.6.20.1/drivers/ata/pata_opti.c
+@@ -179,8 +179,10 @@ static struct scsi_host_template opti_sh
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations opti_port_ops = {
+@@ -244,8 +246,10 @@ static struct pci_driver opti_pci_driver
+       .id_table       = opti,
+       .probe          = opti_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init opti_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_optidma.c
++++ linux-2.6.20.1/drivers/ata/pata_optidma.c
+@@ -360,8 +360,10 @@ static struct scsi_host_template optidma
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations optidma_port_ops = {
+@@ -524,8 +526,10 @@ static struct pci_driver optidma_pci_dri
+       .id_table       = optidma,
+       .probe          = optidma_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init optidma_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_pdc202xx_old.c
++++ linux-2.6.20.1/drivers/ata/pata_pdc202xx_old.c
+@@ -270,8 +270,10 @@ static struct scsi_host_template pdc202x
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations pdc2024x_port_ops = {
+@@ -402,8 +404,10 @@ static struct pci_driver pdc202xx_pci_dr
+       .id_table       = pdc202xx,
+       .probe          = pdc202xx_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init pdc202xx_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_radisys.c
++++ linux-2.6.20.1/drivers/ata/pata_radisys.c
+@@ -228,8 +228,10 @@ static struct scsi_host_template radisys
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static const struct ata_port_operations radisys_pata_ops = {
+@@ -312,8 +314,10 @@ static struct pci_driver radisys_pci_dri
+       .id_table               = radisys_pci_tbl,
+       .probe                  = radisys_init_one,
+       .remove                 = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend                = ata_pci_device_suspend,
+       .resume                 = ata_pci_device_resume,
++#endif
+ };
+ static int __init radisys_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_rz1000.c
++++ linux-2.6.20.1/drivers/ata/pata_rz1000.c
+@@ -93,8 +93,10 @@ static struct scsi_host_template rz1000_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations rz1000_port_ops = {
+@@ -177,6 +179,7 @@ static int rz1000_init_one (struct pci_d
+       return -ENODEV;
+ }
++#ifdef CONFIG_PM
+ static int rz1000_reinit_one(struct pci_dev *pdev)
+ {
+       /* If this fails on resume (which is a "cant happen" case), we
+@@ -185,6 +188,7 @@ static int rz1000_reinit_one(struct pci_
+               panic("rz1000 fifo");
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+ static const struct pci_device_id pata_rz1000[] = {
+       { PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000), },
+@@ -198,8 +202,10 @@ static struct pci_driver rz1000_pci_driv
+       .id_table       = pata_rz1000,
+       .probe          = rz1000_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = rz1000_reinit_one,
++#endif
+ };
+ static int __init rz1000_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_sc1200.c
++++ linux-2.6.20.1/drivers/ata/pata_sc1200.c
+@@ -194,8 +194,10 @@ static struct scsi_host_template sc1200_
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations sc1200_port_ops = {
+@@ -266,8 +268,10 @@ static struct pci_driver sc1200_pci_driv
+       .id_table       = sc1200,
+       .probe          = sc1200_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init sc1200_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_serverworks.c
++++ linux-2.6.20.1/drivers/ata/pata_serverworks.c
+@@ -326,8 +326,10 @@ static struct scsi_host_template serverw
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations serverworks_osb4_port_ops = {
+@@ -555,6 +557,7 @@ static int serverworks_init_one(struct p
+       return ata_pci_init_one(pdev, port_info, ports);
+ }
++#ifdef CONFIG_PM
+ static int serverworks_reinit_one(struct pci_dev *pdev)
+ {
+       /* Force master latency timer to 64 PCI clocks */
+@@ -578,6 +581,7 @@ static int serverworks_reinit_one(struct
+       }
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+ static const struct pci_device_id serverworks[] = {
+       { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE), 0},
+@@ -594,8 +598,10 @@ static struct pci_driver serverworks_pci
+       .id_table       = serverworks,
+       .probe          = serverworks_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = serverworks_reinit_one,
++#endif
+ };
+ static int __init serverworks_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_sil680.c
++++ linux-2.6.20.1/drivers/ata/pata_sil680.c
+@@ -371,11 +371,13 @@ static int sil680_init_one(struct pci_de
+       return ata_pci_init_one(pdev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ static int sil680_reinit_one(struct pci_dev *pdev)
+ {
+       sil680_init_chip(pdev);
+       return ata_pci_device_resume(pdev);
+ }
++#endif
+ static const struct pci_device_id sil680[] = {
+       { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_680), },
+@@ -388,8 +390,10 @@ static struct pci_driver sil680_pci_driv
+       .id_table       = sil680,
+       .probe          = sil680_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = sil680_reinit_one,
++#endif
+ };
+ static int __init sil680_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_sis.c
++++ linux-2.6.20.1/drivers/ata/pata_sis.c
+@@ -546,8 +546,10 @@ static struct scsi_host_template sis_sht
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static const struct ata_port_operations sis_133_ops = {
+@@ -1001,8 +1003,10 @@ static struct pci_driver sis_pci_driver 
+       .id_table               = sis_pci_tbl,
+       .probe                  = sis_init_one,
+       .remove                 = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend                = ata_pci_device_suspend,
+       .resume                 = ata_pci_device_resume,
++#endif
+ };
+ static int __init sis_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_triflex.c
++++ linux-2.6.20.1/drivers/ata/pata_triflex.c
+@@ -193,8 +193,10 @@ static struct scsi_host_template triflex
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations triflex_port_ops = {
+@@ -260,8 +262,10 @@ static struct pci_driver triflex_pci_dri
+       .id_table       = triflex,
+       .probe          = triflex_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = ata_pci_device_resume,
++#endif
+ };
+ static int __init triflex_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/pata_via.c
++++ linux-2.6.20.1/drivers/ata/pata_via.c
+@@ -305,8 +305,10 @@ static struct scsi_host_template via_sht
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .resume                 = ata_scsi_device_resume,
+       .suspend                = ata_scsi_device_suspend,
++#endif
+ };
+ static struct ata_port_operations via_port_ops = {
+@@ -560,6 +562,7 @@ static int via_init_one(struct pci_dev *
+       return ata_pci_init_one(pdev, port_info, 2);
+ }
++#ifdef CONFIG_PM
+ /**
+  *    via_reinit_one          -       reinit after resume
+  *    @pdev; PCI device
+@@ -592,6 +595,7 @@ static int via_reinit_one(struct pci_dev
+       }
+       return ata_pci_device_resume(pdev);     
+ }
++#endif
+ static const struct pci_device_id via[] = {
+       { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), },
+@@ -607,8 +611,10 @@ static struct pci_driver via_pci_driver 
+       .id_table       = via,
+       .probe          = via_init_one,
+       .remove         = ata_pci_remove_one,
++#ifdef CONFIG_PM
+       .suspend        = ata_pci_device_suspend,
+       .resume         = via_reinit_one,
++#endif
+ };
+ static int __init via_init(void)
+--- linux-2.6.20.1.orig/drivers/ata/sata_sil.c
++++ linux-2.6.20.1/drivers/ata/sata_sil.c
+@@ -181,8 +181,10 @@ static struct scsi_host_template sil_sht
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .suspend                = ata_scsi_device_suspend,
+       .resume                 = ata_scsi_device_resume,
++#endif
+ };
+ static const struct ata_port_operations sil_ops = {
+--- linux-2.6.20.1.orig/drivers/ata/sata_sil24.c
++++ linux-2.6.20.1/drivers/ata/sata_sil24.c
+@@ -386,8 +386,10 @@ static struct scsi_host_template sil24_s
+       .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
+       .bios_param             = ata_std_bios_param,
++#ifdef CONFIG_PM
+       .suspend                = ata_scsi_device_suspend,
+       .resume                 = ata_scsi_device_resume,
++#endif
+ };
+ static const struct ata_port_operations sil24_ops = {
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:18 2007
+Message-Id: <20070307170618.451785228@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:25 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Paul Mackerras <paulus@samba.org>
+Subject: [patch 062/101] POWERPC: Fix performance monitor exception
+Content-Disposition: inline; filename=powerpc-fix-performance-monitor-exception.patch
+Content-Length: 2515
+Lines: 56
+
+
+From: Livio Soares <livio@eecg.toronto.edu>
+
+To the issue: some point during 2.6.20 development, Paul Mackerras
+introduced the "lazy IRQ  disabling" patch (very cool work,  BTW).
+In that patch, the performance monitor unit exception was marked as
+"maskable", in the sense that if interrupts were soft-disabled, that
+exception could be ignored.  This broke my PowerPC profiling code.
+The symptom that I see is that a varying number of interrupts
+(from 0 to $n$, typically closer to 0) get delivered, when, in
+reality, it should always be very close to $n$.
+
+The issue stems from the way masking is being done.   Masking in
+this fashion seems to  work well with the decrementer and external
+interrupts, because they are raised again until "really"  handled.
+For the PMU, however, this does not apply (at least on my Xserver
+machine with a 970FX processor).  If the PMU exception is not handled,
+it will _not_ be re-raised (at least on my machine).  The documentation
+states that the PMXE bit in MMCR0 is set to 0 when the PMU exception
+is raised.  However, software must re-set the bit to re-enable PMU
+exceptions.  If the exception is ignored (as currently) not only is
+that interrupt lost, but because software does not re-set PMXE, the
+PMU registers are "frozen" forever.
+
+[This patch means that performance monitor exceptions are taken and
+handled even if irqs are off, as long as some other interrupt hasn't
+come along and caused interrupts to be hard-disabled.  In this sense
+the PMU exception becomes like an NMI.  The oprofile code for most
+powerpc processors does nothing that is unsafe in an NMI context, but
+the Cell oprofile code does a spin_lock_irqsave.  However, that turns
+out to be OK because Cell doesn't actually use the performance
+monitor exception; performance monitor interrupts come in as a
+regular interrupt on Cell, so will be disabled when irqs are off.
+ -- paulus.]
+
+From: Livio Soares <livio@eecg.toronto.edu>
+Signed-off-by: Paul Mackerras <paulus@samba.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/kernel/head_64.S |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/arch/powerpc/kernel/head_64.S
++++ linux-2.6.20.1/arch/powerpc/kernel/head_64.S
+@@ -613,7 +613,7 @@ system_call_pSeries:
+ /*** pSeries interrupt support ***/
+       /* moved from 0xf00 */
+-      MASKABLE_EXCEPTION_PSERIES(., performance_monitor)
++      STD_EXCEPTION_PSERIES(., performance_monitor)
+ /*
+  * An interrupt came in while soft-disabled; clear EE in SRR1,
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:18 2007
+Message-Id: <20070307170618.580162123@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:26 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jiri Kosina <jkosina@suse.cz>
+Subject: [patch 063/101] HID: fix possible double-free on error path in hid parser
+Content-Disposition: inline; filename=hid-fix-possible-double-free-on-error-path-in-hid-parser.patch
+Content-Length: 1935
+Lines: 61
+
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+HID: fix possible double-free on error path in hid parser
+
+Freeing of device->collection is properly done in hid_free_device() (as
+this function is supposed to free all the device resources and could be
+called from transport specific code, e.g. usb_hid_configure()).
+
+Remove all kfree() calls preceeding the hid_free_device() call.
+
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hid/hid-core.c |    5 -----
+ 1 file changed, 5 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/hid/hid-core.c
++++ linux-2.6.20.1/drivers/hid/hid-core.c
+@@ -670,7 +670,6 @@ struct hid_device *hid_parse_report(__u8
+               if (item.format != HID_ITEM_FORMAT_SHORT) {
+                       dbg("unexpected long global item");
+-                      kfree(device->collection);
+                       hid_free_device(device);
+                       kfree(parser);
+                       return NULL;
+@@ -679,7 +678,6 @@ struct hid_device *hid_parse_report(__u8
+               if (dispatch_type[item.type](parser, &item)) {
+                       dbg("item %u %u %u %u parsing failed\n",
+                               item.format, (unsigned)item.size, (unsigned)item.type, (unsigned)item.tag);
+-                      kfree(device->collection);
+                       hid_free_device(device);
+                       kfree(parser);
+                       return NULL;
+@@ -688,14 +686,12 @@ struct hid_device *hid_parse_report(__u8
+               if (start == end) {
+                       if (parser->collection_stack_ptr) {
+                               dbg("unbalanced collection at end of report description");
+-                              kfree(device->collection);
+                               hid_free_device(device);
+                               kfree(parser);
+                               return NULL;
+                       }
+                       if (parser->local.delimiter_depth) {
+                               dbg("unbalanced delimiter at end of report description");
+-                              kfree(device->collection);
+                               hid_free_device(device);
+                               kfree(parser);
+                               return NULL;
+@@ -706,7 +702,6 @@ struct hid_device *hid_parse_report(__u8
+       }
+       dbg("item fetching failed at offset %d\n", (int)(end - start));
+-      kfree(device->collection);
+       hid_free_device(device);
+       kfree(parser);
+       return NULL;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:18 2007
+Message-Id: <20070307170618.770824570@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:27 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ fabbione@ubuntu.com,
+ bunk@stusta.de,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 064/101] Fix interrupt probing on E450 sparc64 systems
+Content-Disposition: inline; filename=fix-interrupt-probing-on-e450-sparc64-systems.patch
+Content-Length: 2330
+Lines: 79
+
+From: David Miller <davem@davemloft.net>
+
+[SPARC64]: Fix PCI interrupts on E450 et al.
+
+When the PCI controller OBP node lacks an interrupt-map
+and interrupt-map-mask property, we need to form the
+INO by hand.  The PCI swizzle logic was not doing that
+properly.
+
+This was a regression added by the of_device code.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/sparc64/kernel/of_device.c |   40 ++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 38 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/arch/sparc64/kernel/of_device.c
++++ linux-2.6.20.1/arch/sparc64/kernel/of_device.c
+@@ -708,7 +708,7 @@ static unsigned int __init pci_irq_swizz
+                                          unsigned int irq)
+ {
+       struct linux_prom_pci_registers *regs;
+-      unsigned int devfn, slot, ret;
++      unsigned int bus, devfn, slot, ret;
+       if (irq < 1 || irq > 4)
+               return irq;
+@@ -717,10 +717,46 @@ static unsigned int __init pci_irq_swizz
+       if (!regs)
+               return irq;
++      bus = (regs->phys_hi >> 16) & 0xff;
+       devfn = (regs->phys_hi >> 8) & 0xff;
+       slot = (devfn >> 3) & 0x1f;
+-      ret = ((irq - 1 + (slot & 3)) & 3) + 1;
++      if (pp->irq_trans) {
++              /* Derived from Table 8-3, U2P User's Manual.  This branch
++               * is handling a PCI controller that lacks a proper set of
++               * interrupt-map and interrupt-map-mask properties.  The
++               * Ultra-E450 is one example.
++               *
++               * The bit layout is BSSLL, where:
++               * B: 0 on bus A, 1 on bus B
++               * D: 2-bit slot number, derived from PCI device number as
++               *    (dev - 1) for bus A, or (dev - 2) for bus B
++               * L: 2-bit line number
++               *
++               * Actually, more "portable" way to calculate the funky
++               * slot number is to subtract pbm->pci_first_slot from the
++               * device number, and that's exactly what the pre-OF
++               * sparc64 code did, but we're building this stuff generically
++               * using the OBP tree, not in the PCI controller layer.
++               */
++              if (bus & 0x80) {
++                      /* PBM-A */
++                      bus  = 0x00;
++                      slot = (slot - 1) << 2;
++              } else {
++                      /* PBM-B */
++                      bus  = 0x10;
++                      slot = (slot - 2) << 2;
++              }
++              irq -= 1;
++
++              ret = (bus | slot | irq);
++      } else {
++              /* Going through a PCI-PCI bridge that lacks a set of
++               * interrupt-map and interrupt-map-mask properties.
++               */
++              ret = ((irq - 1 + (slot & 3)) & 3) + 1;
++      }
+       return ret;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:18 2007
+Message-Id: <20070307170618.846350628@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:28 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 065/101] Fix xfrm_add_sa_expire() return value
+Content-Disposition: inline; filename=fix-xfrm_add_sa_expire-return-value.patch
+Content-Length: 1154
+Lines: 43
+
+From: David Miller <davem@davemloft.net>
+
+[XFRM] xfrm_user: Fix return values of xfrm_add_sa_expire.
+
+As noted by Kent Yoder, this function will always return an
+error.  Make sure it returns zero on success.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/xfrm/xfrm_user.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- linux-2.6.20.1.orig/net/xfrm/xfrm_user.c
++++ linux-2.6.20.1/net/xfrm/xfrm_user.c
+@@ -1557,14 +1557,13 @@ static int xfrm_add_sa_expire(struct sk_
+       struct xfrm_usersa_info *p = &ue->state;
+       x = xfrm_state_lookup(&p->id.daddr, p->id.spi, p->id.proto, p->family);
+-              err = -ENOENT;
++      err = -ENOENT;
+       if (x == NULL)
+               return err;
+-      err = -EINVAL;
+-
+       spin_lock_bh(&x->lock);
++      err = -EINVAL;
+       if (x->km.state != XFRM_STATE_VALID)
+               goto out;
+       km_state_expired(x, ue->hard, current->pid);
+@@ -1574,6 +1573,7 @@ static int xfrm_add_sa_expire(struct sk_
+               xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid,
+                              AUDIT_MAC_IPSEC_DELSA, 1, NULL, x);
+       }
++      err = 0;
+ out:
+       spin_unlock_bh(&x->lock);
+       xfrm_state_put(x);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:19 2007
+Message-Id: <20070307170618.981055421@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:29 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ Arnaldo Carvalho de Melo <acme@redhat.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 066/101] Fix skb data reallocation handling in IPSEC
+Content-Disposition: inline; filename=fix-skb-data-reallocation-handling-in-ipsec.patch
+Content-Length: 919
+Lines: 28
+
+From: Arnaldo Carvalho de Melo <acme@redhat.com>
+
+[XFRM_TUNNEL]: Reload header pointer after pskb_may_pull/pskb_expand_head
+
+Please consider applying, this was found on your latest
+net-2.6 tree while playing around with that ip_hdr() + turn
+skb->nh/h/mac pointers  as offsets on 64 bits idea :-)
+
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/xfrm4_mode_tunnel.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.20.1.orig/net/ipv4/xfrm4_mode_tunnel.c
++++ linux-2.6.20.1/net/ipv4/xfrm4_mode_tunnel.c
+@@ -84,6 +84,7 @@ static int xfrm4_tunnel_input(struct xfr
+           (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC)))
+               goto out;
++      iph = skb->nh.iph;
+       if (x->props.flags & XFRM_STATE_DECAP_DSCP)
+               ipv4_copy_dscp(iph, skb->h.ipiph);
+       if (!(x->props.flags & XFRM_STATE_NOECN))
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:19 2007
+Message-Id: <20070307170619.115652657@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:30 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 067/101] Fix %100 cpu spinning on sparc64
+Content-Disposition: inline; filename=fix-100-cpu-spinning-on-sparc64.patch
+Content-Length: 1298
+Lines: 52
+
+From: David Miller <davem@davemloft.net>
+
+[SPARC64] bbc_i2c: Fix kenvctrld eating %100 cpu.
+
+Based almost entirely upon a patch by Joerg Friedrich
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+
+---
+ drivers/sbus/char/bbc_i2c.c |   15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/sbus/char/bbc_i2c.c
++++ linux-2.6.20.1/drivers/sbus/char/bbc_i2c.c
+@@ -187,19 +187,20 @@ static int wait_for_pin(struct bbc_i2c_b
+       bp->waiting = 1;
+       add_wait_queue(&bp->wq, &wait);
+       while (limit-- > 0) {
+-              u8 val;
++              unsigned long val;
+-              set_current_state(TASK_INTERRUPTIBLE);
+-              *status = val = readb(bp->i2c_control_regs + 0);
+-              if ((val & I2C_PCF_PIN) == 0) {
++              val = wait_event_interruptible_timeout(
++                              bp->wq,
++                              (((*status = readb(bp->i2c_control_regs + 0))
++                                & I2C_PCF_PIN) == 0),
++                              msecs_to_jiffies(250));
++              if (val > 0) {
+                       ret = 0;
+                       break;
+               }
+-              msleep_interruptible(250);
+       }
+       remove_wait_queue(&bp->wq, &wait);
+       bp->waiting = 0;
+-      current->state = TASK_RUNNING;
+       return ret;
+ }
+@@ -340,7 +341,7 @@ static irqreturn_t bbc_i2c_interrupt(int
+        */
+       if (bp->waiting &&
+           !(readb(bp->i2c_control_regs + 0x0) & I2C_PCF_PIN))
+-              wake_up(&bp->wq);
++              wake_up_interruptible(&bp->wq);
+       return IRQ_HANDLED;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:19 2007
+Message-Id: <20070307170619.241029171@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:31 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 068/101] Fix TCP MD5 locking.
+Content-Disposition: inline; filename=fix-tcp-md5-locking.patch
+Content-Length: 2630
+Lines: 94
+
+From: David Miller <davem@davemloft.net>
+
+[TCP]: Fix MD5 signature pool locking.
+
+The locking calls assumed that these code paths were only
+invoked in software interrupt context, but that isn't true.
+
+Therefore we need to use spin_{lock,unlock}_bh() throughout.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/tcp.c |   24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+--- linux-2.6.20.1.orig/net/ipv4/tcp.c
++++ linux-2.6.20.1/net/ipv4/tcp.c
+@@ -2266,12 +2266,12 @@ void tcp_free_md5sig_pool(void)
+ {
+       struct tcp_md5sig_pool **pool = NULL;
+-      spin_lock(&tcp_md5sig_pool_lock);
++      spin_lock_bh(&tcp_md5sig_pool_lock);
+       if (--tcp_md5sig_users == 0) {
+               pool = tcp_md5sig_pool;
+               tcp_md5sig_pool = NULL;
+       }
+-      spin_unlock(&tcp_md5sig_pool_lock);
++      spin_unlock_bh(&tcp_md5sig_pool_lock);
+       if (pool)
+               __tcp_free_md5sig_pool(pool);
+ }
+@@ -2314,36 +2314,36 @@ struct tcp_md5sig_pool **tcp_alloc_md5si
+       int alloc = 0;
+ retry:
+-      spin_lock(&tcp_md5sig_pool_lock);
++      spin_lock_bh(&tcp_md5sig_pool_lock);
+       pool = tcp_md5sig_pool;
+       if (tcp_md5sig_users++ == 0) {
+               alloc = 1;
+-              spin_unlock(&tcp_md5sig_pool_lock);
++              spin_unlock_bh(&tcp_md5sig_pool_lock);
+       } else if (!pool) {
+               tcp_md5sig_users--;
+-              spin_unlock(&tcp_md5sig_pool_lock);
++              spin_unlock_bh(&tcp_md5sig_pool_lock);
+               cpu_relax();
+               goto retry;
+       } else
+-              spin_unlock(&tcp_md5sig_pool_lock);
++              spin_unlock_bh(&tcp_md5sig_pool_lock);
+       if (alloc) {
+               /* we cannot hold spinlock here because this may sleep. */
+               struct tcp_md5sig_pool **p = __tcp_alloc_md5sig_pool();
+-              spin_lock(&tcp_md5sig_pool_lock);
++              spin_lock_bh(&tcp_md5sig_pool_lock);
+               if (!p) {
+                       tcp_md5sig_users--;
+-                      spin_unlock(&tcp_md5sig_pool_lock);
++                      spin_unlock_bh(&tcp_md5sig_pool_lock);
+                       return NULL;
+               }
+               pool = tcp_md5sig_pool;
+               if (pool) {
+                       /* oops, it has already been assigned. */
+-                      spin_unlock(&tcp_md5sig_pool_lock);
++                      spin_unlock_bh(&tcp_md5sig_pool_lock);
+                       __tcp_free_md5sig_pool(p);
+               } else {
+                       tcp_md5sig_pool = pool = p;
+-                      spin_unlock(&tcp_md5sig_pool_lock);
++                      spin_unlock_bh(&tcp_md5sig_pool_lock);
+               }
+       }
+       return pool;
+@@ -2354,11 +2354,11 @@ EXPORT_SYMBOL(tcp_alloc_md5sig_pool);
+ struct tcp_md5sig_pool *__tcp_get_md5sig_pool(int cpu)
+ {
+       struct tcp_md5sig_pool **p;
+-      spin_lock(&tcp_md5sig_pool_lock);
++      spin_lock_bh(&tcp_md5sig_pool_lock);
+       p = tcp_md5sig_pool;
+       if (p)
+               tcp_md5sig_users++;
+-      spin_unlock(&tcp_md5sig_pool_lock);
++      spin_unlock_bh(&tcp_md5sig_pool_lock);
+       return (p ? *per_cpu_ptr(p, cpu) : NULL);
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:19 2007
+Message-Id: <20070307170619.369558320@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:32 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ Michal Wrobel <xmxwx@asn.pl>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 069/101] Dont add anycast reference to device multiple times
+Content-Disposition: inline; filename=don-t-add-anycast-reference-to-device-multiple-times.patch
+Content-Length: 893
+Lines: 30
+
+From: Michal Wrobel <xmxwx@asn.pl>
+
+[IPV6]: anycast refcnt fix
+
+This patch fixes a bug in Linux IPv6 stack which caused anycast address
+to be added to a device prior DAD has been completed. This led to
+incorrect reference count which resulted in infinite wait for
+unregister_netdevice completion on interface removal.
+
+Signed-off-by: Michal Wrobel <xmxwx@asn.pl>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv6/addrconf.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- linux-2.6.20.1.orig/net/ipv6/addrconf.c
++++ linux-2.6.20.1/net/ipv6/addrconf.c
+@@ -469,6 +469,8 @@ static void dev_forward_change(struct in
+                       ipv6_dev_mc_dec(dev, &addr);
+       }
+       for (ifa=idev->addr_list; ifa; ifa=ifa->if_next) {
++              if (ifa->flags&IFA_F_TENTATIVE)
++                      continue;
+               if (idev->cnf.forwarding)
+                       addrconf_join_anycast(ifa);
+               else
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:19 2007
+Message-Id: <20070307170619.497047671@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:33 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ bunk@stusta.de,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 070/101] Fix anycast procfs device leak
+Content-Disposition: inline; filename=fix-anycast-procfs-device-leak.patch
+Content-Length: 790
+Lines: 30
+
+From: David Stevens <dlstevens@us.ibm.com>
+
+[IPV6]: /proc/net/anycast6 unbalanced inet6_dev refcnt
+
+From: David Stevens <dlstevens@us.ibm.com>
+
+Reading /proc/net/anycast6 when there is no anycast address
+on an interface results in an ever-increasing inet6_dev reference
+count, as well as a reference to the netdevice you can't get rid of.
+
+From: David Stevens <dlstevens@us.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv6/anycast.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.20.1.orig/net/ipv6/anycast.c
++++ linux-2.6.20.1/net/ipv6/anycast.c
+@@ -462,6 +462,7 @@ static inline struct ifacaddr6 *ac6_get_
+                       break;
+               }
+               read_unlock_bh(&idev->lock);
++              in6_dev_put(idev);
+       }
+       return im;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:19 2007
+Message-Id: <20070307170619.624623906@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:34 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ =?ISO-8859-15?q?Micha=C5=82=20Miros=C5=82aw?= <mirq-linux@rere.qmqm.pl>
+Subject: [patch 071/101] Fix reference counting (memory leak) problem in __nfulnl_send() and callers related to packet queueing.
+Content-Disposition: inline; filename=nfnetlink_log_refcounting_fix.patch.patch
+Content-Length: 1545
+Lines: 54
+
+Signed-off-by: MichaÅ‚ MirosÅ‚aw <mirq-linux@rere.qmqm.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/netfilter/nfnetlink_log.c |   15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+--- linux-2.6.20.1.orig/net/netfilter/nfnetlink_log.c
++++ linux-2.6.20.1/net/netfilter/nfnetlink_log.c
+@@ -217,6 +217,11 @@ _instance_destroy2(struct nfulnl_instanc
+       spin_lock_bh(&inst->lock);
+       if (inst->skb) {
++              /* timer "holds" one reference (we have one more) */
++              if (timer_pending(&inst->timer)) {
++                      del_timer(&inst->timer);
++                      instance_put(inst);
++              }
+               if (inst->qlen)
+                       __nfulnl_send(inst);
+               if (inst->skb) {
+@@ -363,9 +368,6 @@ __nfulnl_send(struct nfulnl_instance *in
+ {
+       int status;
+-      if (timer_pending(&inst->timer))
+-              del_timer(&inst->timer);
+-
+       if (!inst->skb)
+               return 0;
+@@ -392,6 +394,8 @@ static void nfulnl_timer(unsigned long d
+       UDEBUG("timer function called, flushing buffer\n");
+       spin_lock_bh(&inst->lock);
++      if (timer_pending(&inst->timer))        /* is it always true or false here? */
++              del_timer(&inst->timer);
+       __nfulnl_send(inst);
+       instance_put(inst);
+       spin_unlock_bh(&inst->lock);
+@@ -689,6 +693,11 @@ nfulnl_log_packet(unsigned int pf,
+                * enough room in the skb left. flush to userspace. */
+               UDEBUG("flushing old skb\n");
++              /* timer "holds" one reference (we have another one) */
++              if (timer_pending(&inst->timer)) {
++                      del_timer(&inst->timer);
++                      instance_put(inst);
++              }
+               __nfulnl_send(inst);
+               if (!(inst->skb = nfulnl_alloc_skb(nlbufsiz, size))) {
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:19 2007
+Message-Id: <20070307170619.802814659@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:35 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Neil Brown <neilb@suse.de>
+Subject: [patch 072/101] export blk_recount_segments
+Content-Disposition: inline; filename=md_md5_6_bio_too_big_fix_fix.patch
+Content-Length: 894
+Lines: 31
+
+On Monday February 12, marcm@liquid-nexus.net wrote:
+> > 
+> > Thanks for the quick response Neil unfortunately the kernel doesn't build with
+> > this patch due to a missing symbol:
+> > 
+> > WARNING: "blk_recount_segments" [drivers/md/raid456.ko] undefined!
+> > 
+> > Is that in another file that needs patching or within raid5.c?
+
+Yes.  I keep forgetting about that bit. Sorry.
+
+Signed-off-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ block/ll_rw_blk.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/block/ll_rw_blk.c
++++ linux-2.6.20.1/block/ll_rw_blk.c
+@@ -1264,7 +1264,7 @@ new_hw_segment:
+       bio->bi_hw_segments = nr_hw_segs;
+       bio->bi_flags |= (1 << BIO_SEG_VALID);
+ }
+-
++EXPORT_SYMBOL(blk_recount_segments);
+ static int blk_phys_contig_segment(request_queue_t *q, struct bio *bio,
+                                  struct bio *nxt)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:19 2007
+Message-Id: <20070307170619.877060109@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:36 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ayaz Abdulla <aabdulla@nvidia.com>,
+ Jeff Garzik <jeff@garzik.org>
+Subject: [patch 073/101] forcedeth: disable msix
+Content-Disposition: inline; filename=forcedeth-disable-msix.patch
+Content-Length: 749
+Lines: 29
+
+From: Ayaz Abdulla <aabdulla@nvidia.com>
+
+forcedeth: disable msix
+
+There seems to be an issue when both MSI-X is enabled and NAPI is
+configured. This patch disables MSI-X until the issue is root caused.
+
+Signed-off-by: Ayaz Abdulla <aabdulla@nvidia.com>
+Signed-off-by: Jeff Garzik <jeff@garzik.org>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/forcedeth.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/net/forcedeth.c
++++ linux-2.6.20.1/drivers/net/forcedeth.c
+@@ -825,7 +825,7 @@ enum {
+       NV_MSIX_INT_DISABLED,
+       NV_MSIX_INT_ENABLED
+ };
+-static int msix = NV_MSIX_INT_ENABLED;
++static int msix = NV_MSIX_INT_DISABLED;
+ /*
+  * DMA 64bit
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:20 2007
+Message-Id: <20070307170620.004428216@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:37 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Aristeu Sergio Rozanski Filho <aris@ruivo.org>,
+ "H. Peter Anvin" <hpa@zytor.com>
+Subject: [patch 074/101] tty_io: fix race in master pty close/slave pty close path
+Content-Disposition: inline; filename=tty_io-fix-race-in-master-pty-close-slave-pty-close-path.patch
+Content-Length: 5658
+Lines: 146
+
+From: Aristeu Sergio Rozanski Filho <aristeu.sergio@gmail.com>
+
+[PATCH] tty_io: fix race in master pty close/slave pty close path
+
+This patch fixes a possible race that leads to double freeing an idr index.
+ When the master begin to close, release_dev() is called and then
+pty_close() is called:
+
+        if (tty->driver->close)
+                tty->driver->close(tty, filp);
+
+This is done without helding any locks other than BKL.  Inside pty_close(),
+being a master close, the devpts entry will be removed:
+
+#ifdef CONFIG_UNIX98_PTYS
+                if (tty->driver == ptm_driver)
+                        devpts_pty_kill(tty->index);
+#endif
+
+But devpts_pty_kill() will call get_node() that may sleep while waiting for
+&devpts_root->d_inode->i_sem.  When this happens and the slave is being
+opened, tty_open() just found the driver and index:
+
+        driver = get_tty_driver(device, &index);
+        if (!driver) {
+                mutex_unlock(&tty_mutex);
+                return -ENODEV;
+        }
+
+This part of the code is already protected under tty_mute.  The problem is
+that the slave close already got an index.  Then init_dev() is called and
+blocks waiting for the same &devpts_root->d_inode->i_sem.
+
+When the master close resumes, it removes the devpts entry, and the
+relation between idr index and the tty is gone.  The master then sleeps
+waiting for the tty_mutex on release_dev().
+
+Slave open resumes and found no tty for that index.  As result, a NULL tty
+is returned and init_dev() doesn't flow to fast_track:
+
+        /* check whether we're reopening an existing tty */
+        if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
+                tty = devpts_get_tty(idx);
+                if (tty && driver->subtype == PTY_TYPE_MASTER)
+                        tty = tty->link;
+        } else {
+                tty = driver->ttys[idx];
+        }
+        if (tty) goto fast_track;
+
+The result of this, is that a new tty will be created and init_dev() returns
+sucessfull. After returning, tty_mutex is dropped and master close may resume.
+
+Master close finds it's the only use and both sides are closing, then releases
+the tty and the index. At this point, the idr index is free, but slave still
+has it.
+
+Slave open then calls pty_open() and finds that tty->link->count is 0,
+because there's no master and returns error.  Then tty_open() calls
+release_dev() which executes without any warning, as it was a case of last
+slave close when the master is already closed (master->count == 0,
+slave->count == 1).  The tty is then released with the already released idr
+index.
+
+This normally would only issue a warning on idr_remove() but in case of a
+customer's critical application, it's never too simple:
+
+thread1: opens master, gets index X
+thread1: begin closing master
+thread2: begin opening slave with index X
+thread1: finishes closing master, index X released
+thread3: opens master, gets index X, just released
+thread2: fails opening slave, releases index X         <----
+thread4: opens master, gets index X, init_dev() then find an already in use
+        and healthy tty and fails
+
+If no more indexes are released, ptmx_open() will keep failing, as the
+first free index available is X, and it will make init_dev() fail because
+you're trying to "reopen a master" which isn't valid.
+
+The patch notices when this race happens and make init_dev() fail
+imediately.  The init_dev() function is called with tty_mutex held, so it's
+safe to continue with tty till the end of function because release_dev()
+won't make any further changes without grabbing the tty_mutex.
+
+Without the patch, on some machines it's possible get easily idr warnings
+like this one:
+
+idr_remove called for id=15 which is not allocated.
+ [<c02555b9>] idr_remove+0x139/0x170
+ [<c02a1b62>] release_mem+0x182/0x230
+ [<c02a28e7>] release_dev+0x4b7/0x700
+ [<c02a0ea7>] tty_ldisc_enable+0x27/0x30
+ [<c02a1e64>] init_dev+0x254/0x580
+ [<c02a0d64>] check_tty_count+0x14/0xb0
+ [<c02a4f05>] tty_open+0x1c5/0x340
+ [<c02a4d40>] tty_open+0x0/0x340
+ [<c017388f>] chrdev_open+0xaf/0x180
+ [<c017c2ac>] open_namei+0x8c/0x760
+ [<c01737e0>] chrdev_open+0x0/0x180
+ [<c0167bc9>] __dentry_open+0xc9/0x210
+ [<c0167e2c>] do_filp_open+0x5c/0x70
+ [<c0167a91>] get_unused_fd+0x61/0xd0
+ [<c0167e93>] do_sys_open+0x53/0x100
+ [<c0167f97>] sys_open+0x27/0x30
+ [<c010303b>] syscall_call+0x7/0xb
+
+using this test application available on:
+ http://www.ruivo.org/~aris/pty_sodomizer.c
+
+Signed-off-by: Aristeu Sergio Rozanski Filho <aris@ruivo.org>
+Cc: "H. Peter Anvin" <hpa@zytor.com>
+Cc: Chuck Ebbert <cebbert@redhat.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/char/tty_io.c |   14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/char/tty_io.c
++++ linux-2.6.20.1/drivers/char/tty_io.c
+@@ -1891,6 +1891,20 @@ static int init_dev(struct tty_driver *d
+       /* check whether we're reopening an existing tty */
+       if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
+               tty = devpts_get_tty(idx);
++              /*
++               * If we don't have a tty here on a slave open, it's because
++               * the master already started the close process and there's
++               * no relation between devpts file and tty anymore.
++               */
++              if (!tty && driver->subtype == PTY_TYPE_SLAVE) {
++                      retval = -EIO;
++                      goto end_init;
++              }
++              /*
++               * It's safe from now on because init_dev() is called with
++               * tty_mutex held and release_dev() won't change tty->count
++               * or tty->flags without having to grab tty_mutex
++               */
+               if (tty && driver->subtype == PTY_TYPE_MASTER)
+                       tty = tty->link;
+       } else {
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:20 2007
+Message-Id: <20070307170620.142747433@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:38 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ingo Molnar <mingo@elte.hu>,
+ Michal Piotrowski <michal.k.k.piotrowski@gmail.com>,
+ Nick Piggin <nickpiggin@yahoo.com.au>,
+ Thomas Gleixner <tglx@linutronix.de>
+Subject: [patch 075/101] sched: fix SMT scheduler bug
+Content-Disposition: inline; filename=sched-fix-smt-scheduler-bug.patch
+Content-Length: 1341
+Lines: 40
+
+From: Ingo Molnar <mingo@elte.hu>
+
+[PATCH] sched: fix SMT scheduler bug
+
+The SMT scheduler incorrectly skips kernel threads even if they are
+runnable (but they are preempted by a higher-prio user-space task which got
+SMT-delayed by an even higher-priority task running on a sibling CPU).
+
+Fix this for now by only doing the SMT-nice optimization if the
+to-be-delayed task is the only runnable task.  (This should cover most of
+the real-life cases anyway.)
+
+This bug has been in the SMT scheduler since 2.6.17 or so, but has only
+been noticed now by the active check in the dynticks code.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Cc: Michal Piotrowski <michal.k.k.piotrowski@gmail.com>
+Cc: Nick Piggin <nickpiggin@yahoo.com.au>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+
+---
+ kernel/sched.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/kernel/sched.c
++++ linux-2.6.20.1/kernel/sched.c
+@@ -3528,7 +3528,7 @@ need_resched_nonpreemptible:
+               }
+       }
+       next->sleep_type = SLEEP_NORMAL;
+-      if (dependent_sleeper(cpu, rq, next))
++      if (rq->nr_running == 1 && dependent_sleeper(cpu, rq, next))
+               next = rq->idle;
+ switch_tasks:
+       if (next == rq->idle)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:20 2007
+Message-Id: <20070307170620.326687240@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:39 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Greg KH <greg@kroah.com>
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ David Brownell <david-b@pacbell.net>
+Subject: [patch 076/101] USB: usbnet driver bugfix
+Content-Disposition: inline; filename=usb-usbnet-driver-bugfix.patch
+Content-Length: 1242
+Lines: 43
+
+From: David Brownell <david-b@pacbell.net>
+
+The attached fixes an oops in the usbnet driver. The same patch is
+in 2.6.21-rc1, but that one has many whitespace changes. This is much
+smaller.
+
+
+Signed-off-by: David Brownell <david-b@pacbell.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/net/usbnet.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/usb/net/usbnet.c
++++ linux-2.6.20.1/drivers/usb/net/usbnet.c
+@@ -1182,6 +1182,9 @@ usbnet_probe (struct usb_interface *udev
+       // NOTE net->name still not usable ...
+       if (info->bind) {
+               status = info->bind (dev, udev);
++              if (status < 0)
++                      goto out1;
++
+               // heuristic:  "usb%d" for links we know are two-host,
+               // else "eth%d" when there's reasonable doubt.  userspace
+               // can rename the link if it knows better.
+@@ -1208,12 +1211,12 @@ usbnet_probe (struct usb_interface *udev
+       if (status == 0 && dev->status)
+               status = init_status (dev, udev);
+       if (status < 0)
+-              goto out1;
++              goto out3;
+       if (!dev->rx_urb_size)
+               dev->rx_urb_size = dev->hard_mtu;
+       dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
+-      
++
+       SET_NETDEV_DEV(net, &udev->dev);
+       status = register_netdev (net);
+       if (status)
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:20 2007
+Message-Id: <20070307170620.403121793@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:40 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dmitry Torokhov <dmitry.torokhov@gmail.com>,
+ Dmitry Torokhov <dtor@mail.ru>,
+ Thomas Renninger <trenn@suse.de>
+Subject: [patch 077/101] Backport of psmouse suspend/shutdown cleanups
+Content-Disposition: inline; filename=backport-of-psmouse-suspend-shutdown-cleanups.patch
+Content-Length: 2562
+Lines: 86
+
+From: Thomas Renninger <trenn@suse.de>
+
+This patch works back to 2.6.17 (earlier kernels seem to
+need up/down operations on mutex/semaphore).
+
+psmouse - properly reset mouse on shutdown/suspend
+
+Some people report that they need psmouse module unloaded
+for suspend to ram/disk to work properly. Let's make port
+cleanup behave the same way as driver unload.
+
+This fixes "bad state" problem on various HP laptops, such
+as nx7400.
+
+
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/input/mouse/psmouse-base.c |   28 ++++++++++++++++++++++++++++
+ drivers/input/mouse/psmouse.h      |    1 +
+ drivers/input/mouse/synaptics.c    |    1 +
+ 3 files changed, 30 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/input/mouse/psmouse-base.c
++++ linux-2.6.20.1/drivers/input/mouse/psmouse-base.c
+@@ -987,8 +987,36 @@ static void psmouse_resync(struct work_s
+ static void psmouse_cleanup(struct serio *serio)
+ {
+       struct psmouse *psmouse = serio_get_drvdata(serio);
++      struct psmouse *parent = NULL;
++
++      mutex_lock(&psmouse_mutex);
++
++      if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
++              parent = serio_get_drvdata(serio->parent);
++              psmouse_deactivate(parent);
++      }
++
++      psmouse_deactivate(psmouse);
++
++      if (psmouse->cleanup)
++              psmouse->cleanup(psmouse);
+       psmouse_reset(psmouse);
++
++/*
++ * Some boxes, such as HP nx7400, get terribly confused if mouse
++ * is not fully enabled before suspending/shutting down.
++ */
++      ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE);
++
++      if (parent) {
++              if (parent->pt_deactivate)
++                      parent->pt_deactivate(parent);
++
++              psmouse_activate(parent);
++      }
++
++      mutex_unlock(&psmouse_mutex);
+ }
+ /*
+--- linux-2.6.20.1.orig/drivers/input/mouse/psmouse.h
++++ linux-2.6.20.1/drivers/input/mouse/psmouse.h
+@@ -68,6 +68,7 @@ struct psmouse {
+       int (*reconnect)(struct psmouse *psmouse);
+       void (*disconnect)(struct psmouse *psmouse);
++      void (*cleanup)(struct psmouse *psmouse);
+       int (*poll)(struct psmouse *psmouse);
+       void (*pt_activate)(struct psmouse *psmouse);
+--- linux-2.6.20.1.orig/drivers/input/mouse/synaptics.c
++++ linux-2.6.20.1/drivers/input/mouse/synaptics.c
+@@ -652,6 +652,7 @@ int synaptics_init(struct psmouse *psmou
+       psmouse->set_rate = synaptics_set_rate;
+       psmouse->disconnect = synaptics_disconnect;
+       psmouse->reconnect = synaptics_reconnect;
++      psmouse->cleanup = synaptics_reset;
+       psmouse->pktsize = 6;
+       /* Synaptics can usually stay in sync without extra help */
+       psmouse->resync_time = 0;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:20 2007
+Message-Id: <20070307170620.534161596@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:41 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ David Howells <dhowells@redhat.com>,
+ Benjamin Herrenschmidt <benh@kernel.crashing.org>,
+ Paul Mackerras <paulus@samba.org>,
+ Andrew Morton <akpm@osdl.org>,
+ David Woodhouse <dwmw2@infradead.org>
+Subject: [patch 078/101] Revert "LOG2: Alter get_order() so that it can make use of ilog2() on a constant"
+Content-Disposition: inline; filename=revert-log2-alter-get_order-so-that-it-can-make-use-of-ilog2-on-a-constant.patch
+Content-Length: 2945
+Lines: 91
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+Revert "[PATCH] LOG2: Alter get_order() so that it can make use of ilog2() on a constant"
+
+This reverts commit 39d61db0edb34d60b83c5e0d62d0e906578cc707.
+
+The commit was buggy in multiple ways:
+ - the conversion to ilog2() was incorrect to begin with
+ - it tested the wrong #defines, so on all architectures but FRV you'd
+   never see the bug except for constant arguments.
+ - the new "get_order()" macro used its arguments multiple times, and
+   didn't even parenthesize them properly
+ - despite the comments, it was not true that you could use it for
+   constant initializers, since not all architectures even use the
+   generic page.h header file.
+
+All of the problems are individually fixable, but it all boils down to:
+better just revert it, and re-do it from scratch.
+
+Cc: David Howells <dhowells@redhat.com>
+Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Cc: Paul Mackerras <paulus@samba.org>
+Cc: Andrew Morton <akpm@osdl.org>
+Cc: David Woodhouse <dwmw2@infradead.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-generic/page.h |   38 ++++----------------------------------
+ 1 file changed, 4 insertions(+), 34 deletions(-)
+
+--- linux-2.6.20.1.orig/include/asm-generic/page.h
++++ linux-2.6.20.1/include/asm-generic/page.h
+@@ -4,51 +4,21 @@
+ #ifdef __KERNEL__
+ #ifndef __ASSEMBLY__
+-#include <linux/log2.h>
++#include <linux/compiler.h>
+-/*
+- * non-const pure 2^n version of get_order
+- * - the arch may override these in asm/bitops.h if they can be implemented
+- *   more efficiently than using the arch log2 routines
+- * - we use the non-const log2() instead if the arch has defined one suitable
+- */
+-#ifndef ARCH_HAS_GET_ORDER
+-static inline __attribute__((const))
+-int __get_order(unsigned long size, int page_shift)
++/* Pure 2^n version of get_order */
++static __inline__ __attribute_const__ int get_order(unsigned long size)
+ {
+-#if BITS_PER_LONG == 32 && defined(ARCH_HAS_ILOG2_U32)
+-      int order = __ilog2_u32(size) - page_shift;
+-      return order >= 0 ? order : 0;
+-#elif BITS_PER_LONG == 64 && defined(ARCH_HAS_ILOG2_U64)
+-      int order = __ilog2_u64(size) - page_shift;
+-      return order >= 0 ? order : 0;
+-#else
+       int order;
+-      size = (size - 1) >> (page_shift - 1);
++      size = (size - 1) >> (PAGE_SHIFT - 1);
+       order = -1;
+       do {
+               size >>= 1;
+               order++;
+       } while (size);
+       return order;
+-#endif
+ }
+-#endif
+-
+-/**
+- * get_order - calculate log2(pages) to hold a block of the specified size
+- * @n - size
+- *
+- * calculate allocation order based on the current page size
+- * - this can be used to initialise global variables from constant data
+- */
+-#define get_order(n)                                                  \
+-(                                                                     \
+-      __builtin_constant_p(n) ?                                       \
+-      ((n < (1UL << PAGE_SHIFT)) ? 0 : ilog2(n) - PAGE_SHIFT) :       \
+-      __get_order(n, PAGE_SHIFT)                                      \
+- )
+ #endif        /* __ASSEMBLY__ */
+ #endif        /* __KERNEL__ */
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:20 2007
+Message-Id: <20070307170620.661548421@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:42 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ neilb@suse.de,
+ kas@fi.muni.cz,
+ Trond.Myklebust@netapp.com
+Subject: [patch 079/101] RPM: fix double free in portmapper code
+Content-Disposition: inline; filename=rpm-fix-double-free-in-portmapper-code.patch
+Content-Length: 1267
+Lines: 49
+
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+rpc_run_task is guaranteed to always call ->rpc_release.
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Cc: Neil Brown <neilb@suse.de>
+Cc: Jan "Yenya" Kasprzak <kas@fi.muni.cz>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ net/sunrpc/pmap_clnt.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- linux-2.6.20.1.orig/net/sunrpc/pmap_clnt.c
++++ linux-2.6.20.1/net/sunrpc/pmap_clnt.c
+@@ -62,7 +62,10 @@ static inline void pmap_map_free(struct 
+ static void pmap_map_release(void *data)
+ {
+-      pmap_map_free(data);
++      struct portmap_args *map = data;
++
++      xprt_put(map->pm_xprt);
++      pmap_map_free(map);
+ }
+ static const struct rpc_call_ops pmap_getport_ops = {
+@@ -133,7 +136,7 @@ void rpc_getport(struct rpc_task *task)
+       status = -EIO;
+       child = rpc_run_task(pmap_clnt, RPC_TASK_ASYNC, &pmap_getport_ops, map);
+       if (IS_ERR(child))
+-              goto bailout;
++              goto bailout_nofree;
+       rpc_put_task(child);
+       task->tk_xprt->stat.bind_count++;
+@@ -222,7 +225,6 @@ static void pmap_getport_done(struct rpc
+                       child->tk_pid, status, map->pm_port);
+       pmap_wake_portmap_waiters(xprt, status);
+-      xprt_put(xprt);
+ }
+ /**
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:20 2007
+Message-Id: <20070307170620.790452477@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:43 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ neilb@suse.de,
+ kas@fi.muni.cz,
+ Trond.Myklebust@netapp.com,
+ Andrew Morton <akpm@osdl.org>
+Subject: [patch 080/101] NLM: Fix double free in __nlm_async_call
+Content-Disposition: inline; filename=nlm-fix-double-free-in-__nlm_async_call.patch
+Content-Length: 1813
+Lines: 60
+
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+rpc_call_async() will always call rpc_release_calldata(), so it is an
+error for __nlm_async_call() to do so as well.
+
+Addresses http://bugzilla.kernel.org/show_bug.cgi?id=7923
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Cc: Jan "Yenya" Kasprzak <kas@fi.muni.cz>
+Cc: Neil Brown <neilb@suse.de>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/lockd/clntproc.c |    9 +++------
+ fs/lockd/svclock.c  |    4 +---
+ 2 files changed, 4 insertions(+), 9 deletions(-)
+
+--- linux-2.6.20.1.orig/fs/lockd/clntproc.c
++++ linux-2.6.20.1/fs/lockd/clntproc.c
+@@ -361,7 +361,6 @@ static int __nlm_async_call(struct nlm_r
+ {
+       struct nlm_host *host = req->a_host;
+       struct rpc_clnt *clnt;
+-      int status = -ENOLCK;
+       dprintk("lockd: call procedure %d on %s (async)\n",
+                       (int)proc, host->h_name);
+@@ -373,12 +372,10 @@ static int __nlm_async_call(struct nlm_r
+       msg->rpc_proc = &clnt->cl_procinfo[proc];
+         /* bootstrap and kick off the async RPC call */
+-        status = rpc_call_async(clnt, msg, RPC_TASK_ASYNC, tk_ops, req);
+-      if (status == 0)
+-              return 0;
++        return rpc_call_async(clnt, msg, RPC_TASK_ASYNC, tk_ops, req);
+ out_err:
+-      nlm_release_call(req);
+-      return status;
++      tk_ops->rpc_release(req);
++      return -ENOLCK;
+ }
+ int nlm_async_call(struct nlm_rqst *req, u32 proc, const struct rpc_call_ops *tk_ops)
+--- linux-2.6.20.1.orig/fs/lockd/svclock.c
++++ linux-2.6.20.1/fs/lockd/svclock.c
+@@ -593,9 +593,7 @@ callback:
+       /* Call the client */
+       kref_get(&block->b_count);
+-      if (nlm_async_call(block->b_call, NLMPROC_GRANTED_MSG,
+-                                              &nlmsvc_grant_ops) < 0)
+-              nlmsvc_release_block(block);
++      nlm_async_call(block->b_call, NLMPROC_GRANTED_MSG, &nlmsvc_grant_ops);
+ }
+ /*
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:21 2007
+Message-Id: <20070307170620.923082146@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:44 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ tony.luck@intel.com
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux-ia64@vger.kernel.org,
+ jlan@sgi.com,
+ magnus@valinux.co.jp,
+ horms@verge.net.au
+Subject: [patch 081/101] kexec: Fix CONFIG_SMP=n compilation V2 (ia64)
+Content-Disposition: inline; filename=kexec-fix-config_smp-n-compilation-v2.patch
+Content-Length: 2544
+Lines: 87
+
+
+From: Magnus Damm <magnus@valinux.co.jp>
+
+Kexec support for 2.6.20 on ia64 does not build properly using a config
+made up by CONFIG_SMP=n and CONFIG_HOTPLUG_CPU=n:
+
+  CC      arch/ia64/kernel/machine_kexec.o
+arch/ia64/kernel/machine_kexec.c: In function `machine_shutdown':
+arch/ia64/kernel/machine_kexec.c:77: warning: implicit declaration of function `cpu_down'
+  AS      arch/ia64/kernel/relocate_kernel.o
+  CC      arch/ia64/kernel/crash.o
+arch/ia64/kernel/crash.c: In function `kdump_cpu_freeze':
+arch/ia64/kernel/crash.c:139: warning: implicit declaration of function `ia64_jump_to_sal'
+arch/ia64/kernel/crash.c:139: error: `sal_boot_rendez_state' undeclared (first use in this function)
+arch/ia64/kernel/crash.c:139: error: (Each undeclared identifier is reported only once
+arch/ia64/kernel/crash.c:139: error: for each function it appears in.)
+arch/ia64/kernel/crash.c: At top level:
+arch/ia64/kernel/crash.c:84: warning: 'kdump_wait_cpu_freeze' defined but not used
+make[1]: *** [arch/ia64/kernel/crash.o] Error 1
+make: *** [arch/ia64/kernel] Error 2
+
+Signed-off-by: Magnus Damm <magnus@valinux.co.jp>
+Acked-by: Simon Horman <horms@verge.net.au>
+Acked-by: Jay Lan <jlan@sgi.com>
+Cc: Tony Luck <tony.luck@intel.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/ia64/kernel/crash.c         |   11 +++++++----
+ arch/ia64/kernel/machine_kexec.c |    2 ++
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+--- linux-2.6.20.1.orig/arch/ia64/kernel/crash.c
++++ linux-2.6.20.1/arch/ia64/kernel/crash.c
+@@ -79,6 +79,7 @@ crash_save_this_cpu()
+       final_note(buf);
+ }
++#ifdef CONFIG_SMP
+ static int
+ kdump_wait_cpu_freeze(void)
+ {
+@@ -91,6 +92,7 @@ kdump_wait_cpu_freeze(void)
+       }
+       return 1;
+ }
++#endif
+ void
+ machine_crash_shutdown(struct pt_regs *pt)
+@@ -132,11 +134,12 @@ kdump_cpu_freeze(struct unw_frame_info *
+       atomic_inc(&kdump_cpu_freezed);
+       kdump_status[cpuid] = 1;
+       mb();
+-      if (cpuid == 0) {
+-              for (;;)
+-                      cpu_relax();
+-      } else
++#ifdef CONFIG_HOTPLUG_CPU
++      if (cpuid != 0)
+               ia64_jump_to_sal(&sal_boot_rendez_state[cpuid]);
++#endif
++      for (;;)
++              cpu_relax();
+ }
+ static int
+--- linux-2.6.20.1.orig/arch/ia64/kernel/machine_kexec.c
++++ linux-2.6.20.1/arch/ia64/kernel/machine_kexec.c
+@@ -70,12 +70,14 @@ void machine_kexec_cleanup(struct kimage
+ void machine_shutdown(void)
+ {
++#ifdef CONFIG_HOTPLUG_CPU
+       int cpu;
+       for_each_online_cpu(cpu) {
+               if (cpu != smp_processor_id())
+                       cpu_down(cpu);
+       }
++#endif
+       kexec_disable_iosapic();
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:21 2007
+Message-Id: <20070307170621.054565300@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:45 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ ak@suse.de
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ zwane@infradead.org
+Subject: [patch 082/101] Fix MTRR compat ioctl
+Content-Disposition: inline; filename=fix-mtrr-compat-ioctl.patch
+Content-Length: 3099
+Lines: 98
+
+
+From: Zwane Mwaikambo <zwane@infradead.org>
+
+The MTRR compat code wasn't calling the lowlevel MTRR setup due to a switch
+block not handling the compat case.
+
+Before:
+(WW) I810(0): Failed to set up write-combining range (0xd0000000,0x10000000)
+
+After:
+reg00: base=0x00000000 (   0MB), size=1024MB: write-back, count=1
+reg01: base=0x40000000 (1024MB), size= 512MB: write-back, count=1
+reg02: base=0x5f700000 (1527MB), size=   1MB: uncachable, count=1
+reg03: base=0x5f800000 (1528MB), size=   8MB: uncachable, count=1
+reg04: base=0xd0000000 (3328MB), size= 256MB: write-combining, count=1
+
+Signed-off-by: Zwane Mwaikambo <zwane@infradead.org>
+Cc: Andi Kleen <ak@suse.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/i386/kernel/cpu/mtrr/if.c |   33 +++++++++++++++++++++------------
+ 1 file changed, 21 insertions(+), 12 deletions(-)
+
+--- linux-2.6.20.1.orig/arch/i386/kernel/cpu/mtrr/if.c
++++ linux-2.6.20.1/arch/i386/kernel/cpu/mtrr/if.c
+@@ -158,8 +158,9 @@ mtrr_ioctl(struct file *file, unsigned i
+       struct mtrr_sentry sentry;
+       struct mtrr_gentry gentry;
+       void __user *arg = (void __user *) __arg;
++      unsigned int compat_cmd = cmd;
+-      switch (cmd) {
++      switch (compat_cmd) {
+       case MTRRIOC_ADD_ENTRY:
+       case MTRRIOC_SET_ENTRY:
+       case MTRRIOC_DEL_ENTRY:
+@@ -177,14 +178,20 @@ mtrr_ioctl(struct file *file, unsigned i
+                       return -EFAULT;
+               break;
+ #ifdef CONFIG_COMPAT
+-      case MTRRIOC32_ADD_ENTRY:
+-      case MTRRIOC32_SET_ENTRY:
+-      case MTRRIOC32_DEL_ENTRY:
+-      case MTRRIOC32_KILL_ENTRY:
+-      case MTRRIOC32_ADD_PAGE_ENTRY:
+-      case MTRRIOC32_SET_PAGE_ENTRY:
+-      case MTRRIOC32_DEL_PAGE_ENTRY:
+-      case MTRRIOC32_KILL_PAGE_ENTRY: {
++#define MTRR_COMPAT_OP(op, type)\
++      case MTRRIOC32_##op:    \
++      cmd = MTRRIOC_##op;     \
++      goto compat_get_##type
++
++      MTRR_COMPAT_OP(ADD_ENTRY, sentry);
++      MTRR_COMPAT_OP(SET_ENTRY, sentry);
++      MTRR_COMPAT_OP(DEL_ENTRY, sentry);
++      MTRR_COMPAT_OP(KILL_ENTRY, sentry);
++      MTRR_COMPAT_OP(ADD_PAGE_ENTRY, sentry);
++      MTRR_COMPAT_OP(SET_PAGE_ENTRY, sentry);
++      MTRR_COMPAT_OP(DEL_PAGE_ENTRY, sentry);
++      MTRR_COMPAT_OP(KILL_PAGE_ENTRY, sentry);
++compat_get_sentry: {
+               struct mtrr_sentry32 __user *s32 = (struct mtrr_sentry32 __user *)__arg;
+               err = get_user(sentry.base, &s32->base);
+               err |= get_user(sentry.size, &s32->size);
+@@ -193,8 +200,9 @@ mtrr_ioctl(struct file *file, unsigned i
+                       return err;
+               break;
+       }
+-      case MTRRIOC32_GET_ENTRY:
+-      case MTRRIOC32_GET_PAGE_ENTRY: {
++      MTRR_COMPAT_OP(GET_ENTRY, gentry);
++      MTRR_COMPAT_OP(GET_PAGE_ENTRY, gentry);
++compat_get_gentry: {
+               struct mtrr_gentry32 __user *g32 = (struct mtrr_gentry32 __user *)__arg;
+               err = get_user(gentry.regnum, &g32->regnum);
+               err |= get_user(gentry.base, &g32->base);
+@@ -204,6 +212,7 @@ mtrr_ioctl(struct file *file, unsigned i
+                       return err;
+               break;
+       }
++#undef MTRR_COMPAT_OP
+ #endif
+       }
+@@ -287,7 +296,7 @@ mtrr_ioctl(struct file *file, unsigned i
+       if (err)
+               return err;
+-      switch(cmd) {
++      switch(compat_cmd) {
+       case MTRRIOC_GET_ENTRY:
+       case MTRRIOC_GET_PAGE_ENTRY:
+               if (copy_to_user(arg, &gentry, sizeof gentry))
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:21 2007
+Message-Id: <20070307170621.183753192@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:46 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ dushistov@mail.ru
+Subject: [patch 083/101] ufs: restore back support of openstep
+Content-Disposition: inline; filename=ufs-restore-back-support-of-openstep.patch
+Content-Length: 6248
+Lines: 170
+
+
+From: Evgeniy Dushistov <dushistov@mail.ru>
+
+This is a fix of regression, which triggered by ~2.6.16.
+
+Patch with name ufs-directory-and-page-cache-from-blocks-to-pages.patch: in
+additional to conversation from block to page cache mechanism added new
+checks of directory integrity, one of them that directory entry do not
+across directory chunks.
+
+But some kinds of UFS: OpenStep UFS and Apple UFS (looks like these are the
+same filesystems) have different directory chunk size, then common
+UFSes(BSD and Solaris UFS).
+
+So this patch adds ability to works with variable size of directory chunks,
+and set it for ufstype=openstep to right size.
+
+Tested on darwin ufs.
+
+Signed-off-by: Evgeniy Dushistov <dushistov@mail.ru>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ufs/dir.c           |   21 ++++++++++++---------
+ fs/ufs/super.c         |    5 ++++-
+ include/linux/ufs_fs.h |    1 +
+ 3 files changed, 17 insertions(+), 10 deletions(-)
+
+--- linux-2.6.20.1.orig/fs/ufs/dir.c
++++ linux-2.6.20.1/fs/ufs/dir.c
+@@ -106,12 +106,13 @@ static void ufs_check_page(struct page *
+       char *kaddr = page_address(page);
+       unsigned offs, rec_len;
+       unsigned limit = PAGE_CACHE_SIZE;
++      const unsigned chunk_mask = UFS_SB(sb)->s_uspi->s_dirblksize - 1;
+       struct ufs_dir_entry *p;
+       char *error;
+       if ((dir->i_size >> PAGE_CACHE_SHIFT) == page->index) {
+               limit = dir->i_size & ~PAGE_CACHE_MASK;
+-              if (limit & (UFS_SECTOR_SIZE - 1))
++              if (limit & chunk_mask)
+                       goto Ebadsize;
+               if (!limit)
+                       goto out;
+@@ -126,7 +127,7 @@ static void ufs_check_page(struct page *
+                       goto Ealign;
+               if (rec_len < UFS_DIR_REC_LEN(ufs_get_de_namlen(sb, p)))
+                       goto Enamelen;
+-              if (((offs + rec_len - 1) ^ offs) & ~(UFS_SECTOR_SIZE-1))
++              if (((offs + rec_len - 1) ^ offs) & ~chunk_mask)
+                       goto Espan;
+               if (fs32_to_cpu(sb, p->d_ino) > (UFS_SB(sb)->s_uspi->s_ipg *
+                                                 UFS_SB(sb)->s_uspi->s_ncg))
+@@ -310,6 +311,7 @@ int ufs_add_link(struct dentry *dentry, 
+       int namelen = dentry->d_name.len;
+       struct super_block *sb = dir->i_sb;
+       unsigned reclen = UFS_DIR_REC_LEN(namelen);
++      const unsigned int chunk_size = UFS_SB(sb)->s_uspi->s_dirblksize;
+       unsigned short rec_len, name_len;
+       struct page *page = NULL;
+       struct ufs_dir_entry *de;
+@@ -342,8 +344,8 @@ int ufs_add_link(struct dentry *dentry, 
+                       if ((char *)de == dir_end) {
+                               /* We hit i_size */
+                               name_len = 0;
+-                              rec_len = UFS_SECTOR_SIZE;
+-                              de->d_reclen = cpu_to_fs16(sb, UFS_SECTOR_SIZE);
++                              rec_len = chunk_size;
++                              de->d_reclen = cpu_to_fs16(sb, chunk_size);
+                               de->d_ino = 0;
+                               goto got_it;
+                       }
+@@ -431,7 +433,7 @@ ufs_readdir(struct file *filp, void *dir
+       unsigned int offset = pos & ~PAGE_CACHE_MASK;
+       unsigned long n = pos >> PAGE_CACHE_SHIFT;
+       unsigned long npages = ufs_dir_pages(inode);
+-      unsigned chunk_mask = ~(UFS_SECTOR_SIZE - 1);
++      unsigned chunk_mask = ~(UFS_SB(sb)->s_uspi->s_dirblksize - 1);
+       int need_revalidate = filp->f_version != inode->i_version;
+       unsigned flags = UFS_SB(sb)->s_flags;
+@@ -511,7 +513,7 @@ int ufs_delete_entry(struct inode *inode
+       struct super_block *sb = inode->i_sb;
+       struct address_space *mapping = page->mapping;
+       char *kaddr = page_address(page);
+-      unsigned from = ((char*)dir - kaddr) & ~(UFS_SECTOR_SIZE - 1);
++      unsigned from = ((char*)dir - kaddr) & ~(UFS_SB(sb)->s_uspi->s_dirblksize - 1);
+       unsigned to = ((char*)dir - kaddr) + fs16_to_cpu(sb, dir->d_reclen);
+       struct ufs_dir_entry *pde = NULL;
+       struct ufs_dir_entry *de = (struct ufs_dir_entry *) (kaddr + from);
+@@ -556,6 +558,7 @@ int ufs_make_empty(struct inode * inode,
+       struct super_block * sb = dir->i_sb;
+       struct address_space *mapping = inode->i_mapping;
+       struct page *page = grab_cache_page(mapping, 0);
++      const unsigned int chunk_size = UFS_SB(sb)->s_uspi->s_dirblksize;
+       struct ufs_dir_entry * de;
+       char *base;
+       int err;
+@@ -563,7 +566,7 @@ int ufs_make_empty(struct inode * inode,
+       if (!page)
+               return -ENOMEM;
+       kmap(page);
+-      err = mapping->a_ops->prepare_write(NULL, page, 0, UFS_SECTOR_SIZE);
++      err = mapping->a_ops->prepare_write(NULL, page, 0, chunk_size);
+       if (err) {
+               unlock_page(page);
+               goto fail;
+@@ -584,11 +587,11 @@ int ufs_make_empty(struct inode * inode,
+               ((char *)de + fs16_to_cpu(sb, de->d_reclen));
+       de->d_ino = cpu_to_fs32(sb, dir->i_ino);
+       ufs_set_de_type(sb, de, dir->i_mode);
+-      de->d_reclen = cpu_to_fs16(sb, UFS_SECTOR_SIZE - UFS_DIR_REC_LEN(1));
++      de->d_reclen = cpu_to_fs16(sb, chunk_size - UFS_DIR_REC_LEN(1));
+       ufs_set_de_namlen(sb, de, 2);
+       strcpy (de->d_name, "..");
+-      err = ufs_commit_chunk(page, 0, UFS_SECTOR_SIZE);
++      err = ufs_commit_chunk(page, 0, chunk_size);
+ fail:
+       kunmap(page);
+       page_cache_release(page);
+--- linux-2.6.20.1.orig/fs/ufs/super.c
++++ linux-2.6.20.1/fs/ufs/super.c
+@@ -649,7 +649,7 @@ static int ufs_fill_super(struct super_b
+               kmalloc (sizeof(struct ufs_sb_private_info), GFP_KERNEL);
+       if (!uspi)
+               goto failed;
+-
++      uspi->s_dirblksize = UFS_SECTOR_SIZE;
+       super_block_offset=UFS_SBLOCK;
+       /* Keep 2Gig file limit. Some UFS variants need to override 
+@@ -718,6 +718,7 @@ static int ufs_fill_super(struct super_b
+               break;
+       
+       case UFS_MOUNT_UFSTYPE_NEXTSTEP:
++              /*TODO: check may be we need set special dir block size?*/
+               UFSD("ufstype=nextstep\n");
+               uspi->s_fsize = block_size = 1024;
+               uspi->s_fmask = ~(1024 - 1);
+@@ -733,6 +734,7 @@ static int ufs_fill_super(struct super_b
+               break;
+       
+       case UFS_MOUNT_UFSTYPE_NEXTSTEP_CD:
++              /*TODO: check may be we need set special dir block size?*/
+               UFSD("ufstype=nextstep-cd\n");
+               uspi->s_fsize = block_size = 2048;
+               uspi->s_fmask = ~(2048 - 1);
+@@ -754,6 +756,7 @@ static int ufs_fill_super(struct super_b
+               uspi->s_fshift = 10;
+               uspi->s_sbsize = super_block_size = 2048;
+               uspi->s_sbbase = 0;
++              uspi->s_dirblksize = 1024;
+               flags |= UFS_DE_44BSD | UFS_UID_44BSD | UFS_ST_44BSD | UFS_CG_44BSD;
+               if (!(sb->s_flags & MS_RDONLY)) {
+                       if (!silent)
+--- linux-2.6.20.1.orig/include/linux/ufs_fs.h
++++ linux-2.6.20.1/include/linux/ufs_fs.h
+@@ -789,6 +789,7 @@ struct ufs_sb_private_info {
+       __u32   s_maxsymlinklen;/* upper limit on fast symlinks' size */
+       __s32   fs_magic;       /* filesystem magic */
++      unsigned int s_dirblksize;
+ };
+ /*
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:21 2007
+Message-Id: <20070307170621.310911775@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:47 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ ericvh@gmail.com,
+ bunk@stusta.de
+Subject: [patch 084/101] v9fs_vfs_mkdir(): fix a double free
+Content-Disposition: inline; filename=v9fs_vfs_mkdir-fix-a-double-free.patch
+Content-Length: 925
+Lines: 40
+
+
+From: Adrian Bunk <bunk@stusta.de>
+
+Fix a double free of "dfid" introduced by commit
+da977b2c7eb4d6312f063a7b486f2aad99809710 and spotted by the Coverity
+checker.
+
+Signed-off-by: Adrian Bunk <bunk@stusta.de>
+Cc: Eric Van Hensbergen <ericvh@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+
+ fs/9p/vfs_inode.c |    7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+--- linux-2.6.20.1.orig/fs/9p/vfs_inode.c
++++ linux-2.6.20.1/fs/9p/vfs_inode.c
+@@ -585,17 +585,14 @@ static int v9fs_vfs_mkdir(struct inode *
+       if (IS_ERR(inode)) {
+               err = PTR_ERR(inode);
+               inode = NULL;
+-              goto clean_up_fids;
++              v9fs_fid_destroy(vfid);
++              goto error;
+       }
+       dentry->d_op = &v9fs_dentry_operations;
+       d_instantiate(dentry, inode);
+       return 0;
+-clean_up_fids:
+-      if (vfid)
+-              v9fs_fid_destroy(vfid);
+-
+ clean_up_dfid:
+       v9fs_fid_clunk(v9ses, dfid);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:21 2007
+Message-Id: <20070307170621.437614156@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:48 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ kernel@nn7.de,
+ benh@kernel.crashing.org,
+ paulus@samba.org,
+ dtor@mail.ru
+Subject: [patch 085/101] enable mouse button 2+3 emulation for x86 macs
+Content-Disposition: inline; filename=enable-mouse-button-2-3-emulation-for-x86-macs.patch
+Content-Length: 1359
+Lines: 43
+
+
+From: Soeren Sonnenburg <kernel@nn7.de>
+
+As macbook/macbook pro's also have to live with a single mouse button the
+following patch just enables the Macintosh device drivers menu in Kconfig +
+adds the macintosh dir to the obj-* to make macbook* users happy (who use
+exactly that since months....
+
+Signed-off-by: Soeren Sonnenburg <kernel@nn7.de>
+Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Cc: Paul Mackerras <paulus@samba.org>
+Cc: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/Makefile          |    2 +-
+ drivers/macintosh/Kconfig |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/Makefile
++++ linux-2.6.20.1/drivers/Makefile
+@@ -30,7 +30,7 @@ obj-$(CONFIG_PARPORT)                += parport/
+ obj-y                         += base/ block/ misc/ mfd/ net/ media/
+ obj-$(CONFIG_NUBUS)           += nubus/
+ obj-$(CONFIG_ATM)             += atm/
+-obj-$(CONFIG_PPC_PMAC)                += macintosh/
++obj-y                         += macintosh/
+ obj-$(CONFIG_IDE)             += ide/
+ obj-$(CONFIG_FC4)             += fc4/
+ obj-$(CONFIG_SCSI)            += scsi/
+--- linux-2.6.20.1.orig/drivers/macintosh/Kconfig
++++ linux-2.6.20.1/drivers/macintosh/Kconfig
+@@ -1,6 +1,6 @@
+ menu "Macintosh device drivers"
+-      depends on PPC || MAC
++      depends on PPC || MAC || X86
+ config ADB
+       bool "Apple Desktop Bus (ADB) support"
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:21 2007
+Message-Id: <20070307170621.566654263@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:49 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ nish.aravamudan@gmail.com,
+ wli@holomorphy.com,
+ kenchen@google.com,
+ agl@us.ibm.com,
+ hugh@veritas.com,
+ david@gibson.dropbear.id.au,
+ William Irwin <bill.irwin@oracle.com>
+Subject: [patch 086/101] hugetlb: preserve hugetlb pte dirty state
+Content-Disposition: inline; filename=hugetlb-preserve-hugetlb-pte-dirty-state.patch
+Content-Length: 1964
+Lines: 62
+
+
+From: "Ken Chen" <kenchen@google.com>
+
+__unmap_hugepage_range() is buggy that it does not preserve dirty state of
+huge_pte when unmapping hugepage range.  It causes data corruption in the
+event of dop_caches being used by sys admin.  For example, an application
+creates a hugetlb file, modify pages, then unmap it.  While leaving the
+hugetlb file alive, comes along sys admin doing a "echo 3 >
+/proc/sys/vm/drop_caches".
+
+drop_pagecache_sb() will happily free all pages that aren't marked dirty if
+there are no active mapping.  Later when application remaps the hugetlb
+file back and all data are gone, triggering catastrophic flip over on
+application.
+
+Not only that, the internal resv_huge_pages count will also get all messed
+up.  Fix it up by marking page dirty appropriately.
+
+Signed-off-by: Ken Chen <kenchen@google.com>
+Cc: "Nish Aravamudan" <nish.aravamudan@gmail.com>
+Cc: Adam Litke <agl@us.ibm.com>
+Cc: David Gibson <david@gibson.dropbear.id.au>
+Acked-by: William Irwin <bill.irwin@oracle.com>
+Cc: Hugh Dickins <hugh@veritas.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/hugetlbfs/inode.c |    5 ++++-
+ mm/hugetlb.c         |    2 ++
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/fs/hugetlbfs/inode.c
++++ linux-2.6.20.1/fs/hugetlbfs/inode.c
+@@ -449,10 +449,13 @@ static int hugetlbfs_symlink(struct inod
+ }
+ /*
+- * For direct-IO reads into hugetlb pages
++ * mark the head page dirty
+  */
+ static int hugetlbfs_set_page_dirty(struct page *page)
+ {
++      struct page *head = (struct page *)page_private(page);
++
++      SetPageDirty(head);
+       return 0;
+ }
+--- linux-2.6.20.1.orig/mm/hugetlb.c
++++ linux-2.6.20.1/mm/hugetlb.c
+@@ -389,6 +389,8 @@ void __unmap_hugepage_range(struct vm_ar
+                       continue;
+               page = pte_page(pte);
++              if (pte_dirty(pte))
++                      set_page_dirty(page);
+               list_add(&page->lru, &page_list);
+       }
+       spin_unlock(&mm->page_table_lock);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:21 2007
+Message-Id: <20070307170621.695130332@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:50 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ takata@linux-m32r.org
+Subject: [patch 087/101] m32r: build fix for processors without ISA_DSP_LEVEL2
+Content-Disposition: inline; filename=m32r-build-fix-for-processors-without-isa_dsp_level2.patch
+Content-Length: 2057
+Lines: 74
+
+
+From: Hirokazu Takata <takata@linux-m32r.org>
+
+Additional fixes for processors without ISA_DSP_LEVEL2.  sigcontext_t does not
+have dummy_acc1h, dummy_acc1l members any longer.
+
+Signed-off-by: Hirokazu Takata <takata@linux-m32r.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/m32r/kernel/process.c |    2 +-
+ arch/m32r/kernel/signal.c  |   26 ++++----------------------
+ 2 files changed, 5 insertions(+), 23 deletions(-)
+
+--- linux-2.6.20.1.orig/arch/m32r/kernel/process.c
++++ linux-2.6.20.1/arch/m32r/kernel/process.c
+@@ -174,7 +174,7 @@ void show_regs(struct pt_regs * regs)
+         regs->acc1h, regs->acc1l);
+ #elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
+       printk("ACCH[%08lx]:ACCL[%08lx]\n", \
+-        regs->acch, regs->accl);
++        regs->acc0h, regs->acc0l);
+ #else
+ #error unknown isa configuration
+ #endif
+--- linux-2.6.20.1.orig/arch/m32r/kernel/signal.c
++++ linux-2.6.20.1/arch/m32r/kernel/signal.c
+@@ -109,19 +109,10 @@ restore_sigcontext(struct pt_regs *regs,
+       COPY(r10);
+       COPY(r11);
+       COPY(r12);
+-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2)
+       COPY(acc0h);
+       COPY(acc0l);
+-      COPY(acc1h);
+-      COPY(acc1l);
+-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
+-      COPY(acch);
+-      COPY(accl);
+-      COPY(dummy_acc1h);
+-      COPY(dummy_acc1l);
+-#else
+-#error unknown isa configuration
+-#endif
++      COPY(acc1h);            /* ISA_DSP_LEVEL2 only */
++      COPY(acc1l);            /* ISA_DSP_LEVEL2 only */
+       COPY(psw);
+       COPY(bpc);
+       COPY(bbpsw);
+@@ -196,19 +187,10 @@ setup_sigcontext(struct sigcontext __use
+       COPY(r10);
+       COPY(r11);
+       COPY(r12);
+-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2)
+       COPY(acc0h);
+       COPY(acc0l);
+-      COPY(acc1h);
+-      COPY(acc1l);
+-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
+-      COPY(acch);
+-      COPY(accl);
+-      COPY(dummy_acc1h);
+-      COPY(dummy_acc1l);
+-#else
+-#error unknown isa configuration
+-#endif
++      COPY(acc1h);            /* ISA_DSP_LEVEL2 only */
++      COPY(acc1l);            /* ISA_DSP_LEVEL2 only */
+       COPY(psw);
+       COPY(bpc);
+       COPY(bbpsw);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:21 2007
+Message-Id: <20070307170621.823076167@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:51 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ mathieu.desnoyers@polymtl.ca,
+ zippel@linux-m68k.org,
+ tglx@linutronix.de,
+ mingo@elte.hu
+Subject: [patch 088/101] kernel/time/clocksource.c needs struct task_struct on m68k
+Content-Disposition: inline; filename=kernel-time-clocksource.c-needs-struct-task_struct-on-m68k.patch
+Content-Length: 1265
+Lines: 35
+
+
+From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+
+kernel/time/clocksource.c needs struct task_struct on m68k.
+
+Because it uses spin_unlock_irq(), which, on m68k, uses hardirq_count(), which
+uses preempt_count(), which needs to dereference struct task_struct, we
+have to include sched.h. Because it would cause a loop inclusion, we
+cannot include sched.h in any other of asm-m68k/system.h,
+linux/thread_info.h, linux/hardirq.h, which leaves this ugly include in
+a C file as the only simple solution.
+
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+Cc: Ingo Molnar <mingo@elte.hu>
+Cc: Roman Zippel <zippel@linux-m68k.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/time/clocksource.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.20.1.orig/kernel/time/clocksource.c
++++ linux-2.6.20.1/kernel/time/clocksource.c
+@@ -28,6 +28,7 @@
+ #include <linux/sysdev.h>
+ #include <linux/init.h>
+ #include <linux/module.h>
++#include <linux/sched.h> /* for spin_unlock_irq() using preempt_count() m68k */
+ /* XXX - Would like a better way for initializing curr_clocksource */
+ extern struct clocksource clocksource_jiffies;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:22 2007
+Message-Id: <20070307170621.954689785@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:52 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ npiggin@suse.de,
+ cmm@us.ibm.com
+Subject: [patch 089/101] buffer: memorder fix
+Content-Disposition: inline; filename=buffer-memorder-fix.patch
+Content-Length: 2273
+Lines: 61
+
+
+From: Nick Piggin <npiggin@suse.de>
+
+unlock_buffer(), like unlock_page(), must not clear the lock without
+ensuring that the critical section is closed.
+
+
+Mingming later sent the same patch, saying:
+
+We are running SDET benchmark and saw double free issue for ext3 extended
+attributes block, which complains the same xattr block already being freed (in
+ext3_xattr_release_block()).  The problem could also been triggered by
+multiple threads loop untar/rm a kernel tree.
+
+The race is caused by missing a memory barrier at unlock_buffer() before the
+lock bit being cleared, resulting in possible concurrent h_refcounter update. 
+That causes a reference counter leak, then later leads to the double free that
+we have seen.
+
+Inside unlock_buffer(), there is a memory barrier is placed *after* the lock
+bit is being cleared, however, there is no memory barrier *before* the bit is
+cleared.  On some arch the h_refcount update instruction and the clear bit
+instruction could be reordered, thus leave the critical section re-entered.
+
+The race is like this: For example, if the h_refcount is initialized as 1,
+
+cpu 0:                                   cpu1
+--------------------------------------   -----------------------------------
+lock_buffer() /* test_and_set_bit */
+clear_buffer_locked(bh);             
+                                        lock_buffer() /* test_and_set_bit */
+h_refcount = h_refcount+1; /* = 2*/     h_refcount = h_refcount + 1; /*= 2 */
+                                        clear_buffer_locked(bh);
+....                                    ......
+
+
+We lost a h_refcount here.  We need a memory barrier before the buffer head
+lock bit being cleared to force the order of the two writes.  Please apply.
+
+
+Signed-off-by: Nick Piggin <npiggin@suse.de>
+Cc: Mingming Cao <cmm@us.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/buffer.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.20.1.orig/fs/buffer.c
++++ linux-2.6.20.1/fs/buffer.c
+@@ -78,6 +78,7 @@ EXPORT_SYMBOL(__lock_buffer);
+ void fastcall unlock_buffer(struct buffer_head *bh)
+ {
++      smp_mb__before_clear_bit();
+       clear_buffer_locked(bh);
+       smp_mb__after_clear_bit();
+       wake_up_bit(&bh->b_state, BH_Lock);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:22 2007
+Message-Id: <20070307170622.080652128@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:53 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ jirislaby@gmail.com
+Subject: [patch 090/101] Char: specialix, isr have 2 params
+Content-Disposition: inline; filename=char-specialix-isr-have-2-params.patch
+Content-Length: 833
+Lines: 29
+
+
+From: Jiri Slaby <jirislaby@gmail.com>
+
+specialix, isr have 2 params
+
+pt_regs are no longer the third parameter of isr, call sx_interrupt without
+it.
+
+Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+
+ drivers/char/specialix.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/char/specialix.c
++++ linux-2.6.20.1/drivers/char/specialix.c
+@@ -459,7 +459,7 @@ void missed_irq (unsigned long data)
+       if (irq) {
+               printk (KERN_INFO "Missed interrupt... Calling int from timer. \n");
+               sx_interrupt (((struct specialix_board *)data)->irq,
+-                            (void*)data, NULL);
++                              (void*)data);
+       }
+       missed_irq_timer.expires = jiffies + sx_poll;
+       add_timer (&missed_irq_timer);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:22 2007
+Message-Id: <20070307170622.234811901@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:54 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ schwidefsky@de.ibm.com,
+ heiko.carstens@de.ibm.com,
+ mingo@elte.hu
+Subject: [patch 091/101] lockdep: forward declare struct task_struct
+Content-Disposition: inline; filename=lockdep-forward-declare-struct-task_struct.patch
+Content-Length: 947
+Lines: 35
+
+
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+
+3117df0453828bd045c16244e6f50e5714667a8a causes this:
+
+In file included from arch/s390/kernel/early.c:13:
+include/linux/lockdep.h:300: warning:
+               "struct task_struct" declared inside parameter list
+include/linux/lockdep.h:300:
+               warning: its scope is only this definition or
+               declaration, which is probably not what you want
+
+Acked-by: Ingo Molnar <mingo@elte.hu>
+Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/lockdep.h |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- linux-2.6.20.1.orig/include/linux/lockdep.h
++++ linux-2.6.20.1/include/linux/lockdep.h
+@@ -8,6 +8,8 @@
+ #ifndef __LINUX_LOCKDEP_H
+ #define __LINUX_LOCKDEP_H
++struct task_struct;
++
+ #ifdef CONFIG_LOCKDEP
+ #include <linux/linkage.h>
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:22 2007
+Message-Id: <20070307170622.345002132@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:55 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ caglar@pardus.org.tr,
+ mingo@elte.hu,
+ avi@qumranet.com
+Subject: [patch 092/101] kvm: Fix asm constraint for lldt instruction
+Content-Disposition: inline; filename=kvm-fix-asm-constraint-for-lldt-instruction.patch
+Content-Length: 700
+Lines: 28
+
+
+From: S.Caglar Onur <caglar@pardus.org.tr>
+
+lldt does not accept immediate operands, which "g" allows.
+
+Signed-off-by: S.Caglar Onur <caglar@pardus.org.tr>
+Signed-off-by: Avi Kivity <avi@qumranet.com>
+Cc: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/kvm/kvm.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/kvm/kvm.h
++++ linux-2.6.20.1/drivers/kvm/kvm.h
+@@ -558,7 +558,7 @@ static inline void load_gs(u16 sel)
+ #ifndef load_ldt
+ static inline void load_ldt(u16 sel)
+ {
+-      asm ("lldt %0" : : "g"(sel));
++      asm ("lldt %0" : : "rm"(sel));
+ }
+ #endif
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:22 2007
+Message-Id: <20070307170622.476161502@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:56 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ greg@kroah.com
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ randy.dunlap@oracle.com
+Subject: [patch 093/101] ueagle-atm.c needs sched.h
+Content-Disposition: inline; filename=ueagle-atm.c-needs-sched.h.patch
+Content-Length: 668
+Lines: 26
+
+
+From: Randy Dunlap <randy.dunlap@oracle.com>
+
+Driver needs sched.h for try_to_freeze().
+
+Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
+Cc: Greg KH <greg@kroah.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/atm/ueagle-atm.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- linux-2.6.20.1.orig/drivers/usb/atm/ueagle-atm.c
++++ linux-2.6.20.1/drivers/usb/atm/ueagle-atm.c
+@@ -61,6 +61,7 @@
+ #include <linux/usb.h>
+ #include <linux/firmware.h>
+ #include <linux/ctype.h>
++#include <linux/sched.h>
+ #include <linux/kthread.h>
+ #include <linux/version.h>
+ #include <linux/mutex.h>
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:22 2007
+Message-Id: <20070307170622.606035793@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:57 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ sam@ravnborg.org,
+ mingo@elte.hu
+Subject: [patch 094/101] fix section mismatch warning in lockdep
+Content-Disposition: inline; filename=fix-section-mismatch-warning-in-lockdep.patch
+Content-Length: 1334
+Lines: 38
+
+
+From: Sam Ravnborg <sam@ravnborg.org>
+
+lockdep_init() is marked __init but used in several places
+outside __init code. This causes following warnings:
+$ scripts/mod/modpost kernel/lockdep.o
+WARNING: kernel/built-in.o - Section mismatch: reference to .init.text:lockdep_init from .text.lockdep_init_map after 'lockdep_init_map' (at offset 0x105)
+WARNING: kernel/built-in.o - Section mismatch: reference to .init.text:lockdep_init from .text.lockdep_reset_lock after 'lockdep_reset_lock' (at offset 0x35)
+WARNING: kernel/built-in.o - Section mismatch: reference to .init.text:lockdep_init from .text.__lock_acquire after '__lock_acquire' (at offset 0xb2)
+
+The warnings are less obviously due to heavy inlining by gcc - this is not
+altered.
+
+Fix the section mismatch warnings by removing the __init marking, which
+seems obviously wrong.
+
+Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
+Acked-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/lockdep.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/kernel/lockdep.c
++++ linux-2.6.20.1/kernel/lockdep.c
+@@ -2577,7 +2577,7 @@ out_restore:
+       raw_local_irq_restore(flags);
+ }
+-void __init lockdep_init(void)
++void lockdep_init(void)
+ {
+       int i;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:22 2007
+Message-Id: <20070307170622.734014034@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:58 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ torvalds@linux-foundation.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ nickpiggin@yahoo.com.au,
+ galak@kernel.crashing.org,
+ zaitcev@redhat.com,
+ hirofumi@mail.parknet.co.jp
+Subject: [patch 095/101] throttle_vm_writeout(): dont loop on GFP_NOFS and GFP_NOIO allocations
+Content-Disposition: inline; filename=throttle_vm_writeout-don-t-loop-on-gfp_nofs-and-gfp_noio-allocations.patch
+Content-Length: 2393
+Lines: 79
+
+
+From: Andrew Morton <akpm@linux-foundation.org>
+
+throttle_vm_writeout() is designed to wait for the dirty levels to subside. 
+But if the caller holds IO or FS locks, we might be holding up that writeout.
+
+So change it to take a single nap to give other devices a chance to clean some
+memory, then return.
+
+Cc: Nick Piggin <nickpiggin@yahoo.com.au>
+Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
+Cc: Kumar Gala <galak@kernel.crashing.org>
+Cc: Pete Zaitcev <zaitcev@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/writeback.h |    2 +-
+ mm/page-writeback.c       |   13 +++++++++++--
+ mm/vmscan.c               |    2 +-
+ 3 files changed, 13 insertions(+), 4 deletions(-)
+
+--- linux-2.6.20.1.orig/include/linux/writeback.h
++++ linux-2.6.20.1/include/linux/writeback.h
+@@ -84,7 +84,7 @@ static inline void wait_on_inode(struct 
+ int wakeup_pdflush(long nr_pages);
+ void laptop_io_completion(void);
+ void laptop_sync_completion(void);
+-void throttle_vm_writeout(void);
++void throttle_vm_writeout(gfp_t gfp_mask);
+ /* These are exported to sysctl. */
+ extern int dirty_background_ratio;
+--- linux-2.6.20.1.orig/mm/page-writeback.c
++++ linux-2.6.20.1/mm/page-writeback.c
+@@ -296,11 +296,21 @@ void balance_dirty_pages_ratelimited_nr(
+ }
+ EXPORT_SYMBOL(balance_dirty_pages_ratelimited_nr);
+-void throttle_vm_writeout(void)
++void throttle_vm_writeout(gfp_t gfp_mask)
+ {
+       long background_thresh;
+       long dirty_thresh;
++      if ((gfp_mask & (__GFP_FS|__GFP_IO)) != (__GFP_FS|__GFP_IO)) {
++              /*
++               * The caller might hold locks which can prevent IO completion
++               * or progress in the filesystem.  So we cannot just sit here
++               * waiting for IO to complete.
++               */
++              congestion_wait(WRITE, HZ/10);
++              return;
++      }
++
+         for ( ; ; ) {
+               get_dirty_limits(&background_thresh, &dirty_thresh, NULL);
+@@ -317,7 +327,6 @@ void throttle_vm_writeout(void)
+         }
+ }
+-
+ /*
+  * writeback at least _min_pages, and keep writing until the amount of dirty
+  * memory is less than the background threshold, or until we're all clean.
+--- linux-2.6.20.1.orig/mm/vmscan.c
++++ linux-2.6.20.1/mm/vmscan.c
+@@ -949,7 +949,7 @@ static unsigned long shrink_zone(int pri
+               }
+       }
+-      throttle_vm_writeout();
++      throttle_vm_writeout(sc->gfp_mask);
+       atomic_dec(&zone->reclaim_in_progress);
+       return nr_reclaimed;
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:22 2007
+Message-Id: <20070307170622.863825748@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:02:59 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ James.Bottomley@steeleye.com
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Achim_Leubner@adaptec.com,
+ joerg@dorchain.net,
+ linux-scsi@vger.kernel.org
+Subject: [patch 096/101] bug in gdth.c crashing machine
+Content-Disposition: inline; filename=bug-in-gdth.c-crashing-machine.patch
+Content-Length: 1185
+Lines: 35
+
+
+From: Joerg Dorchain <joerg@dorchain.net>
+
+Undocumented...
+
+Signed-off-by: Joerg Dorchain <joerg@dorchain.net>
+Acked-by: Achim Leubner <Achim_Leubner@adaptec.com>
+Cc: James Bottomley <James.Bottomley@steeleye.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/gdth.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- linux-2.6.20.1.orig/drivers/scsi/gdth.c
++++ linux-2.6.20.1/drivers/scsi/gdth.c
+@@ -3092,6 +3092,7 @@ static int gdth_fill_raw_cmd(int hanum,S
+             cmdp->u.raw64.direction  = 
+                 gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN;
+             memcpy(cmdp->u.raw64.cmd,scp->cmnd,16);
++            cmdp->u.raw64.sg_ranz    = 0;
+         } else {
+             cmdp->u.raw.reserved   = 0;
+             cmdp->u.raw.mdisc_time = 0;
+@@ -3108,6 +3109,7 @@ static int gdth_fill_raw_cmd(int hanum,S
+             cmdp->u.raw.direction  = 
+                 gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN;
+             memcpy(cmdp->u.raw.cmd,scp->cmnd,12);
++            cmdp->u.raw.sg_ranz    = 0;
+         }
+         if (scp->use_sg) {
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:23 2007
+Message-Id: <20070307170622.998828901@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:03:00 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jeff@garzik.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ netdev@vger.kernel.org,
+ thomas@archlinux.org,
+ val_henson@linux.intel.com,
+ samuel.thibault@ens-lyon.org
+Subject: [patch 097/101] revert "drivers/net/tulip/dmfe: support basic carrier detection"
+Content-Disposition: inline; filename=revert-drivers-net-tulip-dmfe-support-basic-carrier-detection.patch
+Content-Length: 2644
+Lines: 78
+
+
+From: Andrew Morton <akpm@linux-foundation.org>
+
+Revert 7628b0a8c01a02966d2228bdf741ddedb128e8f8.  Thomas Bachler
+reports:
+
+  Commit 7628b0a8c01a02966d2228bdf741ddedb128e8f8 (drivers/net/tulip/dmfe:
+  support basic carrier detection) breaks networking on my Davicom DM9009. 
+  ethtool always reports there is no link.  tcpdump shows incoming packets,
+  but TX is disabled.  Reverting the above patch fixes the problem.
+
+
+Cc: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Cc: Jeff Garzik <jeff@garzik.org>
+Cc: Valerie Henson <val_henson@linux.intel.com>
+Cc: Thomas Bachler <thomas@archlinux.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/tulip/dmfe.c |    9 +--------
+ 1 file changed, 1 insertion(+), 8 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/net/tulip/dmfe.c
++++ linux-2.6.20.1/drivers/net/tulip/dmfe.c
+@@ -187,7 +187,7 @@ struct rx_desc {
+ struct dmfe_board_info {
+       u32 chip_id;                    /* Chip vendor/Device ID */
+       u32 chip_revision;              /* Chip revision */
+-      struct DEVICE *dev;             /* net device */
++      struct DEVICE *next_dev;        /* next device */
+       struct pci_dev *pdev;           /* PCI device */
+       spinlock_t lock;
+@@ -399,8 +399,6 @@ static int __devinit dmfe_init_one (stru
+       /* Init system & device */
+       db = netdev_priv(dev);
+-      db->dev = dev;
+-
+       /* Allocate Tx/Rx descriptor memory */
+       db->desc_pool_ptr = pci_alloc_consistent(pdev, sizeof(struct tx_desc) * DESC_ALL_CNT + 0x20, &db->desc_pool_dma_ptr);
+       db->buf_pool_ptr = pci_alloc_consistent(pdev, TX_BUF_ALLOC * TX_DESC_CNT + 4, &db->buf_pool_dma_ptr);
+@@ -428,7 +426,6 @@ static int __devinit dmfe_init_one (stru
+       dev->poll_controller = &poll_dmfe;
+ #endif
+       dev->ethtool_ops = &netdev_ethtool_ops;
+-      netif_carrier_off(db->dev);
+       spin_lock_init(&db->lock);
+       pci_read_config_dword(pdev, 0x50, &pci_pmr);
+@@ -1053,7 +1050,6 @@ static void netdev_get_drvinfo(struct ne
+ static const struct ethtool_ops netdev_ethtool_ops = {
+       .get_drvinfo            = netdev_get_drvinfo,
+-      .get_link               = ethtool_op_get_link,
+ };
+ /*
+@@ -1148,7 +1144,6 @@ static void dmfe_timer(unsigned long dat
+               /* Link Failed */
+               DMFE_DBUG(0, "Link Failed", tmp_cr12);
+               db->link_failed = 1;
+-              netif_carrier_off(db->dev);
+               /* For Force 10/100M Half/Full mode: Enable Auto-Nego mode */
+               /* AUTO or force 1M Homerun/Longrun don't need */
+@@ -1171,8 +1166,6 @@ static void dmfe_timer(unsigned long dat
+                       if ( (db->media_mode & DMFE_AUTO) &&
+                               dmfe_sense_speed(db) )
+                               db->link_failed = 1;
+-                      else
+-                              netif_carrier_on(db->dev);
+                       dmfe_process_mode(db);
+                       /* SHOW_MEDIA_TYPE(db->op_mode); */
+               }
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:23 2007
+Message-Id: <20070307170623.134026493@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:03:01 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "Antonino A. Daplas" <adaplas@pol.net>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 098/101] video/aty/mach64_ct.c: fix bogus delay loop
+Content-Disposition: inline; filename=video-aty-mach64_ct.c-fix-bogus-delay-loop.patch
+Content-Length: 1467
+Lines: 45
+
+From: David Miller <davem@davemloft.net>
+
+[PATCH] video/aty/mach64_ct.c: fix bogus delay loop
+
+CT based mach64 cards were reported to hang on sparc64 boxes when
+compiled with gcc-4.1.x and later.
+
+Looking at this piece of code, it's no surprise.  A critical
+delay was implemented as an empty for() loop, and gcc 4.0.x
+and previous did not optimize it away, so we did get a delay.
+
+But gcc-4.1.x and later can optimize it away, and we get crashes.
+
+Use a real udelay() to fix this.  Fix verified on SunBlade100.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: "Antonino A. Daplas" <adaplas@pol.net>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+
+---
+ drivers/video/aty/mach64_ct.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- linux-2.6.20.1.orig/drivers/video/aty/mach64_ct.c
++++ linux-2.6.20.1/drivers/video/aty/mach64_ct.c
+@@ -598,7 +598,6 @@ static void aty_resume_pll_ct(const stru
+       struct atyfb_par *par = info->par;
+       if (par->mclk_per != par->xclk_per) {
+-              int i;
+               /*
+               * This disables the sclk, crashes the computer as reported:
+               * aty_st_pll_ct(SPLL_CNTL2, 3, info);
+@@ -614,7 +613,7 @@ static void aty_resume_pll_ct(const stru
+                * helps for Rage Mobilities that sometimes crash when
+                * we switch to sclk. (Daniel Mantione, 13-05-2003)
+                */
+-              for (i=0;i<=0x1ffff;i++);
++              udelay(500);
+       }
+       aty_st_pll_ct(PLL_REF_DIV, pll->ct.pll_ref_div, par);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:23 2007
+Message-Id: <20070307170623.259758640@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:03:02 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ mm-commits@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ petero2@telia.com,
+ gd@spherenet.de
+Subject: [patch 099/101] pktcdvd: Correctly set cmd_len field in pkt_generic_packet
+Content-Disposition: inline; filename=pktcdvd-correctly-set-cmd_len-field-in-pkt_generic_packet.patch
+Content-Length: 872
+Lines: 28
+
+
+From: Gerhard Dirschl <gd@spherenet.de>
+
+Fixes http://bugzilla.kernel.org/show_bug.cgi?id=7810 - a silly
+copy-paste bug introduced by the latest change.
+
+Signed-off-by: Gerhard Dirschl <gd@spherenet.de>
+Cc: Peter Osterlund <petero2@telia.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/pktcdvd.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/drivers/block/pktcdvd.c
++++ linux-2.6.20.1/drivers/block/pktcdvd.c
+@@ -777,7 +777,7 @@ static int pkt_generic_packet(struct pkt
+                       goto out;
+       }
+-      rq->cmd_len = COMMAND_SIZE(rq->cmd[0]);
++      rq->cmd_len = COMMAND_SIZE(cgc->cmd[0]);
+       memcpy(rq->cmd, cgc->cmd, CDROM_PACKET_SIZE);
+       if (sizeof(rq->cmd) > CDROM_PACKET_SIZE)
+               memset(rq->cmd + CDROM_PACKET_SIZE, 0, sizeof(rq->cmd) - CDROM_PACKET_SIZE);
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:23 2007
+Message-Id: <20070307170623.391803596@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:03:03 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ mm-commits@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ yanmin.zhang@intel.com,
+ yanmin_zhang@linux.intel.com,
+ tony.luck@intel.com,
+ jeff@garzik.org
+Subject: [patch 100/101] ATA: convert GSI to irq on ia64
+Content-Disposition: inline; filename=ata-convert-gsi-to-irq-on-ia64.patch
+Content-Length: 1279
+Lines: 45
+
+
+From: "Zhang, Yanmin" <yanmin_zhang@linux.intel.com>
+
+If an ATA drive uses legacy mode, ata driver will choose 14 and 15 as the
+fixed irq number.  On ia64 platform, such numbers are GSI and should be
+converted to irq vector.
+
+Signed-off-by: Zhang Yanmin <yanmin.zhang@intel.com>
+Cc: Jeff Garzik <jeff@garzik.org>
+Cc: Tony Luck <tony.luck@intel.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/ia64/Kconfig                 |    1 +
+ include/asm-ia64/libata-portmap.h |   12 ++++++++++++
+ 2 files changed, 13 insertions(+)
+
+--- linux-2.6.20.1.orig/arch/ia64/Kconfig
++++ linux-2.6.20.1/arch/ia64/Kconfig
+@@ -11,6 +11,7 @@ menu "Processor type and features"
+ config IA64
+       bool
++      select ATA_NONSTANDARD if ATA
+       default y
+       help
+         The Itanium Processor Family is Intel's 64-bit successor to
+--- /dev/null
++++ linux-2.6.20.1/include/asm-ia64/libata-portmap.h
+@@ -0,0 +1,12 @@
++#ifndef __ASM_IA64_LIBATA_PORTMAP_H
++#define __ASM_IA64_LIBATA_PORTMAP_H
++
++#define ATA_PRIMARY_CMD               0x1F0
++#define ATA_PRIMARY_CTL               0x3F6
++#define ATA_PRIMARY_IRQ(dev)  isa_irq_to_vector(14)
++
++#define ATA_SECONDARY_CMD     0x170
++#define ATA_SECONDARY_CTL     0x376
++#define ATA_SECONDARY_IRQ(dev)        isa_irq_to_vector(15)
++
++#endif
+
+--
+
+From gregkh@mini.kroah.org Wed Mar  7 09:06:23 2007
+Message-Id: <20070307170623.528746382@mini.kroah.org>
+References: <20070307170123.677686080@mini.kroah.org>
+User-Agent: quilt/0.45-1
+Date: Wed, 07 Mar 2007 09:03:04 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ mm-commits@vger.kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ jwhiter@redhat.com,
+ swhiteho@redhat.com
+Subject: [patch 101/101] gfs2: fix locking mistake
+Content-Disposition: inline; filename=gfs2-fix-locking-mistake.patch
+Content-Length: 741
+Lines: 27
+
+From: Josef Whiter <jwhiter@redhat.com>
+
+Fix a locking mistake in the quota code, we do a mutex_lock instead of a
+mutex_unlock.
+
+Signed-off-by: Josef Whiter <jwhiter@redhat.com>
+Cc: Steven Whitehouse <swhiteho@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/gfs2/quota.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.20.1.orig/fs/gfs2/quota.c
++++ linux-2.6.20.1/fs/gfs2/quota.c
+@@ -279,7 +279,7 @@ static int bh_get(struct gfs2_quota_data
+               (bh->b_data + sizeof(struct gfs2_meta_header) +
+                offset * sizeof(struct gfs2_quota_change));
+-      mutex_lock(&sdp->sd_quota_mutex);
++      mutex_unlock(&sdp->sd_quota_mutex);
+       return 0;
+
+--
+