]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Thu, 6 May 2010 22:51:17 +0000 (15:51 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 6 May 2010 22:51:17 +0000 (15:51 -0700)
23 files changed:
queue-2.6.32/block-ensure-jiffies-wrap-is-handled-correctly-in-blk_rq_timed_out_timer.patch [new file with mode: 0644]
queue-2.6.32/dm9601-fix-phy-eeprom-write-routine.patch [new file with mode: 0644]
queue-2.6.32/edac-mce-fix-wrong-mask-and-macro-usage.patch [new file with mode: 0644]
queue-2.6.32/i2c-fix-probing-of-fsc-hardware-monitoring-chips.patch [new file with mode: 0644]
queue-2.6.32/nfs-d_revalidate-is-too-trigger-happy-with-d_drop.patch [new file with mode: 0644]
queue-2.6.32/nfs-rsize-and-wsize-settings-ignored-on-v4-mounts.patch [new file with mode: 0644]
queue-2.6.32/ocfs2-compute-metaecc-for-superblocks-during-online-resize.patch [new file with mode: 0644]
queue-2.6.32/ocfs2-potential-err_ptr-dereference-on-error-paths.patch [new file with mode: 0644]
queue-2.6.32/ocfs2-update-vfs-inode-s-id-info-after-reflink.patch [new file with mode: 0644]
queue-2.6.32/ocfs2_dlmfs-fix-math-error-when-reading-lvb.patch [new file with mode: 0644]
queue-2.6.32/p54pci-fix-bugs-in-p54p_check_tx_ring.patch [new file with mode: 0644]
queue-2.6.32/perf-fix-resource-leak-in-failure-path-of-perf_event_open.patch [new file with mode: 0644]
queue-2.6.32/powernow-k8-fix-frequency-reporting.patch [new file with mode: 0644]
queue-2.6.32/raid6-fix-recovery-performance-regression.patch [new file with mode: 0644]
queue-2.6.32/serial-8250_pnp-add-fujitsu-wacom-device.patch [new file with mode: 0644]
queue-2.6.32/series
queue-2.6.32/staging-hv-fix-a-bug-affecting-ipv6.patch [new file with mode: 0644]
queue-2.6.32/staging-hv-fix-up-memory-leak-on-hvcleanup.patch [new file with mode: 0644]
queue-2.6.32/staging-hv-name-network-device-ethx-rather-than-sethx.patch [new file with mode: 0644]
queue-2.6.32/x86-64-clear-a-64-bit-fs-gs-base-on-fork-if-selector-is-nonzero.patch [new file with mode: 0644]
queue-2.6.32/x86-amd-fix-stale-cpuid4_info-shared_map-data-in-shared_cpu_map-cpumasks.patch [new file with mode: 0644]
queue-2.6.32/x86-disable-large-pages-on-cpus-with-atom-erratum-aae44.patch [new file with mode: 0644]
queue-2.6.32/x86-k8-nb-fix-boot-crash-enable-k8_northbridges-unconditionally-on-amd-systems.patch [new file with mode: 0644]

diff --git a/queue-2.6.32/block-ensure-jiffies-wrap-is-handled-correctly-in-blk_rq_timed_out_timer.patch b/queue-2.6.32/block-ensure-jiffies-wrap-is-handled-correctly-in-blk_rq_timed_out_timer.patch
new file mode 100644 (file)
index 0000000..d75d06f
--- /dev/null
@@ -0,0 +1,58 @@
+From a534dbe96e9929c7245924d8252d89048c23d569 Mon Sep 17 00:00:00 2001
+From: Richard Kennedy <richard@rsk.demon.co.uk>
+Date: Wed, 14 Apr 2010 20:54:03 +0200
+Subject: block: ensure jiffies wrap is handled correctly in blk_rq_timed_out_timer
+
+From: Richard Kennedy <richard@rsk.demon.co.uk>
+
+commit a534dbe96e9929c7245924d8252d89048c23d569 upstream.
+
+blk_rq_timed_out_timer() relied on blk_add_timer() never returning a
+timer value of zero, but commit 7838c15b8dd18e78a523513749e5b54bda07b0cb
+removed the code that bumped this value when it was zero.
+Therefore when jiffies is near wrap we could get unlucky & not set the
+timeout value correctly.
+
+This patch uses a flag to indicate that the timeout value was set and so
+handles jiffies wrap correctly, and it keeps all the logic in one
+function so should be easier to maintain in the future.
+
+Signed-off-by: Richard Kennedy <richard@rsk.demon.co.uk>
+Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ block/blk-timeout.c |   12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+--- a/block/blk-timeout.c
++++ b/block/blk-timeout.c
+@@ -109,6 +109,7 @@ void blk_rq_timed_out_timer(unsigned lon
+       struct request_queue *q = (struct request_queue *) data;
+       unsigned long flags, next = 0;
+       struct request *rq, *tmp;
++      int next_set = 0;
+       spin_lock_irqsave(q->queue_lock, flags);
+@@ -122,16 +123,13 @@ void blk_rq_timed_out_timer(unsigned lon
+                       if (blk_mark_rq_complete(rq))
+                               continue;
+                       blk_rq_timed_out(rq);
+-              } else if (!next || time_after(next, rq->deadline))
++              } else if (!next_set || time_after(next, rq->deadline)) {
+                       next = rq->deadline;
++                      next_set = 1;
++              }
+       }
+-      /*
+-       * next can never be 0 here with the list non-empty, since we always
+-       * bump ->deadline to 1 so we can detect if the timer was ever added
+-       * or not. See comment in blk_add_timer()
+-       */
+-      if (next)
++      if (next_set)
+               mod_timer(&q->timeout, round_jiffies_up(next));
+       spin_unlock_irqrestore(q->queue_lock, flags);
diff --git a/queue-2.6.32/dm9601-fix-phy-eeprom-write-routine.patch b/queue-2.6.32/dm9601-fix-phy-eeprom-write-routine.patch
new file mode 100644 (file)
index 0000000..7920238
--- /dev/null
@@ -0,0 +1,42 @@
+From e9162ab1610531d6ea6c1833daeb2613e44275e8 Mon Sep 17 00:00:00 2001
+From: Peter Korsgaard <jacmet@sunsite.dk>
+Date: Mon, 3 May 2010 10:01:26 +0000
+Subject: dm9601: fix phy/eeprom write routine
+
+From: Peter Korsgaard <jacmet@sunsite.dk>
+
+commit e9162ab1610531d6ea6c1833daeb2613e44275e8 upstream.
+
+Use correct bit positions in DM_SHARED_CTRL register for writes.
+
+Michael Planes recently encountered a 'KY-RS9600 USB-LAN converter', which
+came with a driver CD containing a Linux driver. This driver turns out to
+be a copy of dm9601.c with symbols renamed and my copyright stripped.
+That aside, it did contain 1 functional change in dm_write_shared_word(),
+and after checking the datasheet the original value was indeed wrong
+(read versus write bits).
+
+On Michaels HW, this change bumps receive speed from ~30KB/s to ~900KB/s.
+On other devices the difference is less spectacular, but still significant
+(~30%).
+
+Reported-by: Michael Planes <michael.planes@free.fr>
+Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/usb/dm9601.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/usb/dm9601.c
++++ b/drivers/net/usb/dm9601.c
+@@ -238,7 +238,7 @@ static int dm_write_shared_word(struct u
+               goto out;
+       dm_write_reg(dev, DM_SHARED_ADDR, phy ? (reg | 0x40) : reg);
+-      dm_write_reg(dev, DM_SHARED_CTRL, phy ? 0x1c : 0x14);
++      dm_write_reg(dev, DM_SHARED_CTRL, phy ? 0x1a : 0x12);
+       for (i = 0; i < DM_TIMEOUT; i++) {
+               u8 tmp;
diff --git a/queue-2.6.32/edac-mce-fix-wrong-mask-and-macro-usage.patch b/queue-2.6.32/edac-mce-fix-wrong-mask-and-macro-usage.patch
new file mode 100644 (file)
index 0000000..bf20101
--- /dev/null
@@ -0,0 +1,48 @@
+From 35d824b28fc5544d1eb7c1e3db15a1740df8ec4b Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <borislav.petkov@amd.com>
+Date: Fri, 30 Apr 2010 15:19:02 +0200
+Subject: edac, mce: Fix wrong mask and macro usage
+
+From: Borislav Petkov <borislav.petkov@amd.com>
+
+commit 35d824b28fc5544d1eb7c1e3db15a1740df8ec4b upstream.
+
+Correct two mishaps which prevented reporting error type (CECC vs UECC)
+and extended error description.
+
+Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/edac/edac_mce_amd.c |    5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/drivers/edac/edac_mce_amd.c
++++ b/drivers/edac/edac_mce_amd.c
+@@ -295,7 +295,6 @@ wrong_ls_mce:
+ void amd_decode_nb_mce(int node_id, struct err_regs *regs, int handle_errors)
+ {
+       u32 ec  = ERROR_CODE(regs->nbsl);
+-      u32 xec = EXT_ERROR_CODE(regs->nbsl);
+       if (!handle_errors)
+               return;
+@@ -319,7 +318,7 @@ void amd_decode_nb_mce(int node_id, stru
+               pr_cont("\n");
+       }
+-      pr_emerg("%s.\n", EXT_ERR_MSG(xec));
++      pr_emerg("%s.\n", EXT_ERR_MSG(regs->nbsl));
+       if (BUS_ERROR(ec) && nb_bus_decoder)
+               nb_bus_decoder(node_id, regs);
+@@ -382,7 +381,7 @@ static void amd_decode_mce(struct mce *m
+                ((m->status & MCI_STATUS_PCC) ? "yes" : "no"));
+       /* do the two bits[14:13] together */
+-      ecc = m->status & (3ULL << 45);
++      ecc = (m->status >> 45) & 0x3;
+       if (ecc)
+               pr_cont(", %sECC Error", ((ecc == 2) ? "C" : "U"));
diff --git a/queue-2.6.32/i2c-fix-probing-of-fsc-hardware-monitoring-chips.patch b/queue-2.6.32/i2c-fix-probing-of-fsc-hardware-monitoring-chips.patch
new file mode 100644 (file)
index 0000000..1c207b1
--- /dev/null
@@ -0,0 +1,69 @@
+From b1d4b390ea4bb480e65974ce522a04022608a8df Mon Sep 17 00:00:00 2001
+From: Jean Delvare <khali@linux-fr.org>
+Date: Tue, 4 May 2010 11:09:28 +0200
+Subject: i2c: Fix probing of FSC hardware monitoring chips
+
+From: Jean Delvare <khali@linux-fr.org>
+
+commit b1d4b390ea4bb480e65974ce522a04022608a8df upstream.
+
+Some FSC hardware monitoring chips (Syleus at least) doesn't like
+quick writes we typically use to probe for I2C chips. Use a regular
+byte read instead for the address they live at (0x73). These are the
+only known chips living at this address on PC systems.
+
+For clarity, this fix should not be needed for kernels 2.6.30 and
+later, as we started instantiating the hwmon devices explicitly based
+on DMI data. Still, this fix is valuable in the following two cases:
+* Support for recent FSC chips on older kernels. The DMI-based device
+  instantiation is more difficult to backport than the device support
+  itself.
+* Case where the DMI-based device instantiation fails, whatever the
+  reason. We fall back to probing in that case, so it should work.
+
+This fixes kernel bug #15634:
+https://bugzilla.kernel.org/show_bug.cgi?id=15634
+
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Acked-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/i2c/i2c-core.c |   24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+--- a/drivers/i2c/i2c-core.c
++++ b/drivers/i2c/i2c-core.c
+@@ -1202,14 +1202,24 @@ static int i2c_detect_address(struct i2c
+       /* Make sure there is something at this address, unless forced */
+       if (kind < 0) {
+-              if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
+-                                 I2C_SMBUS_QUICK, NULL) < 0)
+-                      return 0;
++              if (addr == 0x73 && (adapter->class & I2C_CLASS_HWMON)) {
++                      /* Special probe for FSC hwmon chips */
++                      union i2c_smbus_data dummy;
+-              /* prevent 24RF08 corruption */
+-              if ((addr & ~0x0f) == 0x50)
+-                      i2c_smbus_xfer(adapter, addr, 0, 0, 0,
+-                                     I2C_SMBUS_QUICK, NULL);
++                      if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_READ, 0,
++                                         I2C_SMBUS_BYTE_DATA, &dummy) < 0)
++                              return 0;
++              } else {
++                      if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_WRITE, 0,
++                                         I2C_SMBUS_QUICK, NULL) < 0)
++                              return 0;
++
++                      /* Prevent 24RF08 corruption */
++                      if ((addr & ~0x0f) == 0x50)
++                              i2c_smbus_xfer(adapter, addr, 0,
++                                             I2C_SMBUS_WRITE, 0,
++                                             I2C_SMBUS_QUICK, NULL);
++              }
+       }
+       /* Finally call the custom detection function */
diff --git a/queue-2.6.32/nfs-d_revalidate-is-too-trigger-happy-with-d_drop.patch b/queue-2.6.32/nfs-d_revalidate-is-too-trigger-happy-with-d_drop.patch
new file mode 100644 (file)
index 0000000..d1bb266
--- /dev/null
@@ -0,0 +1,37 @@
+From d9e80b7de91db05c1c4d2e5ebbfd70b3b3ba0e0f Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@ZenIV.linux.org.uk>
+Date: Thu, 29 Apr 2010 03:10:43 +0100
+Subject: nfs d_revalidate() is too trigger-happy with d_drop()
+
+From: Al Viro <viro@ZenIV.linux.org.uk>
+
+commit d9e80b7de91db05c1c4d2e5ebbfd70b3b3ba0e0f upstream.
+
+If dentry found stale happens to be a root of disconnected tree, we
+can't d_drop() it; its d_hash is actually part of s_anon and d_drop()
+would simply hide it from shrink_dcache_for_umount(), leading to
+all sorts of fun, including busy inodes on umount and oopsen after
+that.
+
+Bug had been there since at least 2006 (commit c636eb already has it),
+so it's definitely -stable fodder.
+
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfs/dir.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/nfs/dir.c
++++ b/fs/nfs/dir.c
+@@ -837,6 +837,8 @@ out_zap_parent:
+               /* If we have submounts, don't unhash ! */
+               if (have_submounts(dentry))
+                       goto out_valid;
++              if (dentry->d_flags & DCACHE_DISCONNECTED)
++                      goto out_valid;
+               shrink_dcache_parent(dentry);
+       }
+       d_drop(dentry);
diff --git a/queue-2.6.32/nfs-rsize-and-wsize-settings-ignored-on-v4-mounts.patch b/queue-2.6.32/nfs-rsize-and-wsize-settings-ignored-on-v4-mounts.patch
new file mode 100644 (file)
index 0000000..37cb2ac
--- /dev/null
@@ -0,0 +1,37 @@
+From 356e76b855bdbfd8d1c5e75bcf0c6bf0dfe83496 Mon Sep 17 00:00:00 2001
+From: Chuck Lever <chuck.lever@oracle.com>
+Date: Thu, 22 Apr 2010 15:35:56 -0400
+Subject: NFS: rsize and wsize settings ignored on v4 mounts
+
+From: Chuck Lever <chuck.lever@oracle.com>
+
+commit 356e76b855bdbfd8d1c5e75bcf0c6bf0dfe83496 upstream.
+
+NFSv4 mounts ignore the rsize and wsize mount options, and always use
+the default transfer size for both.  This seems to be because all
+NFSv4 mounts are now cloned, and the cloning logic doesn't copy the
+rsize and wsize settings from the parent nfs_server.
+
+I tested Fedora's 2.6.32.11-99 and it seems to have this problem as
+well, so I'm guessing that .33, .32, and perhaps older kernels have
+this issue as well.
+
+Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfs/client.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/nfs/client.c
++++ b/fs/nfs/client.c
+@@ -965,6 +965,8 @@ out_error:
+ static void nfs_server_copy_userdata(struct nfs_server *target, struct nfs_server *source)
+ {
+       target->flags = source->flags;
++      target->rsize = source->rsize;
++      target->wsize = source->wsize;
+       target->acregmin = source->acregmin;
+       target->acregmax = source->acregmax;
+       target->acdirmin = source->acdirmin;
diff --git a/queue-2.6.32/ocfs2-compute-metaecc-for-superblocks-during-online-resize.patch b/queue-2.6.32/ocfs2-compute-metaecc-for-superblocks-during-online-resize.patch
new file mode 100644 (file)
index 0000000..217fffb
--- /dev/null
@@ -0,0 +1,38 @@
+From a42ab8e1a37257da37e0f018e707bf365ac24531 Mon Sep 17 00:00:00 2001
+From: Joel Becker <joel.becker@oracle.com>
+Date: Wed, 31 Mar 2010 18:25:44 -0700
+Subject: ocfs2: Compute metaecc for superblocks during online resize.
+
+From: Joel Becker <joel.becker@oracle.com>
+
+commit a42ab8e1a37257da37e0f018e707bf365ac24531 upstream.
+
+Online resize writes out the new superblock and its backups directly.
+The metaecc data wasn't being recomputed.  Let's do that directly.
+
+Signed-off-by: Joel Becker <joel.becker@oracle.com>
+Acked-by: Mark Fasheh <mfasheh@suse.com>[
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ocfs2/buffer_head_io.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/ocfs2/buffer_head_io.c
++++ b/fs/ocfs2/buffer_head_io.c
+@@ -407,6 +407,7 @@ int ocfs2_write_super_or_backup(struct o
+                               struct buffer_head *bh)
+ {
+       int ret = 0;
++      struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
+       mlog_entry_void();
+@@ -426,6 +427,7 @@ int ocfs2_write_super_or_backup(struct o
+       get_bh(bh); /* for end_buffer_write_sync() */
+       bh->b_end_io = end_buffer_write_sync;
++      ocfs2_compute_meta_ecc(osb->sb, bh->b_data, &di->i_check);
+       submit_bh(WRITE, bh);
+       wait_on_buffer(bh);
diff --git a/queue-2.6.32/ocfs2-potential-err_ptr-dereference-on-error-paths.patch b/queue-2.6.32/ocfs2-potential-err_ptr-dereference-on-error-paths.patch
new file mode 100644 (file)
index 0000000..9099dea
--- /dev/null
@@ -0,0 +1,30 @@
+From 0350cb078f5035716ebdad4ad4709d02fe466a8a Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <error27@gmail.com>
+Date: Thu, 22 Apr 2010 11:39:29 +0200
+Subject: ocfs2: potential ERR_PTR dereference on error paths
+
+From: Dan Carpenter <error27@gmail.com>
+
+commit 0350cb078f5035716ebdad4ad4709d02fe466a8a upstream.
+
+If "handle" is non null at the end of the function then we assume it's a
+valid pointer and pass it to ocfs2_commit_trans();
+
+Signed-off-by: Dan Carpenter <error27@gmail.com>
+Signed-off-by: Joel Becker <joel.becker@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ocfs2/inode.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/fs/ocfs2/inode.c
++++ b/fs/ocfs2/inode.c
+@@ -559,6 +559,7 @@ static int ocfs2_truncate_for_delete(str
+               handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
+               if (IS_ERR(handle)) {
+                       status = PTR_ERR(handle);
++                      handle = NULL;
+                       mlog_errno(status);
+                       goto out;
+               }
diff --git a/queue-2.6.32/ocfs2-update-vfs-inode-s-id-info-after-reflink.patch b/queue-2.6.32/ocfs2-update-vfs-inode-s-id-info-after-reflink.patch
new file mode 100644 (file)
index 0000000..e79e805
--- /dev/null
@@ -0,0 +1,34 @@
+From c21a534e2f24968cf74976a4e721ac194db30ded Mon Sep 17 00:00:00 2001
+From: Tao Ma <tao.ma@oracle.com>
+Date: Wed, 21 Apr 2010 14:05:55 +0800
+Subject: ocfs2: Update VFS inode's id info after reflink.
+
+From: Tao Ma <tao.ma@oracle.com>
+
+commit c21a534e2f24968cf74976a4e721ac194db30ded upstream.
+
+In reflink we update the id info on the disk but forgot to update
+the corresponding information in the VFS inode.  Update them
+accordingly when we want to preserve the attributes.
+
+Reported-by: Jeff Liu <jeff.liu@oracle.com>
+Signed-off-by: Tao Ma <tao.ma@oracle.com>
+Signed-off-by: Joel Becker <joel.becker@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ocfs2/refcounttree.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/fs/ocfs2/refcounttree.c
++++ b/fs/ocfs2/refcounttree.c
+@@ -3995,6 +3995,9 @@ static int ocfs2_complete_reflink(struct
+       di->i_attr = s_di->i_attr;
+       if (preserve) {
++              t_inode->i_uid = s_inode->i_uid;
++              t_inode->i_gid = s_inode->i_gid;
++              t_inode->i_mode = s_inode->i_mode;
+               di->i_uid = s_di->i_uid;
+               di->i_gid = s_di->i_gid;
+               di->i_mode = s_di->i_mode;
diff --git a/queue-2.6.32/ocfs2_dlmfs-fix-math-error-when-reading-lvb.patch b/queue-2.6.32/ocfs2_dlmfs-fix-math-error-when-reading-lvb.patch
new file mode 100644 (file)
index 0000000..87b055e
--- /dev/null
@@ -0,0 +1,31 @@
+From a36d515c7a2dfacebcf41729f6812dbc424ebcf0 Mon Sep 17 00:00:00 2001
+From: Joel Becker <joel.becker@oracle.com>
+Date: Fri, 23 Apr 2010 15:24:59 -0700
+Subject: ocfs2_dlmfs: Fix math error when reading LVB.
+
+From: Joel Becker <joel.becker@oracle.com>
+
+commit a36d515c7a2dfacebcf41729f6812dbc424ebcf0 upstream.
+
+When asked for a partial read of the LVB in a dlmfs file, we can
+accidentally calculate a negative count.
+
+Reported-by: Dan Carpenter <error27@gmail.com>
+Signed-off-by: Joel Becker <joel.becker@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ocfs2/dlm/dlmfs.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/ocfs2/dlm/dlmfs.c
++++ b/fs/ocfs2/dlm/dlmfs.c
+@@ -205,7 +205,7 @@ static ssize_t dlmfs_file_read(struct fi
+       if ((count + *ppos) > i_size_read(inode))
+               readlen = i_size_read(inode) - *ppos;
+       else
+-              readlen = count - *ppos;
++              readlen = count;
+       lvb_buf = kmalloc(readlen, GFP_NOFS);
+       if (!lvb_buf)
diff --git a/queue-2.6.32/p54pci-fix-bugs-in-p54p_check_tx_ring.patch b/queue-2.6.32/p54pci-fix-bugs-in-p54p_check_tx_ring.patch
new file mode 100644 (file)
index 0000000..ea5693d
--- /dev/null
@@ -0,0 +1,36 @@
+From 0250ececdf6813457c98719e2d33b3684881fde0 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Thu, 22 Apr 2010 19:52:16 +0200
+Subject: p54pci: fix bugs in p54p_check_tx_ring
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+commit 0250ececdf6813457c98719e2d33b3684881fde0 upstream.
+
+Hans de Goede identified a bug in p54p_check_tx_ring:
+
+there are two ring indices. 1 => tx data and 3 => tx management.
+But the old code had a constant "1" and this resulted in spurious
+dma unmapping failures.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=583623
+Bug-Identified-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/p54/p54pci.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/p54/p54pci.c
++++ b/drivers/net/wireless/p54/p54pci.c
+@@ -237,7 +237,7 @@ static void p54p_check_tx_ring(struct ie
+       u32 idx, i;
+       i = (*index) % ring_limit;
+-      (*index) = idx = le32_to_cpu(ring_control->device_idx[1]);
++      (*index) = idx = le32_to_cpu(ring_control->device_idx[ring_index]);
+       idx %= ring_limit;
+       while (i != idx) {
diff --git a/queue-2.6.32/perf-fix-resource-leak-in-failure-path-of-perf_event_open.patch b/queue-2.6.32/perf-fix-resource-leak-in-failure-path-of-perf_event_open.patch
new file mode 100644 (file)
index 0000000..14dbf44
--- /dev/null
@@ -0,0 +1,36 @@
+From 048c852051d2bd5da54a4488bc1f16b0fc74c695 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Sat, 1 May 2010 10:11:35 +0200
+Subject: perf: Fix resource leak in failure path of perf_event_open()
+
+From: Tejun Heo <tj@kernel.org>
+
+commit 048c852051d2bd5da54a4488bc1f16b0fc74c695 upstream.
+
+perf_event_open() kfrees event after init failure which doesn't
+release all resources allocated by perf_event_alloc().  Use
+free_event() instead.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Paul Mackerras <paulus@au1.ibm.com>
+Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
+LKML-Reference: <4BDBE237.1040809@kernel.org>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/perf_event.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/perf_event.c
++++ b/kernel/perf_event.c
+@@ -4609,7 +4609,7 @@ err_fput_free_put_context:
+ err_free_put_context:
+       if (err < 0)
+-              kfree(event);
++              free_event(event);
+ err_put_context:
+       if (err < 0)
diff --git a/queue-2.6.32/powernow-k8-fix-frequency-reporting.patch b/queue-2.6.32/powernow-k8-fix-frequency-reporting.patch
new file mode 100644 (file)
index 0000000..cfc9541
--- /dev/null
@@ -0,0 +1,35 @@
+From b810e94c9d8e3fff6741b66cd5a6f099a7887871 Mon Sep 17 00:00:00 2001
+From: Mark Langsdorf <mark.langsdorf@amd.com>
+Date: Wed, 31 Mar 2010 21:56:45 +0200
+Subject: powernow-k8: Fix frequency reporting
+
+From: Mark Langsdorf <mark.langsdorf@amd.com>
+
+commit b810e94c9d8e3fff6741b66cd5a6f099a7887871 upstream.
+
+With F10, model 10, all valid frequencies are in the ACPI _PST table.
+
+Signed-off-by: Mark Langsdorf <mark.langsdorf@amd.com>
+LKML-Reference: <1270065406-1814-6-git-send-email-bp@amd64.org>
+Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
+Reviewed-by: Thomas Renninger <trenn@suse.de>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/cpu/cpufreq/powernow-k8.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c
++++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c
+@@ -929,7 +929,8 @@ static int fill_powernow_table_pstate(st
+               powernow_table[i].index = index;
+               /* Frequency may be rounded for these */
+-              if (boot_cpu_data.x86 == 0x10 || boot_cpu_data.x86 == 0x11) {
++              if ((boot_cpu_data.x86 == 0x10 && boot_cpu_data.x86_model < 10)
++                               || boot_cpu_data.x86 == 0x11) {
+                       powernow_table[i].frequency =
+                               freq_from_fid_did(lo & 0x3f, (lo >> 6) & 7);
+               } else
diff --git a/queue-2.6.32/raid6-fix-recovery-performance-regression.patch b/queue-2.6.32/raid6-fix-recovery-performance-regression.patch
new file mode 100644 (file)
index 0000000..a79fdb8
--- /dev/null
@@ -0,0 +1,73 @@
+From 5157b4aa5b7de8787b6318e61bcc285031bb9088 Mon Sep 17 00:00:00 2001
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Tue, 4 May 2010 20:41:56 -0700
+Subject: raid6: fix recovery performance regression
+
+From: Dan Williams <dan.j.williams@intel.com>
+
+commit 5157b4aa5b7de8787b6318e61bcc285031bb9088 upstream.
+
+The raid6 recovery code should immediately drop back to the optimized
+synchronous path when a p+q dma resource is not available.  Otherwise we
+run the non-optimized/multi-pass async code in sync mode.
+
+Verified with raid6test (NDISKS=255)
+
+Applies to kernels >= 2.6.32.
+
+Acked-by: NeilBrown <neilb@suse.de>
+Reported-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ crypto/async_tx/async_raid6_recov.c |   21 +++++++++++++--------
+ 1 file changed, 13 insertions(+), 8 deletions(-)
+
+--- a/crypto/async_tx/async_raid6_recov.c
++++ b/crypto/async_tx/async_raid6_recov.c
+@@ -324,6 +324,7 @@ struct dma_async_tx_descriptor *
+ async_raid6_2data_recov(int disks, size_t bytes, int faila, int failb,
+                       struct page **blocks, struct async_submit_ctl *submit)
+ {
++      void *scribble = submit->scribble;
+       int non_zero_srcs, i;
+       BUG_ON(faila == failb);
+@@ -332,11 +333,13 @@ async_raid6_2data_recov(int disks, size_
+       pr_debug("%s: disks: %d len: %zu\n", __func__, disks, bytes);
+-      /* we need to preserve the contents of 'blocks' for the async
+-       * case, so punt to synchronous if a scribble buffer is not available
++      /* if a dma resource is not available or a scribble buffer is not
++       * available punt to the synchronous path.  In the 'dma not
++       * available' case be sure to use the scribble buffer to
++       * preserve the content of 'blocks' as the caller intended.
+        */
+-      if (!submit->scribble) {
+-              void **ptrs = (void **) blocks;
++      if (!async_dma_find_channel(DMA_PQ) || !scribble) {
++              void **ptrs = scribble ? scribble : (void **) blocks;
+               async_tx_quiesce(&submit->depend_tx);
+               for (i = 0; i < disks; i++)
+@@ -406,11 +409,13 @@ async_raid6_datap_recov(int disks, size_
+       pr_debug("%s: disks: %d len: %zu\n", __func__, disks, bytes);
+-      /* we need to preserve the contents of 'blocks' for the async
+-       * case, so punt to synchronous if a scribble buffer is not available
++      /* if a dma resource is not available or a scribble buffer is not
++       * available punt to the synchronous path.  In the 'dma not
++       * available' case be sure to use the scribble buffer to
++       * preserve the content of 'blocks' as the caller intended.
+        */
+-      if (!scribble) {
+-              void **ptrs = (void **) blocks;
++      if (!async_dma_find_channel(DMA_PQ) || !scribble) {
++              void **ptrs = scribble ? scribble : (void **) blocks;
+               async_tx_quiesce(&submit->depend_tx);
+               for (i = 0; i < disks; i++)
diff --git a/queue-2.6.32/serial-8250_pnp-add-fujitsu-wacom-device.patch b/queue-2.6.32/serial-8250_pnp-add-fujitsu-wacom-device.patch
new file mode 100644 (file)
index 0000000..4504f4d
--- /dev/null
@@ -0,0 +1,30 @@
+From d9901660b53b92f0f3551c06588b8be38224b245 Mon Sep 17 00:00:00 2001
+From: Ping Cheng <pingc@wacom.com>
+Date: Mon, 22 Mar 2010 13:40:29 -0700
+Subject: serial: 8250_pnp - add Fujitsu Wacom device
+
+From: Ping Cheng <pingc@wacom.com>
+
+commit d9901660b53b92f0f3551c06588b8be38224b245 upstream.
+
+Add Fujitsu Wacom 1FGT Tablet PC device
+
+Signed-off-by: Ping Cheng <pingc@wacom.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/serial/8250_pnp.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/serial/8250_pnp.c
++++ b/drivers/serial/8250_pnp.c
+@@ -348,6 +348,8 @@ static const struct pnp_device_id pnp_de
+       {       "FUJ02E6",              0       },
+       /* Fujitsu Wacom 2FGT Tablet PC device */
+       {       "FUJ02E7",              0       },
++      /* Fujitsu Wacom 1FGT Tablet PC device */
++      {       "FUJ02E9",              0       },
+       /*
+        * LG C1 EXPRESS DUAL (C1-PB11A3) touch screen (actually a FUJ02E6 in
+        * disguise)
index 1cf288764515b1320466c847335b6c7e9f6351a0..2e6f0d672fb7bd252999bc1f68c0aa41d9208ce4 100644 (file)
@@ -23,3 +23,25 @@ usb-ohci-don-t-look-at-the-root-hub-to-get-the-number-of-ports.patch
 usb-xhci-properly-set-the-mult-field-of-the-endpoint-context.patch
 usb-xhci-properly-set-endpoint-context-fields-for-periodic-eps.patch
 procfs-fix-tid-fdinfo.patch
+ocfs2-update-vfs-inode-s-id-info-after-reflink.patch
+ocfs2-potential-err_ptr-dereference-on-error-paths.patch
+ocfs2-compute-metaecc-for-superblocks-during-online-resize.patch
+ocfs2_dlmfs-fix-math-error-when-reading-lvb.patch
+powernow-k8-fix-frequency-reporting.patch
+nfs-d_revalidate-is-too-trigger-happy-with-d_drop.patch
+nfs-rsize-and-wsize-settings-ignored-on-v4-mounts.patch
+staging-hv-fix-a-bug-affecting-ipv6.patch
+staging-hv-fix-up-memory-leak-on-hvcleanup.patch
+staging-hv-name-network-device-ethx-rather-than-sethx.patch
+i2c-fix-probing-of-fsc-hardware-monitoring-chips.patch
+perf-fix-resource-leak-in-failure-path-of-perf_event_open.patch
+raid6-fix-recovery-performance-regression.patch
+serial-8250_pnp-add-fujitsu-wacom-device.patch
+block-ensure-jiffies-wrap-is-handled-correctly-in-blk_rq_timed_out_timer.patch
+dm9601-fix-phy-eeprom-write-routine.patch
+p54pci-fix-bugs-in-p54p_check_tx_ring.patch
+edac-mce-fix-wrong-mask-and-macro-usage.patch
+x86-64-clear-a-64-bit-fs-gs-base-on-fork-if-selector-is-nonzero.patch
+x86-disable-large-pages-on-cpus-with-atom-erratum-aae44.patch
+x86-k8-nb-fix-boot-crash-enable-k8_northbridges-unconditionally-on-amd-systems.patch
+x86-amd-fix-stale-cpuid4_info-shared_map-data-in-shared_cpu_map-cpumasks.patch
diff --git a/queue-2.6.32/staging-hv-fix-a-bug-affecting-ipv6.patch b/queue-2.6.32/staging-hv-fix-a-bug-affecting-ipv6.patch
new file mode 100644 (file)
index 0000000..3b34634
--- /dev/null
@@ -0,0 +1,31 @@
+From 95beae90aa4afce57fb28e6f8238b78217bd7c98 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Mon, 19 Apr 2010 15:32:11 +0000
+Subject: Staging: hv: Fix a bug affecting IPv6
+
+From: Haiyang Zhang <haiyangz@microsoft.com>
+
+commit 95beae90aa4afce57fb28e6f8238b78217bd7c98 upstream.
+
+Fix a bug affecting IPv6
+Added the multicast flag for proper IPv6 function.
+
+Reported-by: Toshikazu Sakai <toshikas@microsoft.com>
+Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/RndisFilter.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/staging/hv/RndisFilter.c
++++ b/drivers/staging/hv/RndisFilter.c
+@@ -756,6 +756,7 @@ static int RndisFilterOpenDevice(struct
+       ret = RndisFilterSetPacketFilter(Device,
+                                        NDIS_PACKET_TYPE_BROADCAST |
++                                       NDIS_PACKET_TYPE_ALL_MULTICAST |
+                                        NDIS_PACKET_TYPE_DIRECTED);
+       if (ret == 0)
+               Device->State = RNDIS_DEV_DATAINITIALIZED;
diff --git a/queue-2.6.32/staging-hv-fix-up-memory-leak-on-hvcleanup.patch b/queue-2.6.32/staging-hv-fix-up-memory-leak-on-hvcleanup.patch
new file mode 100644 (file)
index 0000000..3ba9906
--- /dev/null
@@ -0,0 +1,33 @@
+From fa8ad0257ea256381126ecf447694622216c600f Mon Sep 17 00:00:00 2001
+From: Cyrill Gorcunov <gorcunov@openvz.org>
+Date: Mon, 5 Apr 2010 20:56:57 +0400
+Subject: Staging: hv: Fix up memory leak on HvCleanup
+
+From: Cyrill Gorcunov <gorcunov@openvz.org>
+
+commit fa8ad0257ea256381126ecf447694622216c600f upstream.
+
+Don't assign NULL too early
+
+Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
+Cc: Hank Janssen <hjanssen@microsoft.com>
+Cc: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/Hv.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/staging/hv/Hv.c
++++ b/drivers/staging/hv/Hv.c
+@@ -306,9 +306,9 @@ void HvCleanup(void)
+       DPRINT_ENTER(VMBUS);
+       if (gHvContext.SignalEventBuffer) {
++              kfree(gHvContext.SignalEventBuffer);
+               gHvContext.SignalEventBuffer = NULL;
+               gHvContext.SignalEventParam = NULL;
+-              kfree(gHvContext.SignalEventBuffer);
+       }
+       if (gHvContext.GuestId == HV_LINUX_GUEST_ID) {
diff --git a/queue-2.6.32/staging-hv-name-network-device-ethx-rather-than-sethx.patch b/queue-2.6.32/staging-hv-name-network-device-ethx-rather-than-sethx.patch
new file mode 100644 (file)
index 0000000..894a307
--- /dev/null
@@ -0,0 +1,35 @@
+From 546d9e101e7a71e6202f47a13ddcd9b8fb05a52e Mon Sep 17 00:00:00 2001
+From: Stephen Hemminger <shemminger@vyatta.com>
+Date: Thu, 11 Mar 2010 09:11:37 -0800
+Subject: Staging: hv: name network device ethX rather than sethX
+
+From: Stephen Hemminger <shemminger@vyatta.com>
+
+commit 546d9e101e7a71e6202f47a13ddcd9b8fb05a52e upstream.
+
+This patch makes the HyperV network device use the same naming scheme as
+other virtual drivers (Xen, KVM). In an ideal world, userspace tools
+would not care what the name is, but some users and applications do
+care. Vyatta CLI is one of the tools that does depend on what the name
+is.
+
+Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
+Cc: Hank Janssen <hjanssen@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/netvsc_drv.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/staging/hv/netvsc_drv.c
++++ b/drivers/staging/hv/netvsc_drv.c
+@@ -413,8 +413,7 @@ static int netvsc_probe(struct device *d
+       if (!net_drv_obj->Base.OnDeviceAdd)
+               return -1;
+-      net = alloc_netdev(sizeof(struct net_device_context), "seth%d",
+-                         ether_setup);
++      net = alloc_etherdev(sizeof(struct net_device_context));
+       if (!net)
+               return -1;
diff --git a/queue-2.6.32/x86-64-clear-a-64-bit-fs-gs-base-on-fork-if-selector-is-nonzero.patch b/queue-2.6.32/x86-64-clear-a-64-bit-fs-gs-base-on-fork-if-selector-is-nonzero.patch
new file mode 100644 (file)
index 0000000..e29e79f
--- /dev/null
@@ -0,0 +1,42 @@
+From 7ce5a2b9bb2e92902230e3121d8c3047fab9cb47 Mon Sep 17 00:00:00 2001
+From: H. Peter Anvin <hpa@zytor.com>
+Date: Fri, 23 Apr 2010 16:17:40 -0700
+Subject: x86-64: Clear a 64-bit FS/GS base on fork if selector is nonzero
+
+From: H. Peter Anvin <hpa@zytor.com>
+
+commit 7ce5a2b9bb2e92902230e3121d8c3047fab9cb47 upstream.
+
+When we do a thread switch, we clear the outgoing FS/GS base if the
+corresponding selector is nonzero.  This is taken by __switch_to() as
+an entry invariant; it does not verify that it is true on entry.
+However, copy_thread() doesn't enforce this constraint, which can
+result in inconsistent results after fork().
+
+Make copy_thread() match the behavior of __switch_to().
+
+Reported-and-tested-by: Samuel Thibault <samuel.thibault@inria.fr>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+LKML-Reference: <4BD1E061.8030605@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/process_64.c |    5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/kernel/process_64.c
++++ b/arch/x86/kernel/process_64.c
+@@ -295,11 +295,10 @@ int copy_thread(unsigned long clone_flag
+       set_tsk_thread_flag(p, TIF_FORK);
+-      p->thread.fs = me->thread.fs;
+-      p->thread.gs = me->thread.gs;
+-
+       savesegment(gs, p->thread.gsindex);
++      p->thread.gs = p->thread.gsindex ? 0 : me->thread.gs;
+       savesegment(fs, p->thread.fsindex);
++      p->thread.fs = p->thread.fsindex ? 0 : me->thread.fs;
+       savesegment(es, p->thread.es);
+       savesegment(ds, p->thread.ds);
diff --git a/queue-2.6.32/x86-amd-fix-stale-cpuid4_info-shared_map-data-in-shared_cpu_map-cpumasks.patch b/queue-2.6.32/x86-amd-fix-stale-cpuid4_info-shared_map-data-in-shared_cpu_map-cpumasks.patch
new file mode 100644 (file)
index 0000000..ce980a6
--- /dev/null
@@ -0,0 +1,57 @@
+From ebb682f522411abbe358059a256a8672ec0bd55b Mon Sep 17 00:00:00 2001
+From: Prarit Bhargava <prarit@redhat.com>
+Date: Wed, 9 Dec 2009 13:36:45 -0500
+Subject: x86, AMD: Fix stale cpuid4_info shared_map data in shared_cpu_map cpumasks
+
+From: Prarit Bhargava <prarit@redhat.com>
+
+commit ebb682f522411abbe358059a256a8672ec0bd55b upstream.
+
+The per_cpu cpuid4_info shared_map can contain stale data when CPUs are added
+and removed.
+
+The stale data can lead to a NULL pointer derefernce panic on a remove of a
+CPU that has had siblings previously removed.
+
+This patch resolves the panic by verifying a cpu is actually online before
+adding it to the shared_cpu_map, only examining cpus that are part of
+the same lower level cache, and by updating other siblings lowest level cache
+maps when a cpu is added.
+
+Signed-off-by: Prarit Bhargava <prarit@redhat.com>
+LKML-Reference: <20091209183336.17855.98708.sendpatchset@prarit.bos.redhat.com>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/cpu/intel_cacheinfo.c |   13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+--- a/arch/x86/kernel/cpu/intel_cacheinfo.c
++++ b/arch/x86/kernel/cpu/intel_cacheinfo.c
+@@ -647,18 +647,19 @@ static void __cpuinit cache_shared_cpu_m
+ {
+       struct _cpuid4_info     *this_leaf, *sibling_leaf;
+       unsigned long num_threads_sharing;
+-      int index_msb, i;
++      int index_msb, i, sibling;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
+       if ((index == 3) && (c->x86_vendor == X86_VENDOR_AMD)) {
+-              struct cpuinfo_x86 *d;
+-              for_each_online_cpu(i) {
++              for_each_cpu(i, c->llc_shared_map) {
+                       if (!per_cpu(cpuid4_info, i))
+                               continue;
+-                      d = &cpu_data(i);
+                       this_leaf = CPUID4_INFO_IDX(i, index);
+-                      cpumask_copy(to_cpumask(this_leaf->shared_cpu_map),
+-                                   d->llc_shared_map);
++                      for_each_cpu(sibling, c->llc_shared_map) {
++                              if (!cpu_online(sibling))
++                                      continue;
++                              set_bit(sibling, this_leaf->shared_cpu_map);
++                      }
+               }
+               return;
+       }
diff --git a/queue-2.6.32/x86-disable-large-pages-on-cpus-with-atom-erratum-aae44.patch b/queue-2.6.32/x86-disable-large-pages-on-cpus-with-atom-erratum-aae44.patch
new file mode 100644 (file)
index 0000000..dd53700
--- /dev/null
@@ -0,0 +1,72 @@
+From 7a0fc404ae663776e96db43879a0fa24fec1fa3a Mon Sep 17 00:00:00 2001
+From: H. Peter Anvin <hpa@linux.intel.com>
+Date: Tue, 13 Apr 2010 14:40:54 -0700
+Subject: x86: Disable large pages on CPUs with Atom erratum AAE44
+
+From: H. Peter Anvin <hpa@linux.intel.com>
+
+commit 7a0fc404ae663776e96db43879a0fa24fec1fa3a upstream.
+
+Atom erratum AAE44/AAF40/AAG38/AAH41:
+
+"If software clears the PS (page size) bit in a present PDE (page
+directory entry), that will cause linear addresses mapped through this
+PDE to use 4-KByte pages instead of using a large page after old TLB
+entries are invalidated. Due to this erratum, if a code fetch uses
+this PDE before the TLB entry for the large page is invalidated then
+it may fetch from a different physical address than specified by
+either the old large page translation or the new 4-KByte page
+translation. This erratum may also cause speculative code fetches from
+incorrect addresses."
+
+[http://download.intel.com/design/processor/specupdt/319536.pdf]
+
+Where as commit 211b3d03c7400f48a781977a50104c9d12f4e229 seems to
+workaround errata AAH41 (mixed 4K TLBs) it reduces the window of
+opportunity for the bug to occur and does not totally remove it.  This
+patch disables mixed 4K/4MB page tables totally avoiding the page
+splitting and not tripping this processor issue.
+
+This is based on an original patch by Colin King.
+
+Originally-by: Colin Ian King <colin.king@canonical.com>
+Cc: Colin Ian King <colin.king@canonical.com>
+Cc: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+LKML-Reference: <1269271251-19775-1-git-send-email-colin.king@canonical.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/cpu/intel.c |   21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+--- a/arch/x86/kernel/cpu/intel.c
++++ b/arch/x86/kernel/cpu/intel.c
+@@ -47,6 +47,27 @@ static void __cpuinit early_init_intel(s
+               (c->x86 == 0x6 && c->x86_model >= 0x0e))
+               set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
++      /*
++       * Atom erratum AAE44/AAF40/AAG38/AAH41:
++       *
++       * A race condition between speculative fetches and invalidating
++       * a large page.  This is worked around in microcode, but we
++       * need the microcode to have already been loaded... so if it is
++       * not, recommend a BIOS update and disable large pages.
++       */
++      if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_mask <= 2) {
++              u32 ucode, junk;
++
++              wrmsr(MSR_IA32_UCODE_REV, 0, 0);
++              sync_core();
++              rdmsr(MSR_IA32_UCODE_REV, junk, ucode);
++
++              if (ucode < 0x20e) {
++                      printk(KERN_WARNING "Atom PSE erratum detected, BIOS microcode update recommended\n");
++                      clear_cpu_cap(c, X86_FEATURE_PSE);
++              }
++      }
++
+ #ifdef CONFIG_X86_64
+       set_cpu_cap(c, X86_FEATURE_SYSENTER32);
+ #else
diff --git a/queue-2.6.32/x86-k8-nb-fix-boot-crash-enable-k8_northbridges-unconditionally-on-amd-systems.patch b/queue-2.6.32/x86-k8-nb-fix-boot-crash-enable-k8_northbridges-unconditionally-on-amd-systems.patch
new file mode 100644 (file)
index 0000000..1cc1147
--- /dev/null
@@ -0,0 +1,114 @@
+From 0e152cd7c16832bd5cadee0c2e41d9959bc9b6f9 Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <bp@amd64.org>
+Date: Fri, 12 Mar 2010 15:43:03 +0100
+Subject: x86, k8 nb: Fix boot crash: enable k8_northbridges unconditionally on AMD systems
+
+From: Borislav Petkov <bp@amd64.org>
+
+commit 0e152cd7c16832bd5cadee0c2e41d9959bc9b6f9 upstream.
+
+de957628ce7c84764ff41331111036b3ae5bad0f changed setting of the
+x86_init.iommu.iommu_init function ptr only when GART IOMMU is
+found.
+
+One side effect of it is that num_k8_northbridges
+is not initialized anymore if not explicitly
+called. This resulted in uninitialized pointers in
+<arch/x86/kernel/cpu/intel_cacheinfo.c:amd_calc_l3_indices()>,
+for example, which uses the num_k8_northbridges thing through
+node_to_k8_nb_misc().
+
+Fix that through an initcall that runs right after the PCI
+subsystem and does all the scanning. Then, remove initialization
+in gart_iommu_init() which is a rootfs_initcall and we're
+running before that.
+
+What is more, since num_k8_northbridges is being used in other
+places beside GART IOMMU, include it whenever we add AMD CPU
+support. The previous dependency chain in kconfig contained
+
+K8_NB depends on AGP_AMD64|GART_IOMMU
+
+which was clearly incorrect. The more natural way in terms of
+hardware dependency should be
+
+AGP_AMD64|GART_IOMMU depends on K8_NB depends on CPU_SUP_AMD &&
+PCI. Make it so Number One!
+
+Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
+Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Cc: Joerg Roedel <joerg.roedel@amd.com>
+LKML-Reference: <20100312144303.GA29262@aftab>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Tested-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/Kconfig              |    4 ++--
+ arch/x86/kernel/k8.c          |   14 ++++++++++++++
+ arch/x86/kernel/pci-gart_64.c |    2 +-
+ drivers/char/agp/Kconfig      |    2 +-
+ 4 files changed, 18 insertions(+), 4 deletions(-)
+
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -622,7 +622,7 @@ config GART_IOMMU
+       bool "GART IOMMU support" if EMBEDDED
+       default y
+       select SWIOTLB
+-      depends on X86_64 && PCI
++      depends on X86_64 && PCI && K8_NB
+       ---help---
+         Support for full DMA access of devices with 32bit memory access only
+         on systems with more than 3GB. This is usually needed for USB,
+@@ -2027,7 +2027,7 @@ endif # X86_32
+ config K8_NB
+       def_bool y
+-      depends on AGP_AMD64 || (X86_64 && (GART_IOMMU || (PCI && NUMA)))
++      depends on CPU_SUP_AMD && PCI
+ source "drivers/pcmcia/Kconfig"
+--- a/arch/x86/kernel/k8.c
++++ b/arch/x86/kernel/k8.c
+@@ -121,3 +121,17 @@ void k8_flush_garts(void)
+ }
+ EXPORT_SYMBOL_GPL(k8_flush_garts);
++static __init int init_k8_nbs(void)
++{
++      int err = 0;
++
++      err = cache_k8_northbridges();
++
++      if (err < 0)
++              printk(KERN_NOTICE "K8 NB: Cannot enumerate AMD northbridges.\n");
++
++      return err;
++}
++
++/* This has to go after the PCI subsystem */
++fs_initcall(init_k8_nbs);
+--- a/arch/x86/kernel/pci-gart_64.c
++++ b/arch/x86/kernel/pci-gart_64.c
+@@ -720,7 +720,7 @@ void __init gart_iommu_init(void)
+       unsigned long scratch;
+       long i;
+-      if (cache_k8_northbridges() < 0 || num_k8_northbridges == 0)
++      if (num_k8_northbridges == 0)
+               return;
+ #ifndef CONFIG_AGP_AMD64
+--- a/drivers/char/agp/Kconfig
++++ b/drivers/char/agp/Kconfig
+@@ -57,7 +57,7 @@ config AGP_AMD
+ config AGP_AMD64
+       tristate "AMD Opteron/Athlon64 on-CPU GART support" if !GART_IOMMU
+-      depends on AGP && X86
++      depends on AGP && X86 && K8_NB
+       default y if GART_IOMMU
+       help
+         This option gives you AGP support for the GLX component of