]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
start 2.6.25.10 review cycle
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 1 Jul 2008 15:20:04 +0000 (08:20 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 1 Jul 2008 15:20:04 +0000 (08:20 -0700)
13 files changed:
queue-2.6.25/series
review-2.6.25/drm-enable-bus-mastering-on-i915-at-resume-time.patch [moved from queue-2.6.25/drm-enable-bus-mastering-on-i915-at-resume-time.patch with 100% similarity]
review-2.6.25/futexes-fix-fault-handling-in-futex_lock_pi.patch [moved from queue-2.6.25/futexes-fix-fault-handling-in-futex_lock_pi.patch with 100% similarity]
review-2.6.25/ib-mthca-clear-icm-pages-before-handing-to-fw.patch [moved from queue-2.6.25/ib-mthca-clear-icm-pages-before-handing-to-fw.patch with 100% similarity]
review-2.6.25/mbox [new file with mode: 0644]
review-2.6.25/ptrace-get-set-fpxregs-broken.patch [moved from queue-2.6.25/ptrace-get-set-fpxregs-broken.patch with 100% similarity]
review-2.6.25/sched-fix-cpu-hotplug.patch [moved from queue-2.6.25/sched-fix-cpu-hotplug.patch with 100% similarity]
review-2.6.25/series [new file with mode: 0644]
review-2.6.25/tty-fix-for-tty-operations-bugs.patch [moved from queue-2.6.25/tty-fix-for-tty-operations-bugs.patch with 100% similarity]
review-2.6.25/x86-fix-cpu-hotplug-crash.patch [moved from queue-2.6.25/x86-fix-cpu-hotplug-crash.patch with 100% similarity]
review-2.6.25/x86-shift-bits-the-right-way-in-native_read_tscp.patch [moved from queue-2.6.25/x86-shift-bits-the-right-way-in-native_read_tscp.patch with 100% similarity]
review-2.6.25/x86_64-ptrace-fix-sys32_ptrace-task_struct-leak.patch [moved from queue-2.6.25/x86_64-ptrace-fix-sys32_ptrace-task_struct-leak.patch with 100% similarity]
review-2.6.25/xen-mask-unwanted-pte-bits-in-__supported_pte_mask.patch [new file with mode: 0644]

index ffbf5590dd928db7f389ad7d23d30945a7120f7e..4b527a33035238edabca335250d2f9bdb71f6c7d 100644 (file)
@@ -1,10 +1 @@
-tty-fix-for-tty-operations-bugs.patch
 xen-mask-unwanted-pte-bits-in-__supported_pte_mask.patch
-futexes-fix-fault-handling-in-futex_lock_pi.patch
-ib-mthca-clear-icm-pages-before-handing-to-fw.patch
-drm-enable-bus-mastering-on-i915-at-resume-time.patch
-x86_64-ptrace-fix-sys32_ptrace-task_struct-leak.patch
-sched-fix-cpu-hotplug.patch
-ptrace-get-set-fpxregs-broken.patch
-x86-fix-cpu-hotplug-crash.patch
-x86-shift-bits-the-right-way-in-native_read_tscp.patch
diff --git a/review-2.6.25/mbox b/review-2.6.25/mbox
new file mode 100644 (file)
index 0000000..8de126a
--- /dev/null
@@ -0,0 +1,1171 @@
+From gregkh@mini.kroah.org Tue Jul  1 08:12:31 2008
+Message-Id: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:10:57 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk
+Subject: [patch 0/9] 2.6.25.10 -stable review
+Content-Length: 1896
+Lines: 42
+
+This is the start of the stable review cycle for the 2.6.25.10 release.
+There are 9 patches in this series, all will be posted as a response
+to this one.  If anyone has any issues with these being applied, please
+let us know.  If anyone is a maintainer of the proper subsystem, and
+wants to add a Signed-off-by: line to the patch, please respond with it.
+
+These patches are sent out with a number of different people on the
+Cc: line.  If you wish to be a reviewer, please email stable@kernel.org
+to add your name to the list.  If you want to be off the reviewer list,
+also email us.
+
+Responses should be made by July 3, 15:00:00 UTC.  Anything received
+after that time might be too late.
+
+The whole patch series can be found in one patch at:
+       kernel.org/pub/linux/kernel/v2.6/stable-review/patch-2.6.25.10-rc1.gz
+and the diffstat can be found below.
+
+
+thanks,
+
+the -stable release team
+
+
+ Makefile                                    |    2 
+ arch/x86/kernel/i387.c                      |    4 -
+ arch/x86/kernel/ptrace.c                    |   45 +++++++------
+ arch/x86/kernel/smpboot_64.c                |    1 
+ drivers/char/drm/i915_drv.c                 |    1 
+ drivers/infiniband/hw/mthca/mthca_memfree.c |    6 +
+ drivers/net/hamradio/6pack.c                |    2 
+ drivers/net/hamradio/mkiss.c                |    8 +-
+ drivers/net/irda/irtty-sir.c                |    4 -
+ drivers/net/ppp_async.c                     |    3 
+ drivers/net/ppp_synctty.c                   |    3 
+ drivers/net/slip.c                          |   14 +++-
+ drivers/net/wan/x25_asy.c                   |   10 ++-
+ drivers/net/wireless/strip.c                |    3 
+ include/asm-x86/msr.h                       |    2 
+ kernel/futex.c                              |   93 +++++++++++++++++++++-------
+ kernel/sched.c                              |    1 
+ 17 files changed, 147 insertions(+), 55 deletions(-)
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:31 2008
+Message-Id: <20080701151231.837244831@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:10:58 -0700
+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>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Cox <alan@redhat.com>
+Subject: [patch 1/9] TTY: fix for tty operations bugs
+Content-Disposition: inline; filename=tty-fix-for-tty-operations-bugs.patch
+Content-Length: 5810
+Lines: 182
+
+2.6.25-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Alan Cox <alan@lxorguk.ukuu.org.uk>
+
+This is fixed with the recent tty operations rewrite in mainline in a
+different way, this is a selective backport of the relevant portions to
+the -stable tree.
+
+Signed-off-by: Alan Cox <alan@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/hamradio/6pack.c |    2 ++
+ drivers/net/hamradio/mkiss.c |    8 ++++++--
+ drivers/net/irda/irtty-sir.c |    4 +++-
+ drivers/net/ppp_async.c      |    3 +++
+ drivers/net/ppp_synctty.c    |    3 +++
+ drivers/net/slip.c           |   14 ++++++++++----
+ drivers/net/wan/x25_asy.c    |   10 ++++++++--
+ drivers/net/wireless/strip.c |    3 ++-
+ 8 files changed, 37 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/hamradio/6pack.c
++++ b/drivers/net/hamradio/6pack.c
+@@ -601,6 +601,8 @@ static int sixpack_open(struct tty_struc
+       if (!capable(CAP_NET_ADMIN))
+               return -EPERM;
++      if (!tty->driver->write)
++              return -EOPNOTSUPP;
+       dev = alloc_netdev(sizeof(struct sixpack), "sp%d", sp_setup);
+       if (!dev) {
+--- a/drivers/net/hamradio/mkiss.c
++++ b/drivers/net/hamradio/mkiss.c
+@@ -529,6 +529,7 @@ static void ax_encaps(struct net_device 
+ static int ax_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+       struct mkiss *ax = netdev_priv(dev);
++      int cib = 0;
+       if (!netif_running(dev))  {
+               printk(KERN_ERR "mkiss: %s: xmit call when iface is down\n", dev->name);
+@@ -544,10 +545,11 @@ static int ax_xmit(struct sk_buff *skb, 
+                       /* 20 sec timeout not reached */
+                       return 1;
+               }
++              if (ax->tty->drivers->chars_in_buffer)
++                      cib = ax->tty->chars_in_buffer(ax->tty);
+               printk(KERN_ERR "mkiss: %s: transmit timed out, %s?\n", dev->name,
+-                     (ax->tty->driver->chars_in_buffer(ax->tty) || ax->xleft) ?
+-                     "bad line quality" : "driver error");
++                   cib || ax->xleft) ? "bad line quality" : "driver error");
+               ax->xleft = 0;
+               clear_bit(TTY_DO_WRITE_WAKEUP, &ax->tty->flags);
+@@ -736,6 +738,8 @@ static int mkiss_open(struct tty_struct 
+       if (!capable(CAP_NET_ADMIN))
+               return -EPERM;
++      if (!tty->driver->write)
++              return -EOPNOTSUPP;
+       dev = alloc_netdev(sizeof(struct mkiss), "ax%d", ax_setup);
+       if (!dev) {
+--- a/drivers/net/irda/irtty-sir.c
++++ b/drivers/net/irda/irtty-sir.c
+@@ -64,7 +64,9 @@ static int irtty_chars_in_buffer(struct 
+       IRDA_ASSERT(priv != NULL, return -1;);
+       IRDA_ASSERT(priv->magic == IRTTY_MAGIC, return -1;);
+-      return priv->tty->driver->chars_in_buffer(priv->tty);
++      if (priv->tty->drivers->chars_in_buffer)
++              return priv->tty->driver->chars_in_buffer(priv->tty);
++      return 0;
+ }
+ /* Wait (sleep) until underlaying hardware finished transmission
+--- a/drivers/net/ppp_async.c
++++ b/drivers/net/ppp_async.c
+@@ -157,6 +157,9 @@ ppp_asynctty_open(struct tty_struct *tty
+ {
+       struct asyncppp *ap;
+       int err;
++
++      if (!tty->driver->write)
++              return -EOPNOTSUPP;
+       err = -ENOMEM;
+       ap = kzalloc(sizeof(*ap), GFP_KERNEL);
+--- a/drivers/net/ppp_synctty.c
++++ b/drivers/net/ppp_synctty.c
+@@ -207,6 +207,9 @@ ppp_sync_open(struct tty_struct *tty)
+       struct syncppp *ap;
+       int err;
++      if (!tty->driver->write)
++              return -EOPNOTSUPP;
++
+       ap = kzalloc(sizeof(*ap), GFP_KERNEL);
+       err = -ENOMEM;
+       if (!ap)
+--- a/drivers/net/slip.c
++++ b/drivers/net/slip.c
+@@ -460,10 +460,14 @@ static void sl_tx_timeout(struct net_dev
+                       /* 20 sec timeout not reached */
+                       goto out;
+               }
+-              printk(KERN_WARNING "%s: transmit timed out, %s?\n",
+-                      dev->name,
+-                      (sl->tty->driver->chars_in_buffer(sl->tty) || sl->xleft) ?
+-                              "bad line quality" : "driver error");
++              {
++                      int cib = 0;
++                      if (sl->tty->driver->chars_in_buffer)
++                              cib = sl->tty->driver->chars_in_buffer(sl->tty);
++                      printk(KERN_WARNING "%s: transmit timed out, %s?\n",
++                              dev->name, (cib || sl->xleft) ?
++                                     "bad line quality" : "driver error");
++              }
+               sl->xleft = 0;
+               sl->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
+               sl_unlock(sl);
+@@ -829,6 +833,8 @@ static int slip_open(struct tty_struct *
+       if (!capable(CAP_NET_ADMIN))
+               return -EPERM;
++      if (!tty->driver->write)
++              return -EOPNOTSUPP;
+       /* RTnetlink lock is misused here to serialize concurrent
+          opens of slip channels. There are better ways, but it is
+--- a/drivers/net/wan/x25_asy.c
++++ b/drivers/net/wan/x25_asy.c
+@@ -283,6 +283,10 @@ static void x25_asy_write_wakeup(struct 
+ static void x25_asy_timeout(struct net_device *dev)
+ {
+       struct x25_asy *sl = (struct x25_asy*)(dev->priv);
++      int cib = 0;
++
++      if (sl->tty->driver->chars_in_buffer)
++              cib = sl->tty->driver->chars_in_buffer(sl->tty);
+       spin_lock(&sl->lock);
+       if (netif_queue_stopped(dev)) {
+@@ -290,8 +294,7 @@ static void x25_asy_timeout(struct net_d
+                *      14 Oct 1994 Dmitry Gorodchanin.
+                */
+               printk(KERN_WARNING "%s: transmit timed out, %s?\n", dev->name,
+-                     (sl->tty->driver->chars_in_buffer(sl->tty) || sl->xleft) ?
+-                     "bad line quality" : "driver error");
++                     (cib || sl->xleft) ? "bad line quality" : "driver error");
+               sl->xleft = 0;
+               sl->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
+               x25_asy_unlock(sl);
+@@ -561,6 +564,9 @@ static int x25_asy_open_tty(struct tty_s
+               return -EEXIST;
+       }
++      if (!tty->driver->write)
++              return -EOPNOTSUPP;
++
+       /* OK.  Find a free X.25 channel to use. */
+       if ((sl = x25_asy_alloc()) == NULL) {
+               return -ENFILE;
+--- a/drivers/net/wireless/strip.c
++++ b/drivers/net/wireless/strip.c
+@@ -802,7 +802,8 @@ static void set_baud(struct tty_struct *
+       struct ktermios old_termios = *(tty->termios);
+       tty->termios->c_cflag &= ~CBAUD;        /* Clear the old baud setting */
+       tty->termios->c_cflag |= baudcode;      /* Set the new baud setting */
+-      tty->driver->set_termios(tty, &old_termios);
++      if (tty->driver->set_termios)
++              tty->driver->set_termios(tty, &old_termios);
+ }
+ /*
+
+-- 
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:32 2008
+Message-Id: <20080701151232.014994797@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:10:59 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@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>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Thomas Gleixner <tglx@linutronix.de>,
+ David Holmes <david.holmes@sun.com>,
+ Peter Zijlstra <peterz@infradead.org>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 2/9] futexes: fix fault handling in futex_lock_pi
+Content-Disposition: inline; filename=futexes-fix-fault-handling-in-futex_lock_pi.patch
+Content-Length: 6963
+Lines: 206
+
+2.6.25-stable review patch.  If anyone has any objections, please let us
+know.
+
+------------------
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+commit 1b7558e457ed0de61023cfc913d2c342c7c3d9f2 upstream
+
+This patch addresses a very sporadic pi-futex related failure in
+highly threaded java apps on large SMP systems.
+
+David Holmes reported that the pi_state consistency check in
+lookup_pi_state triggered with his test application. This means that
+the kernel internal pi_state and the user space futex variable are out
+of sync. First we assumed that this is a user space data corruption,
+but deeper investigation revieled that the problem happend because the
+pi-futex code is not handling a fault in the futex_lock_pi path when
+the user space variable needs to be fixed up.
+
+The fault happens when a fork mapped the anon memory which contains
+the futex readonly for COW or the page got swapped out exactly between
+the unlock of the futex and the return of either the new futex owner
+or the task which was the expected owner but failed to acquire the
+kernel internal rtmutex. The current futex_lock_pi() code drops out
+with an inconsistent in case it faults and returns -EFAULT to user
+space. User space has no way to fixup that state.
+
+When we wrote this code we thought that we could not drop the hash
+bucket lock at this point to handle the fault.
+
+After analysing the code again it turned out to be wrong because there
+are only two tasks involved which might modify the pi_state and the
+user space variable:
+
+ - the task which acquired the rtmutex
+ - the pending owner of the pi_state which did not get the rtmutex
+
+Both tasks drop into the fixup_pi_state() function before returning to
+user space. The first task which acquired the hash bucket lock faults
+in the fixup of the user space variable, drops the spinlock and calls
+futex_handle_fault() to fault in the page. Now the second task could
+acquire the hash bucket lock and tries to fixup the user space
+variable as well. It either faults as well or it succeeds because the
+first task already faulted the page in.
+
+One caveat is to avoid a double fixup. After returning from the fault
+handling we reacquire the hash bucket lock and check whether the
+pi_state owner has been modified already.
+
+Reported-by: David Holmes <david.holmes@sun.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: David Holmes <david.holmes@sun.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/futex.c |   93 ++++++++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 73 insertions(+), 20 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1118,21 +1118,64 @@ static void unqueue_me_pi(struct futex_q
+  * private futexes.
+  */
+ static int fixup_pi_state_owner(u32 __user *uaddr, struct futex_q *q,
+-                              struct task_struct *newowner)
++                              struct task_struct *newowner,
++                              struct rw_semaphore *fshared)
+ {
+       u32 newtid = task_pid_vnr(newowner) | FUTEX_WAITERS;
+       struct futex_pi_state *pi_state = q->pi_state;
++      struct task_struct *oldowner = pi_state->owner;
+       u32 uval, curval, newval;
+-      int ret;
++      int ret, attempt = 0;
+       /* Owner died? */
++      if (!pi_state->owner)
++              newtid |= FUTEX_OWNER_DIED;
++
++      /*
++       * We are here either because we stole the rtmutex from the
++       * pending owner or we are the pending owner which failed to
++       * get the rtmutex. We have to replace the pending owner TID
++       * in the user space variable. This must be atomic as we have
++       * to preserve the owner died bit here.
++       *
++       * Note: We write the user space value _before_ changing the
++       * pi_state because we can fault here. Imagine swapped out
++       * pages or a fork, which was running right before we acquired
++       * mmap_sem, that marked all the anonymous memory readonly for
++       * cow.
++       *
++       * Modifying pi_state _before_ the user space value would
++       * leave the pi_state in an inconsistent state when we fault
++       * here, because we need to drop the hash bucket lock to
++       * handle the fault. This might be observed in the PID check
++       * in lookup_pi_state.
++       */
++retry:
++      if (get_futex_value_locked(&uval, uaddr))
++              goto handle_fault;
++
++      while (1) {
++              newval = (uval & FUTEX_OWNER_DIED) | newtid;
++
++              curval = cmpxchg_futex_value_locked(uaddr, uval, newval);
++
++              if (curval == -EFAULT)
++                      goto handle_fault;
++              if (curval == uval)
++                      break;
++              uval = curval;
++      }
++
++      /*
++       * We fixed up user space. Now we need to fix the pi_state
++       * itself.
++       */
+       if (pi_state->owner != NULL) {
+               spin_lock_irq(&pi_state->owner->pi_lock);
+               WARN_ON(list_empty(&pi_state->list));
+               list_del_init(&pi_state->list);
+               spin_unlock_irq(&pi_state->owner->pi_lock);
+-      } else
+-              newtid |= FUTEX_OWNER_DIED;
++      }
+       pi_state->owner = newowner;
+@@ -1140,26 +1183,35 @@ static int fixup_pi_state_owner(u32 __us
+       WARN_ON(!list_empty(&pi_state->list));
+       list_add(&pi_state->list, &newowner->pi_state_list);
+       spin_unlock_irq(&newowner->pi_lock);
++      return 0;
+       /*
+-       * We own it, so we have to replace the pending owner
+-       * TID. This must be atomic as we have preserve the
+-       * owner died bit here.
++       * To handle the page fault we need to drop the hash bucket
++       * lock here. That gives the other task (either the pending
++       * owner itself or the task which stole the rtmutex) the
++       * chance to try the fixup of the pi_state. So once we are
++       * back from handling the fault we need to check the pi_state
++       * after reacquiring the hash bucket lock and before trying to
++       * do another fixup. When the fixup has been done already we
++       * simply return.
+        */
+-      ret = get_futex_value_locked(&uval, uaddr);
++handle_fault:
++      spin_unlock(q->lock_ptr);
+-      while (!ret) {
+-              newval = (uval & FUTEX_OWNER_DIED) | newtid;
++      ret = futex_handle_fault((unsigned long)uaddr, fshared, attempt++);
+-              curval = cmpxchg_futex_value_locked(uaddr, uval, newval);
++      spin_lock(q->lock_ptr);
+-              if (curval == -EFAULT)
+-                      ret = -EFAULT;
+-              if (curval == uval)
+-                      break;
+-              uval = curval;
+-      }
+-      return ret;
++      /*
++       * Check if someone else fixed it for us:
++       */
++      if (pi_state->owner != oldowner)
++              return 0;
++
++      if (ret)
++              return ret;
++
++      goto retry;
+ }
+ /*
+@@ -1524,7 +1576,7 @@ static int futex_lock_pi(u32 __user *uad
+                * that case:
+                */
+               if (q.pi_state->owner != curr)
+-                      ret = fixup_pi_state_owner(uaddr, &q, curr);
++                      ret = fixup_pi_state_owner(uaddr, &q, curr, fshared);
+       } else {
+               /*
+                * Catch the rare case, where the lock was released
+@@ -1556,7 +1608,8 @@ static int futex_lock_pi(u32 __user *uad
+                               int res;
+                               owner = rt_mutex_owner(&q.pi_state->pi_mutex);
+-                              res = fixup_pi_state_owner(uaddr, &q, owner);
++                              res = fixup_pi_state_owner(uaddr, &q, owner,
++                                                         fshared);
+                               /* propagate -EFAULT, if the fixup failed */
+                               if (res)
+
+-- 
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:32 2008
+Message-Id: <20080701151232.168013826@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:11:00 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@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>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eli Cohen <eli@mellanox.co.il>,
+ Roland Dreier <rolandd@cisco.com>
+Subject: [patch 3/9] IB/mthca: Clear ICM pages before handing to FW
+Content-Disposition: inline; filename=ib-mthca-clear-icm-pages-before-handing-to-fw.patch
+Content-Length: 1435
+Lines: 45
+
+2.6.25-stable review patch.  If anyone has any objections, please let us
+know.
+
+------------------
+
+From: Eli Cohen <eli@mellanox.co.il>
+
+commit 87afd448b186c885d67a08b7417cd46253b6a9d6 upstream
+
+Current memfree FW has a bug which in some cases, assumes that ICM
+pages passed to it are cleared.  This patch uses __GFP_ZERO to
+allocate all ICM pages passed to the FW.  Once firmware with a fix is
+released, we can make the workaround conditional on firmware version.
+
+This fixes the bug reported by Arthur Kepner <akepner@sgi.com> here:
+http://lists.openfabrics.org/pipermail/general/2008-May/050026.html
+
+[ Rewritten to be a one-liner using __GFP_ZERO instead of vmap()ing
+  ICM memory and memset()ing it to 0. - Roland ]
+
+Signed-off-by: Eli Cohen <eli@mellanox.co.il>
+Signed-off-by: Roland Dreier <rolandd@cisco.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/infiniband/hw/mthca/mthca_memfree.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/drivers/infiniband/hw/mthca/mthca_memfree.c
++++ b/drivers/infiniband/hw/mthca/mthca_memfree.c
+@@ -109,7 +109,11 @@ static int mthca_alloc_icm_pages(struct 
+ {
+       struct page *page;
+-      page = alloc_pages(gfp_mask, order);
++      /*
++       * Use __GFP_ZERO because buggy firmware assumes ICM pages are
++       * cleared, and subtle failures are seen if they aren't.
++       */
++      page = alloc_pages(gfp_mask | __GFP_ZERO, order);
+       if (!page)
+               return -ENOMEM;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:32 2008
+Message-Id: <20080701151232.322868493@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:11:01 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jie Luo <clotho67@gmail.com>,
+ Jesse Barnes <jbarnes@virtuousgeek.org>
+Subject: [patch 4/9] DRM: enable bus mastering on i915 at resume time
+Content-Disposition: inline; filename=drm-enable-bus-mastering-on-i915-at-resume-time.patch
+Content-Length: 1023
+Lines: 34
+
+2.6.25-stable review patch.  If anyone has any objections, please let us
+know.
+
+------------------
+
+From: Jie Luo <clotho67@gmail.com>
+
+commit ea7b44c8e6baa1a4507f05ba2c0009ac21c3fe0b upstream
+
+On 9xx chips, bus mastering needs to be enabled at resume time for much of the
+chip to function.  With this patch, vblank interrupts will work as expected
+on resume, along with other chip functions.   Fixes kernel bugzilla #10844.
+
+Signed-off-by: Jie Luo <clotho67@gmail.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/drm/i915_drv.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/char/drm/i915_drv.c
++++ b/drivers/char/drm/i915_drv.c
+@@ -385,6 +385,7 @@ static int i915_resume(struct drm_device
+       pci_restore_state(dev->pdev);
+       if (pci_enable_device(dev->pdev))
+               return -1;
++      pci_set_master(dev->pdev);
+       pci_write_config_byte(dev->pdev, LBB, dev_priv->saveLBB);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:32 2008
+Message-Id: <20080701151232.510249920@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:11:02 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Pekka Enberg <penberg@cs.helsinki.fi>,
+ Jeff Dike <jdike@addtoit.com>,
+ Joris van Rantwijk <jorispubl@xs4all.nl>,
+ Thorsten Knabe <linux@thorsten-knabe.de>,
+ Roland McGrath <roland@redhat.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 5/9] x86_64 ptrace: fix sys32_ptrace task_struct leak
+Content-Disposition: inline; filename=x86_64-ptrace-fix-sys32_ptrace-task_struct-leak.patch
+Content-Length: 2869
+Lines: 92
+
+2.6.25-stable review patch.  If anyone has any objections, please let us
+know.
+
+------------------
+
+From: Roland McGrath <roland@redhat.com>
+
+Commit 5a4646a4efed8c835f76c3b88f3155f6ab5b8d9b introduced a leak of
+task_struct refs into sys32_ptrace.  This bug has already gone away in
+for 2.6.26 in commit 562b80bafffaf42a6d916b0a2ee3d684220a1c10.
+
+Signed-off-by: Roland McGrath <roland@redhat.com>
+Acked-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/ptrace.c |   45 ++++++++++++++++++++++++++-------------------
+ 1 file changed, 26 insertions(+), 19 deletions(-)
+
+--- a/arch/x86/kernel/ptrace.c
++++ b/arch/x86/kernel/ptrace.c
+@@ -1309,42 +1309,49 @@ asmlinkage long sys32_ptrace(long reques
+               break;
+       case PTRACE_GETREGS:    /* Get all gp regs from the child. */
+-              return copy_regset_to_user(child, &user_x86_32_view,
+-                                         REGSET_GENERAL,
+-                                         0, sizeof(struct user_regs_struct32),
+-                                         datap);
++              ret = copy_regset_to_user(child, &user_x86_32_view,
++                                        REGSET_GENERAL,
++                                        0, sizeof(struct user_regs_struct32),
++                                        datap);
++              break;
+       case PTRACE_SETREGS:    /* Set all gp regs in the child. */
+-              return copy_regset_from_user(child, &user_x86_32_view,
+-                                           REGSET_GENERAL, 0,
+-                                           sizeof(struct user_regs_struct32),
+-                                           datap);
++              ret = copy_regset_from_user(child, &user_x86_32_view,
++                                          REGSET_GENERAL, 0,
++                                          sizeof(struct user_regs_struct32),
++                                          datap);
++              break;
+       case PTRACE_GETFPREGS:  /* Get the child FPU state. */
+-              return copy_regset_to_user(child, &user_x86_32_view,
+-                                         REGSET_FP, 0,
+-                                         sizeof(struct user_i387_ia32_struct),
+-                                         datap);
++              ret = copy_regset_to_user(child, &user_x86_32_view,
++                                        REGSET_FP, 0,
++                                        sizeof(struct user_i387_ia32_struct),
++                                        datap);
++              break;
+       case PTRACE_SETFPREGS:  /* Set the child FPU state. */
+-              return copy_regset_from_user(
++              ret = copy_regset_from_user(
+                       child, &user_x86_32_view, REGSET_FP,
+                       0, sizeof(struct user_i387_ia32_struct), datap);
++              break;
+       case PTRACE_GETFPXREGS: /* Get the child extended FPU state. */
+-              return copy_regset_to_user(child, &user_x86_32_view,
+-                                         REGSET_XFP, 0,
+-                                         sizeof(struct user32_fxsr_struct),
+-                                         datap);
++              ret = copy_regset_to_user(child, &user_x86_32_view,
++                                        REGSET_XFP, 0,
++                                        sizeof(struct user32_fxsr_struct),
++                                        datap);
++              break;
+       case PTRACE_SETFPXREGS: /* Set the child extended FPU state. */
+-              return copy_regset_from_user(child, &user_x86_32_view,
++              ret = copy_regset_from_user(child, &user_x86_32_view,
+                                            REGSET_XFP, 0,
+                                            sizeof(struct user32_fxsr_struct),
+                                            datap);
++              break;
+       default:
+-              return compat_ptrace_request(child, request, addr, data);
++              ret = compat_ptrace_request(child, request, addr, data);
++              break;
+       }
+  out:
+
+-- 
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:32 2008
+Message-Id: <20080701151232.654177430@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:11:03 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 6/9] sched: fix cpu hotplug
+Content-Disposition: inline; filename=sched-fix-cpu-hotplug.patch
+Content-Length: 1507
+Lines: 47
+
+2.6.25-stable review patch.  If anyone has any objections, please let us
+know.
+
+------------------
+
+From: Dmitry Adamushko <dmitry.adamushko@gmail.com>
+
+Commit 79c537998d143b127c8c662a403c3356cb885f1c upstream
+
+the CPU hotplug problems (crashes under high-volume unplug+replug
+tests) seem to be related to migrate_dead_tasks().
+
+Firstly I added traces to see all tasks being migrated with
+migrate_live_tasks() and migrate_dead_tasks(). On my setup the problem
+pops up (the one with "se == NULL" in the loop of
+pick_next_task_fair()) shortly after the traces indicate that some has
+been migrated with migrate_dead_tasks()). btw., I can reproduce it
+much faster now with just a plain cpu down/up loop.
+
+[disclaimer] Well, unless I'm really missing something important in
+this late hour [/desclaimer] pick_next_task() is not something
+appropriate for migrate_dead_tasks() :-)
+
+the following change seems to eliminate the problem on my setup
+(although, I kept it running only for a few minutes to get a few
+messages indicating migrate_dead_tasks() does move tasks and the
+system is still ok)
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sched.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -5728,6 +5728,7 @@ static void migrate_dead_tasks(unsigned 
+               next = pick_next_task(rq, rq->curr);
+               if (!next)
+                       break;
++              next->sched_class->put_prev_task(rq, next);
+               migrate_dead(dead_cpu, next);
+       }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:32 2008
+Message-Id: <20080701151232.807526738@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:11:04 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 7/9] ptrace GET/SET FPXREGS broken
+Content-Disposition: inline; filename=ptrace-get-set-fpxregs-broken.patch
+Content-Length: 2177
+Lines: 114
+
+2.6.25-stable review patch.  If anyone has any objections, please let us
+know.
+
+------------------
+
+From: TAKADA Yoshihito <takada@mbf.nifty.com>
+
+Commit 11dbc963a8f6128595d0f6ecf138dc369e144997 upstream
+
+ptrace GET/SET FPXREGS broken
+
+When I update kernel 2.6.25 from 2.6.24, gdb does not work.
+On 2.6.25, ptrace(PTRACE_GETFPXREGS, ...) returns ENODEV.
+
+But 2.6.24 kernel's ptrace() returns EIO.
+It is issue of compatibility.
+
+I attached test program as pt.c and patch for fix it.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+#include <sys/ptrace.h>
+#include <sys/types.h>
+
+struct user_fxsr_struct {
+       unsigned short  cwd;
+       unsigned short  swd;
+       unsigned short  twd;
+       unsigned short  fop;
+       long    fip;
+       long    fcs;
+       long    foo;
+       long    fos;
+       long    mxcsr;
+       long    reserved;
+       long    st_space[32];   /* 8*16 bytes for each FP-reg = 128 bytes */
+       long    xmm_space[32];  /* 8*16 bytes for each XMM-reg = 128 bytes */
+       long    padding[56];
+};
+
+int main(void)
+{
+  pid_t pid;
+
+  pid = fork();
+
+  switch(pid){
+  case -1:/*  error */
+    break;
+  case 0:/*  child */
+    child();
+    break;
+  default:
+    parent(pid);
+    break;
+  }
+  return 0;
+}
+
+int child(void)
+{
+  ptrace(PTRACE_TRACEME);
+  kill(getpid(), SIGSTOP);
+  sleep(10);
+  return 0;
+}
+int parent(pid_t pid)
+{
+  int ret;
+  struct user_fxsr_struct fpxregs;
+
+  ret = ptrace(PTRACE_GETFPXREGS, pid, 0, &fpxregs);
+  if(ret < 0){
+    printf("%d: %s.\n", errno, strerror(errno));
+  }
+  kill(pid, SIGCONT);
+  wait(pid);
+  return 0;
+}
+
+/* in the kerel, at kernel/i387.c get_fpxregs() */
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/i387.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/kernel/i387.c
++++ b/arch/x86/kernel/i387.c
+@@ -130,7 +130,7 @@ int xfpregs_get(struct task_struct *targ
+               void *kbuf, void __user *ubuf)
+ {
+       if (!cpu_has_fxsr)
+-              return -ENODEV;
++              return -EIO;
+       init_fpu(target);
+@@ -145,7 +145,7 @@ int xfpregs_set(struct task_struct *targ
+       int ret;
+       if (!cpu_has_fxsr)
+-              return -ENODEV;
++              return -EIO;
+       init_fpu(target);
+       set_stopped_child_used_math(target);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:33 2008
+Message-Id: <20080701151232.998804192@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:11:05 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Zhang Yanmin <yanmin_zhang@linux.intel.com>,
+ Rusty Russell <rusty@rustcorp.com.au>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 8/9] x86: fix cpu hotplug crash
+Content-Disposition: inline; filename=x86-fix-cpu-hotplug-crash.patch
+Content-Length: 1933
+Lines: 59
+
+2.6.25-stable review patch.  If anyone has any objections, please let us
+know.
+
+------------------
+
+From: Yanmin Zhang <yanmin_zhang@linux.intel.com>
+
+Commit fcb43042ef55d2f46b0efa5d7746967cef38f056 upstream
+
+x86: fix cpu hotplug crash
+
+Vegard Nossum reported crashes during cpu hotplug tests:
+
+  http://marc.info/?l=linux-kernel&m=121413950227884&w=4
+
+In function _cpu_up, the panic happens when calling
+__raw_notifier_call_chain at the second time. Kernel doesn't panic when
+calling it at the first time. If just say because of nr_cpu_ids, that's
+not right.
+
+By checking the source code, I found that function do_boot_cpu is the culprit.
+Consider below call chain:
+ _cpu_up=>__cpu_up=>smp_ops.cpu_up=>native_cpu_up=>do_boot_cpu.
+
+So do_boot_cpu is called in the end. In do_boot_cpu, if
+boot_error==true, cpu_clear(cpu, cpu_possible_map) is executed. So later
+on, when _cpu_up calls __raw_notifier_call_chain at the second time to
+report CPU_UP_CANCELED, because this cpu is already cleared from
+cpu_possible_map, get_cpu_sysdev returns NULL.
+
+Many resources are related to cpu_possible_map, so it's better not to
+change it.
+
+Below patch against 2.6.26-rc7 fixes it by removing the bit clearing in
+cpu_possible_map.
+
+Signed-off-by: Zhang Yanmin <yanmin_zhang@linux.intel.com>
+Tested-by: Vegard Nossum <vegard.nossum@gmail.com>
+Acked-by: Rusty Russell <rusty@rustcorp.com.au>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ arch/x86/kernel/smpboot_64.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/arch/x86/kernel/smpboot_64.c
++++ b/arch/x86/kernel/smpboot_64.c
+@@ -704,7 +704,6 @@ do_rest:
+               clear_bit(cpu, (unsigned long *)&cpu_initialized); /* was set by cpu_init() */
+               clear_node_cpumask(cpu); /* was set by numa_add_cpu */
+               cpu_clear(cpu, cpu_present_map);
+-              cpu_clear(cpu, cpu_possible_map);
+               per_cpu(x86_cpu_to_apicid, cpu) = BAD_APICID;
+               return -EIO;
+       }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Jul  1 08:12:33 2008
+Message-Id: <20080701151233.173581852@mini.kroah.org>
+References: <20080701151057.930340322@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 01 Jul 2008 08:11:06 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Max Asbock <masbock@linux.vnet.ibm.com>,
+ Glauber Costa <gcosta@redhat.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 9/9] x86: shift bits the right way in native_read_tscp
+Content-Disposition: inline; filename=x86-shift-bits-the-right-way-in-native_read_tscp.patch
+Content-Length: 953
+Lines: 36
+
+2.6.25-stable review patch.  If anyone has any objections, please let us
+know.
+
+------------------
+
+From: Max Asbock <masbock@us.ibm.com>
+
+Commit 41aefdcc98fdba47459eab67630293d67e855fc3 upstream
+
+x86: shift bits the right way in native_read_tscp
+
+native_read_tscp shifts the bits in the high order value in the
+wrong direction, the attached patch fixes that.
+
+Signed-off-by: Max Asbock <masbock@linux.vnet.ibm.com>
+Acked-by: Glauber Costa <gcosta@redhat.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-x86/msr.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/asm-x86/msr.h
++++ b/include/asm-x86/msr.h
+@@ -18,7 +18,7 @@ static inline unsigned long long native_
+       unsigned long low, high;
+       asm volatile (".byte 0x0f,0x01,0xf9"
+                     : "=a" (low), "=d" (high), "=c" (*aux));
+-      return low | ((u64)high >> 32);
++      return low | ((u64)high << 32);
+ }
+ /*
+
+-- 
+
diff --git a/review-2.6.25/series b/review-2.6.25/series
new file mode 100644 (file)
index 0000000..08352ac
--- /dev/null
@@ -0,0 +1,9 @@
+tty-fix-for-tty-operations-bugs.patch
+futexes-fix-fault-handling-in-futex_lock_pi.patch
+ib-mthca-clear-icm-pages-before-handing-to-fw.patch
+drm-enable-bus-mastering-on-i915-at-resume-time.patch
+x86_64-ptrace-fix-sys32_ptrace-task_struct-leak.patch
+sched-fix-cpu-hotplug.patch
+ptrace-get-set-fpxregs-broken.patch
+x86-fix-cpu-hotplug-crash.patch
+x86-shift-bits-the-right-way-in-native_read_tscp.patch
diff --git a/review-2.6.25/xen-mask-unwanted-pte-bits-in-__supported_pte_mask.patch b/review-2.6.25/xen-mask-unwanted-pte-bits-in-__supported_pte_mask.patch
new file mode 100644 (file)
index 0000000..a495787
--- /dev/null
@@ -0,0 +1,52 @@
+From stable-bounces@linux.kernel.org Mon Jun 23 16:30:37 2008
+From: Jeremy Fitzhardinge <jeremy@goop.org>
+Date: Mon, 23 Jun 2008 23:30:20 GMT
+Subject: xen: mask unwanted pte bits in __supported_pte_mask
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200806232330.m5NNUKHK010393@hera.kernel.org>
+
+From: Jeremy Fitzhardinge <jeremy@goop.org>
+
+commit 05345b0f006ac226d0d25d48fcb2d792ac44a071 upstream
+
+[ Stable: this isn't a bugfix in itself, but it's a pre-requiste
+  for "xen: don't drop NX bit" ]
+
+Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
+Cc: the arch/x86 maintainers <x86@kernel.org>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/xen/enlighten.c |    5 +++++
+ arch/x86/xen/mmu.c       |    4 +---
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/xen/enlighten.c
++++ b/arch/x86/xen/enlighten.c
+@@ -1214,6 +1214,11 @@ asmlinkage void __init xen_start_kernel(
+       if (xen_feature(XENFEAT_supervisor_mode_kernel))
+               pv_info.kernel_rpl = 0;
++      /* Prevent unwanted bits from being set in PTEs. */
++      __supported_pte_mask &= ~_PAGE_GLOBAL;
++      if (!is_initial_xendomain())
++              __supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
++
+       /* set the limit of our address space */
+       xen_reserve_top();
+--- a/arch/x86/xen/mmu.c
++++ b/arch/x86/xen/mmu.c
+@@ -244,10 +244,8 @@ unsigned long long xen_pgd_val(pgd_t pgd
+ pte_t xen_make_pte(unsigned long long pte)
+ {
+-      if (pte & _PAGE_PRESENT) {
++      if (pte & _PAGE_PRESENT)
+               pte = phys_to_machine(XPADDR(pte)).maddr;
+-              pte &= ~(_PAGE_PCD | _PAGE_PWT);
+-      }
+       return (pte_t){ .pte = pte };
+ }