--- /dev/null
+From gregkh@mini.kroah.org Wed Jul 30 16:31:42 2008
+Message-Id: <20080730233141.933373247@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:52 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Gerrit Renker <gerrit@erg.abdn.ac.uk>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 02/62] udplite: Protection against coverage value wrap-around
+Content-Disposition: inline; filename=udplite-protection-against-coverage-value-wrap-around.patch
+Content-Length: 1852
+Lines: 54
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Gerrit Renker <gerrit@erg.abdn.ac.uk>
+
+[ Upstream commit 47112e25da41d9059626033986dc3353e101f815 ]
+
+This patch clamps the cscov setsockopt values to a maximum of 0xFFFF.
+
+Setsockopt values greater than 0xffff can cause an unwanted
+wrap-around. Further, IPv6 jumbograms are not supported (RFC 3838,
+3.5), so that values greater than 0xffff are not even useful.
+
+Further changes: fixed a typo in the documentation.
+
+Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/networking/udplite.txt | 2 +-
+ net/ipv4/udp.c | 4 ++++
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+--- a/Documentation/networking/udplite.txt
++++ b/Documentation/networking/udplite.txt
+@@ -148,7 +148,7 @@
+ getsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, &value, ...);
+
+ is meaningless (as in TCP). Packets with a zero checksum field are
+- illegal (cf. RFC 3828, sec. 3.1) will be silently discarded.
++ illegal (cf. RFC 3828, sec. 3.1) and will be silently discarded.
+
+ 4) Fragmentation
+
+--- a/net/ipv4/udp.c
++++ b/net/ipv4/udp.c
+@@ -1319,6 +1319,8 @@ int udp_lib_setsockopt(struct sock *sk,
+ return -ENOPROTOOPT;
+ if (val != 0 && val < 8) /* Illegal coverage: use default (8) */
+ val = 8;
++ else if (val > USHORT_MAX)
++ val = USHORT_MAX;
+ up->pcslen = val;
+ up->pcflag |= UDPLITE_SEND_CC;
+ break;
+@@ -1331,6 +1333,8 @@ int udp_lib_setsockopt(struct sock *sk,
+ return -ENOPROTOOPT;
+ if (val != 0 && val < 8) /* Avoid silly minimal values. */
+ val = 8;
++ else if (val > USHORT_MAX)
++ val = USHORT_MAX;
+ up->pcrlen = val;
+ up->pcflag |= UDPLITE_RECV_CC;
+ break;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:42 2008
+Message-Id: <20080730233142.116302082@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:53 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Stephen Hemminger <shemminger@vyatta.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 03/62] ipv6: use timer pending
+Content-Disposition: inline; filename=ipv6-use-timer-pending.patch
+Content-Length: 1372
+Lines: 38
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Stephen Hemminger <shemminger@vyatta.com>
+
+[ Upstream commit 847499ce71bdcc8fc542062df6ebed3e596608dd ]
+
+This fixes the bridge reference count problem and cleanups ipv6 FIB
+timer management. Don't use expires field, because it is not a proper
+way to test, instead use timer_pending().
+
+Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv6/ip6_fib.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/net/ipv6/ip6_fib.c
++++ b/net/ipv6/ip6_fib.c
+@@ -663,7 +663,7 @@ static int fib6_add_rt2node(struct fib6_
+
+ static __inline__ void fib6_start_gc(struct net *net, struct rt6_info *rt)
+ {
+- if (net->ipv6.ip6_fib_timer->expires == 0 &&
++ if (!timer_pending(net->ipv6.ip6_fib_timer) &&
+ (rt->rt6i_flags & (RTF_EXPIRES|RTF_CACHE)))
+ mod_timer(net->ipv6.ip6_fib_timer, jiffies +
+ net->ipv6.sysctl.ip6_rt_gc_interval);
+@@ -671,7 +671,7 @@ static __inline__ void fib6_start_gc(str
+
+ void fib6_force_start_gc(struct net *net)
+ {
+- if (net->ipv6.ip6_fib_timer->expires == 0)
++ if (!timer_pending(net->ipv6.ip6_fib_timer))
+ mod_timer(net->ipv6.ip6_fib_timer, jiffies +
+ net->ipv6.sysctl.ip6_rt_gc_interval);
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:42 2008
+Message-Id: <20080730233142.275204401@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:54 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 04/62] ipv6: __KERNEL__ ifdef struct ipv6_devconf
+Content-Disposition: inline; filename=ipv6-__kernel__-ifdef-struct-ipv6_devconf.patch
+Content-Length: 782
+Lines: 33
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: David S. Miller <davem@davemloft.net>
+
+[ Upstream commit ebb36a978131810c98e7198b1187090c697cf99f ]
+
+Based upon a report by Olaf Hering.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/ipv6.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/include/linux/ipv6.h
++++ b/include/linux/ipv6.h
+@@ -123,6 +123,7 @@ struct ipv6hdr {
+ struct in6_addr daddr;
+ };
+
++#ifdef __KERNEL__
+ /*
+ * This structure contains configuration options per IPv6 link.
+ */
+@@ -165,6 +166,7 @@ struct ipv6_devconf {
+ #endif
+ void *sysctl;
+ };
++#endif
+
+ /* index values for the variables in ipv6_devconf */
+ enum {
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:42 2008
+Message-Id: <20080730233142.429135975@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:55 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Micah Dowty <micah@navi.cx>,
+ Thomas Sailer <t.sailer@alumni.ethz.ch>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 05/62] hdlcdrv: Fix CRC calculation.
+Content-Disposition: inline; filename=hdlcdrv-fix-crc-calculation.patch
+Content-Length: 1096
+Lines: 32
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Micah Dowty <micah@navi.cx>
+
+[ Upstream commit ae6134bdf3197206fba95563d755d2fa50d90ddd ]
+
+This is a trivial patch against the hdlcdrv module that fixes its CRC
+calculation. The finished CRC was overwriting the first two bytes of
+each packet rather than being appended to the end.
+
+I've tested this with 2.6.8 and 2.6.10-rc1, but hdlcdrv hasn't changed
+much recently so it should work with many other kernel versions.
+
+Signed-off-by: Micah Dowty <micah@navi.cx>
+Acked-by: Thomas Sailer <t.sailer@alumni.ethz.ch>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/hamradio/hdlcdrv.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/hamradio/hdlcdrv.c
++++ b/drivers/net/hamradio/hdlcdrv.c
+@@ -88,6 +88,7 @@
+ static inline void append_crc_ccitt(unsigned char *buffer, int len)
+ {
+ unsigned int crc = crc_ccitt(0xffff, buffer, len) ^ 0xffff;
++ buffer += len;
+ *buffer++ = crc;
+ *buffer++ = crc >> 8;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:42 2008
+Message-Id: <20080730233142.609791338@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:56 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jan Kara <jack@suse.cz>
+Subject: [patch 06/62] quota: fix possible infinite loop in quota code
+Content-Disposition: inline; filename=quota-fix-possible-infinite-loop-in-quota-code.patch
+Content-Length: 1826
+Lines: 55
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Jan Kara <jack@suse.cz>
+
+commit b48d380541f634663b71766005838edbb7261685 upstream
+
+When quota structure is going to be dropped and it is dirty, quota code tries
+to write it. If the write fails for some reason (e. g. transaction cannot
+be started because the journal is aborted), we try writing again and again and
+again... Fix the problem by clearing the dirty bit even if the write failed.
+
+(akpm: for 2.6.27, 2.6.26.x and 2.6.25.x)
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Reviewed-by: dingdinghua <dingdinghua85@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/dquot.c | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+--- a/fs/dquot.c
++++ b/fs/dquot.c
+@@ -562,6 +562,8 @@ static struct shrinker dqcache_shrinker
+ */
+ static void dqput(struct dquot *dquot)
+ {
++ int ret;
++
+ if (!dquot)
+ return;
+ #ifdef __DQUOT_PARANOIA
+@@ -594,7 +596,19 @@ we_slept:
+ if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && dquot_dirty(dquot)) {
+ spin_unlock(&dq_list_lock);
+ /* Commit dquot before releasing */
+- dquot->dq_sb->dq_op->write_dquot(dquot);
++ ret = dquot->dq_sb->dq_op->write_dquot(dquot);
++ if (ret < 0) {
++ printk(KERN_ERR "VFS: cannot write quota structure on "
++ "device %s (error %d). Quota may get out of "
++ "sync!\n", dquot->dq_sb->s_id, ret);
++ /*
++ * We clear dirty bit anyway, so that we avoid
++ * infinite loop here
++ */
++ spin_lock(&dq_list_lock);
++ clear_dquot_dirty(dquot);
++ spin_unlock(&dq_list_lock);
++ }
+ goto we_slept;
+ }
+ /* Clear flag in case dquot was inactive (something bad happened) */
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:42 2008
+Message-Id: <20080730233142.772893771@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:57 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Adam Greenblatt <adam.greenblatt@gmail.com>
+Subject: [patch 07/62] isofs: fix minor filesystem corruption
+Content-Disposition: inline; filename=isofs-fix-minor-filesystem-corruption.patch
+Content-Length: 2859
+Lines: 83
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Adam Greenblatt <adam.greenblatt@gmail.com>
+
+commit c0a1633b6201ef79e31b7da464d44fdf5953054d upstream
+
+Some iso9660 images contain files with rockridge data that is either
+incorrect or incompletely parsed. Prior to commit
+f2966632a134e865db3c819346a1dc7d96e05309 ("[PATCH] rock: handle directory
+overflows") (included with kernel 2.6.13) the kernel ignored the rockridge
+data for these files, while still allowing the files to be accessed under
+their non-rockridge names. That commit inadvertently changed things so
+that files with invalid rockridge data could not be accessed at all. (I
+ran across the problem when comparing some old CDs with hard disk copies I
+had made long ago under kernel 2.4: a few of the files on the hard disk
+copies were no longer visible on the CDs.)
+
+This change reverts to the pre-2.6.13 behavior.
+
+Signed-off-by: Adam Greenblatt <adam.greenblatt@gmail.com>
+Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/isofs/rock.c | 22 ++++++++++++++++++++--
+ 1 file changed, 20 insertions(+), 2 deletions(-)
+
+--- a/fs/isofs/rock.c
++++ b/fs/isofs/rock.c
+@@ -209,6 +209,11 @@ repeat:
+
+ while (rs.len > 2) { /* There may be one byte for padding somewhere */
+ rr = (struct rock_ridge *)rs.chr;
++ /*
++ * Ignore rock ridge info if rr->len is out of range, but
++ * don't return -EIO because that would make the file
++ * invisible.
++ */
+ if (rr->len < 3)
+ goto out; /* Something got screwed up here */
+ sig = isonum_721(rs.chr);
+@@ -216,8 +221,12 @@ repeat:
+ goto eio;
+ rs.chr += rr->len;
+ rs.len -= rr->len;
++ /*
++ * As above, just ignore the rock ridge info if rr->len
++ * is bogus.
++ */
+ if (rs.len < 0)
+- goto eio; /* corrupted isofs */
++ goto out; /* Something got screwed up here */
+
+ switch (sig) {
+ case SIG('R', 'R'):
+@@ -307,6 +316,11 @@ parse_rock_ridge_inode_internal(struct i
+ repeat:
+ while (rs.len > 2) { /* There may be one byte for padding somewhere */
+ rr = (struct rock_ridge *)rs.chr;
++ /*
++ * Ignore rock ridge info if rr->len is out of range, but
++ * don't return -EIO because that would make the file
++ * invisible.
++ */
+ if (rr->len < 3)
+ goto out; /* Something got screwed up here */
+ sig = isonum_721(rs.chr);
+@@ -314,8 +328,12 @@ repeat:
+ goto eio;
+ rs.chr += rr->len;
+ rs.len -= rr->len;
++ /*
++ * As above, just ignore the rock ridge info if rr->len
++ * is bogus.
++ */
+ if (rs.len < 0)
+- goto eio; /* corrupted isofs */
++ goto out; /* Something got screwed up here */
+
+ switch (sig) {
+ #ifndef CONFIG_ZISOFS /* No flag for SF or ZF */
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:43 2008
+Message-Id: <20080730233142.944222390@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:58 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Sheng Yang <sheng.yang@intel.com>,
+ Avi Kivity <avi@qumranet.com>
+Subject: [patch 08/62] KVM: VMX: Fix a wrong usage of vmcs_config
+Content-Disposition: inline; filename=kvm-vmx-fix-a-wrong-usage-of-vmcs_config.patch
+Content-Length: 1468
+Lines: 39
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Sheng Yang <sheng.yang@intel.com>
+
+Original-Commit-Hash: 406046a9638a455876b030853862e576a4378d29
+
+The function ept_update_paging_mode_cr0() write to
+CPU_BASED_VM_EXEC_CONTROL based on vmcs_config.cpu_based_exec_ctrl. That's
+wrong because the variable may not consistent with the content in the
+CPU_BASE_VM_EXEC_CONTROL MSR.
+
+Signed-off-by: Sheng Yang <sheng.yang@intel.com>
+Signed-off-by: Avi Kivity <avi@qumranet.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kvm/vmx.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/kvm/vmx.c
++++ b/arch/x86/kvm/vmx.c
+@@ -1420,7 +1420,7 @@ static void ept_update_paging_mode_cr0(u
+ if (!(cr0 & X86_CR0_PG)) {
+ /* From paging/starting to nonpaging */
+ vmcs_write32(CPU_BASED_VM_EXEC_CONTROL,
+- vmcs_config.cpu_based_exec_ctrl |
++ vmcs_read32(CPU_BASED_VM_EXEC_CONTROL) |
+ (CPU_BASED_CR3_LOAD_EXITING |
+ CPU_BASED_CR3_STORE_EXITING));
+ vcpu->arch.cr0 = cr0;
+@@ -1430,7 +1430,7 @@ static void ept_update_paging_mode_cr0(u
+ } else if (!is_paging(vcpu)) {
+ /* From nonpaging to paging */
+ vmcs_write32(CPU_BASED_VM_EXEC_CONTROL,
+- vmcs_config.cpu_based_exec_ctrl &
++ vmcs_read32(CPU_BASED_VM_EXEC_CONTROL) &
+ ~(CPU_BASED_CR3_LOAD_EXITING |
+ CPU_BASED_CR3_STORE_EXITING));
+ vcpu->arch.cr0 = cr0;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:43 2008
+Message-Id: <20080730233143.123117683@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:59 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Joerg Roedel <joerg.roedel@amd.com>,
+ Avi Kivity <avi@qumranet.com>
+Subject: [patch 09/62] KVM: SVM: fix suspend/resume support
+Content-Disposition: inline; filename=kvm-svm-fix-suspend-resume-support.patch
+Content-Length: 2117
+Lines: 78
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Joerg Roedel <joerg.roedel@amd.com>
+
+Original-Commit-Hash: ab6267b708bec563891294488f2e854be404bdaf
+
+On suspend the svm_hardware_disable function is called which frees all svm_data
+variables. On resume they are not re-allocated. This patch removes the
+deallocation of svm_data from the hardware_disable function to the
+hardware_unsetup function which is not called on suspend.
+
+Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Avi Kivity <avi@qumranet.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ arch/x86/kvm/svm.c | 34 ++++++++++++++++++++++------------
+ 1 file changed, 22 insertions(+), 12 deletions(-)
+
+--- a/arch/x86/kvm/svm.c
++++ b/arch/x86/kvm/svm.c
+@@ -270,19 +270,11 @@ static int has_svm(void)
+
+ static void svm_hardware_disable(void *garbage)
+ {
+- struct svm_cpu_data *svm_data
+- = per_cpu(svm_data, raw_smp_processor_id());
+-
+- if (svm_data) {
+- uint64_t efer;
++ uint64_t efer;
+
+- wrmsrl(MSR_VM_HSAVE_PA, 0);
+- rdmsrl(MSR_EFER, efer);
+- wrmsrl(MSR_EFER, efer & ~MSR_EFER_SVME_MASK);
+- per_cpu(svm_data, raw_smp_processor_id()) = NULL;
+- __free_page(svm_data->save_area);
+- kfree(svm_data);
+- }
++ wrmsrl(MSR_VM_HSAVE_PA, 0);
++ rdmsrl(MSR_EFER, efer);
++ wrmsrl(MSR_EFER, efer & ~MSR_EFER_SVME_MASK);
+ }
+
+ static void svm_hardware_enable(void *garbage)
+@@ -321,6 +313,19 @@ static void svm_hardware_enable(void *ga
+ page_to_pfn(svm_data->save_area) << PAGE_SHIFT);
+ }
+
++static void svm_cpu_uninit(int cpu)
++{
++ struct svm_cpu_data *svm_data
++ = per_cpu(svm_data, raw_smp_processor_id());
++
++ if (!svm_data)
++ return;
++
++ per_cpu(svm_data, raw_smp_processor_id()) = NULL;
++ __free_page(svm_data->save_area);
++ kfree(svm_data);
++}
++
+ static int svm_cpu_init(int cpu)
+ {
+ struct svm_cpu_data *svm_data;
+@@ -458,6 +463,11 @@ err:
+
+ static __exit void svm_hardware_unsetup(void)
+ {
++ int cpu;
++
++ for_each_online_cpu(cpu)
++ svm_cpu_uninit(cpu);
++
+ __free_pages(pfn_to_page(iopm_base >> PAGE_SHIFT), IOPM_ALLOC_ORDER);
+ iopm_base = 0;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:43 2008
+Message-Id: <20080730233143.275857487@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:00 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Marcelo Tosatti <mtosatti@redhat.com>,
+ Avi Kivity <avi@qumranet.com>
+Subject: [patch 10/62] KVM: mmu_shrink: kvm_mmu_zap_page requires slots_lock to be held
+Content-Disposition: inline; filename=kvm-mmu_shrink-kvm_mmu_zap_page-requires-slots_lock-to-be-held.patch
+Content-Length: 1124
+Lines: 41
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Marcelo Tosatti <mtosatti@redhat.com>
+
+Original-Commit-Hash: 64f6a0c041bd8fc100a0d655058bdbc31feda03c
+
+kvm_mmu_zap_page() needs slots lock held (rmap_remove->gfn_to_memslot,
+for example).
+
+Since kvm_lock spinlock is held in mmu_shrink(), do a non-blocking
+down_read_trylock().
+
+Untested.
+
+Signed-off-by: Avi Kivity <avi@qumranet.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kvm/mmu.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/arch/x86/kvm/mmu.c
++++ b/arch/x86/kvm/mmu.c
+@@ -1968,6 +1968,8 @@ static int mmu_shrink(int nr_to_scan, gf
+ list_for_each_entry(kvm, &vm_list, vm_list) {
+ int npages;
+
++ if (!down_read_trylock(&kvm->slots_lock))
++ continue;
+ spin_lock(&kvm->mmu_lock);
+ npages = kvm->arch.n_alloc_mmu_pages -
+ kvm->arch.n_free_mmu_pages;
+@@ -1980,6 +1982,7 @@ static int mmu_shrink(int nr_to_scan, gf
+ nr_to_scan--;
+
+ spin_unlock(&kvm->mmu_lock);
++ up_read(&kvm->slots_lock);
+ }
+ if (kvm_freed)
+ list_move_tail(&kvm_freed->vm_list, &vm_list);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:43 2008
+Message-Id: <20080730233143.427506998@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31: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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Sheng Yang <sheng.yang@intel.com>,
+ Avi Kivity <avi@qumranet.com>
+Subject: [patch 11/62] KVM: VMX: Add ept_sync_context in flush_tlb
+Content-Disposition: inline; filename=kvm-vmx-add-ept_sync_context-in-flush_tlb.patch
+Content-Length: 1233
+Lines: 39
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Sheng Yang <sheng.yang@intel.com>
+
+Original-Commit-Hash: 73f785350b92e1a3af945340f7d10f3978193cba
+
+Fix a potention issue caused by kvm_mmu_slot_remove_write_access(). The
+old behavior don't sync EPT TLB with modified EPT entry, which result
+in inconsistent content of EPT TLB and EPT table.
+
+Signed-off-by: Sheng Yang <sheng.yang@intel.com>
+Signed-off-by: Avi Kivity <avi@qumranet.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ arch/x86/kvm/vmx.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/arch/x86/kvm/vmx.c
++++ b/arch/x86/kvm/vmx.c
+@@ -88,6 +88,7 @@ static inline struct vcpu_vmx *to_vmx(st
+ }
+
+ static int init_rmode(struct kvm *kvm);
++static u64 construct_eptp(unsigned long root_hpa);
+
+ static DEFINE_PER_CPU(struct vmcs *, vmxarea);
+ static DEFINE_PER_CPU(struct vmcs *, current_vmcs);
+@@ -1389,6 +1390,8 @@ static void exit_lmode(struct kvm_vcpu *
+ static void vmx_flush_tlb(struct kvm_vcpu *vcpu)
+ {
+ vpid_sync_vcpu_all(to_vmx(vcpu));
++ if (vm_need_ept())
++ ept_sync_context(construct_eptp(vcpu->arch.mmu.root_hpa));
+ }
+
+ static void vmx_decache_cr4_guest_bits(struct kvm_vcpu *vcpu)
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:43 2008
+Message-Id: <20080730233143.582669875@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31: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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mohammed Gamal <m.gamal005@gmail.com>,
+ Avi Kivity <avi@qumranet.com>
+Subject: [patch 12/62] KVM: x86 emulator: Fix HLT instruction
+Content-Disposition: inline; filename=kvm-x86-emulator-fix-hlt-instruction.patch
+Content-Length: 1095
+Lines: 36
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Mohammed Gamal <m.gamal005@gmail.com>
+
+Original-Commit-Hash: bcc542267538e9ba933d08b4cd4ebd796e03a3d7
+
+This patch fixes issue encountered with HLT instruction
+under FreeDOS's HIMEM XMS Driver.
+
+The HLT instruction jumped directly to the done label and
+skips updating the EIP value, therefore causing the guest
+to spin endlessly on the same instruction.
+
+The patch changes the instruction so that it writes back
+the updated EIP value.
+
+Signed-off-by: Mohammed Gamal <m.gamal005@gmail.com>
+Signed-off-by: Avi Kivity <avi@qumranet.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kvm/x86_emulate.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/kvm/x86_emulate.c
++++ b/arch/x86/kvm/x86_emulate.c
+@@ -1666,7 +1666,7 @@ special_insn:
+ break;
+ case 0xf4: /* hlt */
+ ctxt->vcpu->arch.halt_request = 1;
+- goto done;
++ break;
+ case 0xf5: /* cmc */
+ /* complement carry flag from eflags reg */
+ ctxt->eflags ^= EFLG_CF;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:43 2008
+Message-Id: <20080730233143.752732480@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31: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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Marcelo Tosatti <mtosatti@redhat.com>,
+ Avi Kivity <avi@qumranet.com>
+Subject: [patch 13/62] KVM: MMU: nuke shadowed pgtable pages and ptes on memslot destruction
+Content-Disposition: inline; filename=kvm-mmu-nuke-shadowed-pgtable-pages-and-ptes-on-memslot-destruction.patch
+Content-Length: 2607
+Lines: 96
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Marcelo Tosatti <mtosatti@redhat.com>
+
+Original-Commit-Hash: 3cc312f03e06a8fa39ecb4cc0189efc2bd888899
+
+Flush the shadow mmu before removing regions to avoid stale entries.
+
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Avi Kivity <avi@qumranet.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/ia64/kvm/kvm-ia64.c | 3 +++
+ arch/powerpc/kvm/powerpc.c | 4 ++++
+ arch/s390/kvm/kvm-s390.c | 4 ++++
+ arch/x86/kvm/x86.c | 5 +++++
+ include/linux/kvm_host.h | 1 +
+ virt/kvm/kvm_main.c | 3 +++
+ 6 files changed, 20 insertions(+)
+
+--- a/arch/ia64/kvm/kvm-ia64.c
++++ b/arch/ia64/kvm/kvm-ia64.c
+@@ -1460,6 +1460,9 @@ int kvm_arch_set_memory_region(struct kv
+ return 0;
+ }
+
++void kvm_arch_flush_shadow(struct kvm *kvm)
++{
++}
+
+ long kvm_arch_dev_ioctl(struct file *filp,
+ unsigned int ioctl, unsigned long arg)
+--- a/arch/powerpc/kvm/powerpc.c
++++ b/arch/powerpc/kvm/powerpc.c
+@@ -167,6 +167,10 @@ int kvm_arch_set_memory_region(struct kv
+ return 0;
+ }
+
++void kvm_arch_flush_shadow(struct kvm *kvm)
++{
++}
++
+ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id)
+ {
+ struct kvm_vcpu *vcpu;
+--- a/arch/s390/kvm/kvm-s390.c
++++ b/arch/s390/kvm/kvm-s390.c
+@@ -672,6 +672,10 @@ int kvm_arch_set_memory_region(struct kv
+ return 0;
+ }
+
++void kvm_arch_flush_shadow(struct kvm *kvm)
++{
++}
++
+ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn)
+ {
+ return gfn;
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -4016,6 +4016,11 @@ int kvm_arch_set_memory_region(struct kv
+ return 0;
+ }
+
++void kvm_arch_flush_shadow(struct kvm *kvm)
++{
++ kvm_mmu_zap_all(kvm);
++}
++
+ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
+ {
+ return vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE
+--- a/include/linux/kvm_host.h
++++ b/include/linux/kvm_host.h
+@@ -166,6 +166,7 @@ int kvm_arch_set_memory_region(struct kv
+ struct kvm_userspace_memory_region *mem,
+ struct kvm_memory_slot old,
+ int user_alloc);
++void kvm_arch_flush_shadow(struct kvm *kvm);
+ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn);
+ struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn);
+ unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn);
+--- a/virt/kvm/kvm_main.c
++++ b/virt/kvm/kvm_main.c
+@@ -377,6 +377,9 @@ int __kvm_set_memory_region(struct kvm *
+ if (mem->slot >= kvm->nmemslots)
+ kvm->nmemslots = mem->slot + 1;
+
++ if (!npages)
++ kvm_arch_flush_shadow(kvm);
++
+ *memslot = new;
+
+ r = kvm_arch_set_memory_region(kvm, mem, old, user_alloc);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:44 2008
+Message-Id: <20080730233143.908112912@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31: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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Avi Kivity <avi@qumranet.com>
+Subject: [patch 14/62] KVM: MMU: Fix potential race setting upper shadow ptes on nonpae hosts
+Content-Disposition: inline; filename=kvm-mmu-fix-potential-race-setting-upper-shadow-ptes-on-nonpae-hosts.patch
+Content-Length: 1253
+Lines: 39
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Avi Kivity <avi@qumranet.com>
+
+Original-Commit-Hash: c23a6fe17abf8562e675465f8d55ba1a551d314d
+
+The direct mapped shadow code (used for real mode and two dimensional paging)
+sets upper-level ptes using direct assignment rather than calling
+set_shadow_pte(). A nonpae host will split this into two writes, which opens
+up a race if another vcpu accesses the same memory area.
+
+Fix by calling set_shadow_pte() instead of assigning directly.
+
+Noticed by Izik Eidus.
+
+Signed-off-by: Avi Kivity <avi@qumranet.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ arch/x86/kvm/mmu.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/kvm/mmu.c
++++ b/arch/x86/kvm/mmu.c
+@@ -1171,9 +1171,10 @@ static int __direct_map(struct kvm_vcpu
+ return -ENOMEM;
+ }
+
+- table[index] = __pa(new_table->spt)
+- | PT_PRESENT_MASK | PT_WRITABLE_MASK
+- | shadow_user_mask | shadow_x_mask;
++ set_shadow_pte(&table[index],
++ __pa(new_table->spt)
++ | PT_PRESENT_MASK | PT_WRITABLE_MASK
++ | shadow_user_mask | shadow_x_mask);
+ }
+ table_addr = table[index] & PT64_BASE_ADDR_MASK;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:44 2008
+Message-Id: <20080730233144.086736103@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:05 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Roland McGrath <roland@redhat.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 15/62] Patch Upstream: x86 ptrace: fix PTRACE_GETFPXREGS error
+Content-Disposition: inline; filename=patch-upstream-x86-ptrace-fix-ptrace_getfpxregs-error.patch
+Content-Length: 1798
+Lines: 59
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Roland McGrath <roland@redhat.com>
+
+commit 45fdc3a7624a4a48185a04ae0abab5f9793d8952 upstream
+
+ptrace has always returned only -EIO for all failures to access
+registers. The user_regset calls are allowed to return a more
+meaningful variety of errors. The REGSET_XFP calls use -ENODEV
+for !cpu_has_fxsr hardware. Make ptrace return the traditional
+-EIO instead of the error code from the user_regset call.
+
+Signed-off-by: Roland McGrath <roland@redhat.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/i387.c | 4 ++--
+ arch/x86/kernel/ptrace.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/arch/x86/kernel/i387.c
++++ b/arch/x86/kernel/i387.c
+@@ -162,7 +162,7 @@ int xfpregs_get(struct task_struct *targ
+ int ret;
+
+ if (!cpu_has_fxsr)
+- return -EIO;
++ return -ENODEV;
+
+ ret = init_fpu(target);
+ if (ret)
+@@ -179,7 +179,7 @@ int xfpregs_set(struct task_struct *targ
+ int ret;
+
+ if (!cpu_has_fxsr)
+- return -EIO;
++ return -ENODEV;
+
+ ret = init_fpu(target);
+ if (ret)
+--- a/arch/x86/kernel/ptrace.c
++++ b/arch/x86/kernel/ptrace.c
+@@ -943,13 +943,13 @@ long arch_ptrace(struct task_struct *chi
+ return copy_regset_to_user(child, &user_x86_32_view,
+ REGSET_XFP,
+ 0, sizeof(struct user_fxsr_struct),
+- datap);
++ datap) ? -EIO : 0;
+
+ case PTRACE_SETFPXREGS: /* Set the child extended FPU state. */
+ return copy_regset_from_user(child, &user_x86_32_view,
+ REGSET_XFP,
+ 0, sizeof(struct user_fxsr_struct),
+- datap);
++ datap) ? -EIO : 0;
+ #endif
+
+ #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:44 2008
+Message-Id: <20080730233144.255515445@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:06 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
+ Peter Zijlstra <a.p.zijlstra@chello.nl>,
+ Josh Triplett <josh@kernel.org>,
+ Dipankar Sarma <dipankar@in.ibm.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 16/62] rcu: fix rcu_try_flip_waitack_needed() to prevent grace-period stall
+Content-Disposition: inline; filename=rcu-fix-rcu_try_flip_waitack_needed-to-prevent-grace-period-stall.patch
+Content-Length: 3058
+Lines: 78
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+
+commit d7c0651390b6a03ad53f99faec0ba88109d7191d upstream
+
+The comment was correct -- need to make the code match the comment.
+Without this patch, if a CPU goes dynticks idle (and stays there forever)
+in just the right phase of preemptible-RCU grace-period processing,
+grace periods stall. The offending sequence of events (courtesy
+of Promela/spin, at least after I got the liveness criterion coded
+correctly...) is as follows:
+
+o CPU 0 is in dynticks-idle mode. Its dynticks_progress_counter
+ is (say) 10.
+
+o CPU 0 takes an interrupt, so rcu_irq_enter() increments CPU 0's
+ dynticks_progress_counter to 11.
+
+o CPU 1 is doing RCU grace-period processing in rcu_try_flip_idle(),
+ sees rcu_pending(), so invokes dyntick_save_progress_counter(),
+ which in turn takes a snapshot of CPU 0's dynticks_progress_counter
+ into CPU 0's rcu_dyntick_snapshot -- now set to 11. CPU 1 then
+ updates the RCU grace-period state to rcu_try_flip_waitack().
+
+o CPU 0 returns from its interrupt, so rcu_irq_exit() increments
+ CPU 0's dynticks_progress_counter to 12.
+
+o CPU 1 later invokes rcu_try_flip_waitack(), which notices that
+ CPU 0 has not yet responded, and hence in turn invokes
+ rcu_try_flip_waitack_needed(). This function examines the
+ state of CPU 0's dynticks_progress_counter and rcu_dyntick_snapshot
+ variables, which it copies to curr (== 12) and snap (== 11),
+ respectively.
+
+ Because curr!=snap, the first condition fails.
+
+ Because curr-snap is only 1 and snap is odd, the second
+ condition fails.
+
+ rcu_try_flip_waitack_needed() therefore incorrectly concludes
+ that it must wait for CPU 0 to explicitly acknowledge the
+ counter flip.
+
+o CPU 0 remains forever in dynticks-idle mode, never taking
+ any more hardware interrupts or any NMIs, and never running
+ any more tasks. (Of course, -something- will usually eventually
+ happen, which might be why we haven't seen this one in the
+ wild. Still should be fixed!)
+
+Therefore the grace period never ends. Fix is to make the code match
+the comment, as shown below. With this fix, the above scenario
+would be satisfied with curr being even, and allow the grace period
+to proceed.
+
+Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Cc: Josh Triplett <josh@kernel.org>
+Cc: Dipankar Sarma <dipankar@in.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/rcupreempt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/rcupreempt.c
++++ b/kernel/rcupreempt.c
+@@ -567,7 +567,7 @@ rcu_try_flip_waitack_needed(int cpu)
+ * that this CPU already acknowledged the counter.
+ */
+
+- if ((curr - snap) > 2 || (snap & 0x1) == 0)
++ if ((curr - snap) > 2 || (curr & 0x1) == 0)
+ return 0;
+
+ /* We need this CPU to explicitly acknowledge the counter flip. */
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:44 2008
+Message-Id: <20080730233144.431259220@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:07 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Herton Ronaldo Krzesinski <herton@mandriva.com.br>,
+ "Luiz Fernando N. Capitulino" <lcapitulino@mandriva.com.br>,
+ Roland McGrath <roland@redhat.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 17/62] Fix typos from signal_32/64.h merge
+Content-Disposition: inline; filename=fix-typos-from-signal_32-64.h-merge.patch
+Content-Length: 1305
+Lines: 41
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
+
+commit 723edb5060855ef36ddeca51a070784b0e0d16df upstream
+
+Fallout from commit 33185c504f8e521b398536b5a8d415779a24593c ("x86:
+merge signal_32/64.h")
+
+Thanks to Dick Streefland who provided an useful testcase on
+http://lkml.org/lkml/2008/3/17/205 (only applicable to 2.6.24.x), that
+helped a lot as a deterministic way to bisect an issue that leaded to
+this fix.
+
+Signed-off-by: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
+Signed-off-by: Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>
+Cc: Roland McGrath <roland@redhat.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-x86/signal.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/include/asm-x86/signal.h
++++ b/include/asm-x86/signal.h
+@@ -181,12 +181,12 @@ typedef struct sigaltstack {
+ #ifdef __KERNEL__
+ #include <asm/sigcontext.h>
+
+-#ifdef __386__
++#ifdef __i386__
+
+ #define __HAVE_ARCH_SIG_BITOPS
+
+ #define sigaddset(set,sig) \
+- (__builtin_constantp(sig) \
++ (__builtin_constant_p(sig) \
+ ? __const_sigaddset((set), (sig)) \
+ : __gen_sigaddset((set), (sig)))
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:44 2008
+Message-Id: <20080730233144.599133908@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:08 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 18/62] x86 reboot quirks: add Dell Precision WorkStation T5400
+Content-Disposition: inline; filename=x86-reboot-quirks-add-dell-precision-workstation-t5400.patch
+Content-Length: 1083
+Lines: 37
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Ingo Molnar <mingo@elte.hu>
+
+commit fab3b58d3b242b5903f78d60d86803a8aecdf6de upstream
+
+as reported in:
+
+ "reboot=bios is mandatory on Dell T5400 server."
+ http://bugzilla.kernel.org/show_bug.cgi?id=11108
+
+add a DMI reboot quirk.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/reboot.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/arch/x86/kernel/reboot.c
++++ b/arch/x86/kernel/reboot.c
+@@ -177,6 +177,14 @@ static struct dmi_system_id __initdata r
+ DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"),
+ },
+ },
++ { /* Handle problems with rebooting on Dell T5400's */
++ .callback = set_bios_reboot,
++ .ident = "Dell Precision T5400",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"),
++ },
++ },
+ { /* Handle problems with rebooting on HP laptops */
+ .callback = set_bios_reboot,
+ .ident = "HP Compaq Laptop",
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:44 2008
+Message-Id: <20080730233144.779012706@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:09 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Oliver Neukum <oneukum@suse.de>
+Subject: [patch 19/62] USB: fix usb serial pm counter decrement for disconnected interfaces
+Content-Disposition: inline; filename=usb-fix-usb-serial-pm-counter-decrement-for-disconnected-interfaces.patch
+Content-Length: 1087
+Lines: 32
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Oliver Neukum <oliver@neukum.org>
+
+commit 62ad296b6ca78bd123864c138814c0a597873693 upstream
+
+usb serial decrements the pm counter even if an interface has been
+disconnected. If it was a logical disconnect the interface may belong
+already to another driver. This patch introduces a check for disconnected
+interfaces.
+
+Signed-off-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/usb-serial.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/usb-serial.c
++++ b/drivers/usb/serial/usb-serial.c
+@@ -283,7 +283,10 @@ static void serial_close(struct tty_stru
+ }
+
+ if (port->open_count == 0) {
+- usb_autopm_put_interface(port->serial->interface);
++ mutex_lock(&port->serial->disc_mutex);
++ if (!port->serial->disconnected)
++ usb_autopm_put_interface(port->serial->interface);
++ mutex_unlock(&port->serial->disc_mutex);
+ module_put(port->serial->type->driver.owner);
+ }
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:45 2008
+Message-Id: <20080730233144.968798699@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:10 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "Rafael J. Wysocki" <rjw@sisk.pl>,
+ Thomas Gleixner <tglx@linutronix.de>,
+ "H. Peter Anvin" <hpa@zytor.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 20/62] x86, suspend, acpi: enter Big Real Mode
+Content-Disposition: inline; filename=x86-suspend-acpi-enter-big-real-mode.patch
+Content-Length: 3172
+Lines: 77
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: H. Peter Anvin <hpa@zytor.com>
+
+Commit 3bf2e77453a87c22eb57ed4926760ac131c84459 upstream
+
+x86, suspend, acpi: enter Big Real Mode
+
+The explanation for recent video BIOS suspend quirk failures is that
+the VESA BIOS expects to be entered in Big Real Mode (*.limit = 0xffffffff)
+instead of ordinary Real Mode (*.limit = 0xffff).
+
+This patch changes the segment descriptors to Big Real Mode instead.
+
+The segment descriptor registers (what Intel calls "segment cache") is
+always active. The only thing that changes based on CR0.PE is how it is
+*loaded* and the interpretation of the CS flags.
+
+The segment descriptor registers contain of the following sub-registers:
+selector (the "visible" part), base, limit and flags. In protected mode
+or long mode, they are loaded from descriptors (or fs.base or gs.base can
+be manipulated directly in long mode.) In real mode, the only thing
+changed by a segment register load is the selector and the base, where the
+base <- selector << 4. In particular, *the limit and the flags are not
+changed*.
+
+As far as the handling of the CS flags: a code segment cannot be writable
+in protected mode, whereas it is "just another segment" in real mode, so
+there is some kind of quirk that kicks in for this when CR0.PE <- 0. I'm
+not sure if this is accomplished by actually changing the cs.flags register
+or just changing the interpretation; it might be something that is
+CPU-specific. In particular, the Transmeta CPUs had an explicit "CS is
+writable if you're in real mode" override, so even if you had loaded CS
+with an execute-only segment it'd be writable (but not readable!) on return
+to real mode. I'm not at all sure if that is how other CPUs behave.
+
+Signed-off-by: "H. Peter Anvin" <hpa@zytor.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+
+---
+ arch/x86/kernel/acpi/sleep.c | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+--- a/arch/x86/kernel/acpi/sleep.c
++++ b/arch/x86/kernel/acpi/sleep.c
+@@ -23,6 +23,15 @@ static unsigned long acpi_realmode;
+ static char temp_stack[10240];
+ #endif
+
++/* XXX: this macro should move to asm-x86/segment.h and be shared with the
++ boot code... */
++#define GDT_ENTRY(flags, base, limit) \
++ (((u64)(base & 0xff000000) << 32) | \
++ ((u64)flags << 40) | \
++ ((u64)(limit & 0x00ff0000) << 32) | \
++ ((u64)(base & 0x00ffffff) << 16) | \
++ ((u64)(limit & 0x0000ffff)))
++
+ /**
+ * acpi_save_state_mem - save kernel state
+ *
+@@ -58,11 +67,11 @@ int acpi_save_state_mem(void)
+ ((char *)&header->wakeup_gdt - (char *)acpi_realmode))
+ << 16);
+ /* GDT[1]: real-mode-like code segment */
+- header->wakeup_gdt[1] = (0x009bULL << 40) +
+- ((u64)acpi_wakeup_address << 16) + 0xffff;
++ header->wakeup_gdt[1] =
++ GDT_ENTRY(0x809b, acpi_wakeup_address, 0xfffff);
+ /* GDT[2]: real-mode-like data segment */
+- header->wakeup_gdt[2] = (0x0093ULL << 40) +
+- ((u64)acpi_wakeup_address << 16) + 0xffff;
++ header->wakeup_gdt[2] =
++ GDT_ENTRY(0x8093, acpi_wakeup_address, 0xfffff);
+
+ #ifndef CONFIG_64BIT
+ store_gdt((struct desc_ptr *)&header->pmode_gdt);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:45 2008
+Message-Id: <20080730233145.151109369@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:11 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
+ Roland McGrath <roland@redhat.com>,
+ Wenji Huang <wenji.huang@oracle.com>,
+ Takashi Nishiie <t-nishiie@np.css.fujitsu.com>
+Subject: [patch 21/62] markers: fix duplicate modpost entry
+Content-Disposition: inline; filename=markers-fix-duplicate-modpost-entry.patch
+Content-Length: 2449
+Lines: 76
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Mathieu Desnoyers <compudj@krystal.dyndns.org>
+
+commit: d35cb360c29956510b2fe1a953bd4968536f7216
+
+When a kernel was rebuilt, the previous Module.markers was not cleared.
+It caused markers with different format strings to appear as duplicates
+when a markers was changed. This problem is present since
+scripts/mod/modpost.c started to generate Module.markers, commit
+b2e3e658b344c6bcfb8fb694100ab2f2b5b2edb0
+
+It therefore applies to 2.6.25, 2.6.26 and linux-next.
+
+I merely merged the patches from Roland, Wenji and Takashi here.
+
+Credits to
+Roland McGrath <roland@redhat.com>
+Wenji Huang <wenji.huang@oracle.com>
+and
+Takashi Nishiie <t-nishiie@np.css.fujitsu.com>
+
+for providing the individual fixes.
+
+- Changelog :
+ - Integrated Takashi's Makefile modification to clear Module.markers upon
+ make clean.
+
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+Cc: Roland McGrath <roland@redhat.com>
+Cc: Wenji Huang <wenji.huang@oracle.com>
+Cc: Takashi Nishiie <t-nishiie@np.css.fujitsu.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Makefile | 3 ++-
+ scripts/Makefile.modpost | 1 +
+ scripts/mod/modpost.c | 3 ++-
+ 3 files changed, 5 insertions(+), 2 deletions(-)
+
+--- a/Makefile
++++ b/Makefile
+@@ -1133,7 +1133,8 @@ clean: archclean $(clean-dirs)
+ @find . $(RCS_FIND_IGNORE) \
+ \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
+ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
+- -o -name '*.symtypes' -o -name 'modules.order' \) \
++ -o -name '*.symtypes' -o -name 'modules.order' \
++ -o -name 'Module.markers' \) \
+ -type f -print | xargs rm -f
+
+ # mrproper - Delete all generated files, including .config
+--- a/scripts/Makefile.modpost
++++ b/scripts/Makefile.modpost
+@@ -101,6 +101,7 @@ quiet_cmd_kernel-mod = MODPOST $@
+ cmd_kernel-mod = $(modpost) $@
+
+ vmlinux.o: FORCE
++ @rm -fr $(kernelmarkersfile)
+ $(call cmd,kernel-mod)
+
+ # Declare generated files as targets for modpost
+--- a/scripts/mod/modpost.c
++++ b/scripts/mod/modpost.c
+@@ -1992,7 +1992,8 @@ static void read_markers(const char *fna
+ mod->skip = 1;
+ }
+
+- add_marker(mod, marker, fmt);
++ if (!mod->skip)
++ add_marker(mod, marker, fmt);
+ }
+ return;
+ fail:
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:45 2008
+Message-Id: <20080730233145.328480794@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:12 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Atsushi Nemoto <anemo@mba.ocn.ne.jp>,
+ Davide Libenzi <davidel@xmailserver.org>
+Subject: [patch 22/62] Fix build on COMPAT platforms when CONFIG_EPOLL is disabled
+Content-Disposition: inline; filename=fix-build-on-compat-platforms-when-config_epoll-is-disabled.patch
+Content-Length: 910
+Lines: 28
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
+
+commit 5f17156fc55abac476d180e480bedb0f07f01b14 upstream
+
+Add missing cond_syscall() entry for compat_sys_epoll_pwait.
+
+Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
+Cc: Davide Libenzi <davidel@xmailserver.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sys_ni.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/kernel/sys_ni.c
++++ b/kernel/sys_ni.c
+@@ -59,6 +59,7 @@ cond_syscall(sys_epoll_create);
+ cond_syscall(sys_epoll_ctl);
+ cond_syscall(sys_epoll_wait);
+ cond_syscall(sys_epoll_pwait);
++cond_syscall(compat_sys_epoll_pwait);
+ cond_syscall(sys_semget);
+ cond_syscall(sys_semop);
+ cond_syscall(sys_semtimedop);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:45 2008
+Message-Id: <20080730233145.638333233@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:14 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Miao Xie <miaox@cn.fujitsu.com>,
+ Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>,
+ Paul Jackson <pj@sgi.com>,
+ Nick Piggin <nickpiggin@yahoo.com.au>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 24/62] cpusets: fix wrong domain attr updates
+Content-Disposition: inline; filename=cpusets-fix-wrong-domain-attr-updates.patch
+Content-Length: 1037
+Lines: 35
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Miao Xie <miaox@cn.fujitsu.com>
+
+commit 91cd4d6ef0abb1f65e81f8fe37e7d3c10344e38c upstream
+
+Fix wrong domain attr updates, or we will always update the first sched
+domain attr.
+
+Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
+Cc: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
+Cc: Paul Jackson <pj@sgi.com>
+Cc: Nick Piggin <nickpiggin@yahoo.com.au>
+Cc: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/cpuset.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/kernel/cpuset.c
++++ b/kernel/cpuset.c
+@@ -679,7 +679,9 @@ restart:
+ if (apn == b->pn) {
+ cpus_or(*dp, *dp, b->cpus_allowed);
+ b->pn = -1;
+- update_domain_attr(dattr, b);
++ if (dattr)
++ update_domain_attr(dattr
++ + nslot, b);
+ }
+ }
+ nslot++;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:45 2008
+Message-Id: <20080730233145.794840555@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:15 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jan Kratochvil <jan.kratochvil@redhat.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 25/62] x86: fix crash due to missing debugctlmsr on AMD K6-3
+Content-Disposition: inline; filename=x86-fix-crash-due-to-missing-debugctlmsr-on-amd-k6-3.patch
+Content-Length: 1207
+Lines: 32
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+
+commit d536b1f86591fb081c7a56eab04e711eb4dab951 upstream
+
+currently if you use PTRACE_SINGLEBLOCK on AMD K6-3 (i586) it will crash.
+Kernel now wrongly assumes existing DEBUGCTLMSR MSR register there.
+
+Removed the assumption also for some other non-K6 CPUs but I am not sure there
+(but it can only bring small inefficiency there if my assumption is wrong).
+
+Based on info from Roland McGrath, Chuck Ebbert and Mikulas Patocka.
+More info at:
+ https://bugzilla.redhat.com/show_bug.cgi?id=456175
+
+Signed-off-by: Jan Kratochvil <jan.kratochvil@redhat.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/Kconfig.cpu | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/Kconfig.cpu
++++ b/arch/x86/Kconfig.cpu
+@@ -414,4 +414,4 @@ config X86_MINIMUM_CPU_FAMILY
+
+ config X86_DEBUGCTLMSR
+ def_bool y
+- depends on !(M586MMX || M586TSC || M586 || M486 || M386)
++ depends on !(MK6 || MWINCHIPC6 || MWINCHIP2 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486 || M386)
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:46 2008
+Message-Id: <20080730233145.979785569@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:16 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michael Buesch <mb@bu3sch.de>,
+ Jan Kara <jack@suse.cz>,
+ Arnd Bergmann <arnd@arndb.de>,
+ Borislav Petkov <petkovbb@googlemail.com>,
+ Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
+ Harvey Harrison <harvey.harrison@gmail.com>
+Subject: [patch 26/62] ide-cd: fix oops when using growisofs
+Content-Disposition: inline; filename=ide-cd-fix-oops-when-using-growisofs.patch
+Content-Length: 2146
+Lines: 67
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Jens Axboe <jens.axboe@oracle.com>
+
+commit e8e7b9eb11c34ee18bde8b7011af41938d1ad667 upstream
+
+cdrom_read_capacity() will blindly return the capacity from the device
+without sanity-checking it. This later causes code in fs/buffer.c to
+oops.
+
+Fix this by checking that the device is telling us sensible things.
+
+From: Jens Axboe <jens.axboe@oracle.com>
+Cc: Michael Buesch <mb@bu3sch.de>
+Cc: Jan Kara <jack@suse.cz>
+Cc: Arnd Bergmann <arnd@arndb.de>
+Cc: Borislav Petkov <petkovbb@googlemail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+[bart: print device name instead of driver name]
+Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
+[harvey: blocklen is a big-endian value]
+Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
+Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ide/ide-cd.c | 27 ++++++++++++++++++++++-----
+ 1 file changed, 22 insertions(+), 5 deletions(-)
+
+--- a/drivers/ide/ide-cd.c
++++ b/drivers/ide/ide-cd.c
+@@ -1308,13 +1308,30 @@ static int cdrom_read_capacity(ide_drive
+ req.cmd_flags |= REQ_QUIET;
+
+ stat = ide_cd_queue_pc(drive, &req);
+- if (stat == 0) {
+- *capacity = 1 + be32_to_cpu(capbuf.lba);
+- *sectors_per_frame =
+- be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
++ if (stat)
++ return stat;
++
++ /*
++ * Sanity check the given block size
++ */
++ switch (capbuf.blocklen) {
++ case __constant_cpu_to_be32(512):
++ case __constant_cpu_to_be32(1024):
++ case __constant_cpu_to_be32(2048):
++ case __constant_cpu_to_be32(4096):
++ break;
++ default:
++ printk(KERN_ERR "%s: weird block size %u\n",
++ drive->name, capbuf.blocklen);
++ printk(KERN_ERR "%s: default to 2kb block size\n",
++ drive->name);
++ capbuf.blocklen = __constant_cpu_to_be32(2048);
++ break;
+ }
+
+- return stat;
++ *capacity = 1 + be32_to_cpu(capbuf.lba);
++ *sectors_per_frame = be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
++ return 0;
+ }
+
+ static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:46 2008
+Message-Id: <20080730233146.143365578@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:17 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ David Brownell <dbrownell@users.sourceforge.net>,
+ Andrew Victor <avictor.za@gmail.com>
+Subject: [patch 27/62] rtc-at91rm9200: avoid spurious irqs
+Content-Disposition: inline; filename=rtc-at91rm9200-avoid-spurious-irqs.patch
+Content-Length: 2637
+Lines: 74
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: David Brownell <dbrownell@users.sourceforge.net>
+
+commit 449321b39f6c6ebfa15d6da24f134240bd51db29 upstream
+
+This fixes kernel http://bugzilla.kernel.org/show_bug.cgi?id=11112 (bogus
+RTC update IRQs reported) for rtc-at91rm9200 by scrubbing old IRQ status
+before enabling IRQs.
+
+It also removes nonfunctional periodic IRQ support from this driver;
+only update IRQs are reported, or provided by the hardware.
+
+I suspect some other RTCs probably have versions of #11112; it's easy to
+overlook, since most non-RTC drivers don't care about spurious IRQs:
+they're not reported to userspace.
+
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Report-by: W Unruh <unruh@physics.ubc.ca>
+Cc: Andrew Victor <avictor.za@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/rtc/rtc-at91rm9200.c | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
+
+--- a/drivers/rtc/rtc-at91rm9200.c
++++ b/drivers/rtc/rtc-at91rm9200.c
+@@ -175,8 +175,10 @@ static int at91_rtc_setalarm(struct devi
+ | BIN2BCD(tm.tm_mday) << 24
+ | AT91_RTC_DATEEN | AT91_RTC_MTHEN);
+
+- if (alrm->enabled)
++ if (alrm->enabled) {
++ at91_sys_write(AT91_RTC_SCCR, AT91_RTC_ALARM);
+ at91_sys_write(AT91_RTC_IER, AT91_RTC_ALARM);
++ }
+
+ pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__,
+ at91_alarm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour,
+@@ -195,28 +197,22 @@ static int at91_rtc_ioctl(struct device
+
+ pr_debug("%s(): cmd=%08x, arg=%08lx.\n", __func__, cmd, arg);
+
++ /* important: scrub old status before enabling IRQs */
+ switch (cmd) {
+ case RTC_AIE_OFF: /* alarm off */
+ at91_sys_write(AT91_RTC_IDR, AT91_RTC_ALARM);
+ break;
+ case RTC_AIE_ON: /* alarm on */
++ at91_sys_write(AT91_RTC_SCCR, AT91_RTC_ALARM);
+ at91_sys_write(AT91_RTC_IER, AT91_RTC_ALARM);
+ break;
+ case RTC_UIE_OFF: /* update off */
+- case RTC_PIE_OFF: /* periodic off */
+ at91_sys_write(AT91_RTC_IDR, AT91_RTC_SECEV);
+ break;
+ case RTC_UIE_ON: /* update on */
+- case RTC_PIE_ON: /* periodic on */
++ at91_sys_write(AT91_RTC_SCCR, AT91_RTC_SECEV);
+ at91_sys_write(AT91_RTC_IER, AT91_RTC_SECEV);
+ break;
+- case RTC_IRQP_READ: /* read periodic alarm frequency */
+- ret = put_user(AT91_RTC_FREQ, (unsigned long *) arg);
+- break;
+- case RTC_IRQP_SET: /* set periodic alarm frequency */
+- if (arg != AT91_RTC_FREQ)
+- ret = -EINVAL;
+- break;
+ default:
+ ret = -ENOIOCTLCMD;
+ break;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:46 2008
+Message-Id: <20080730233146.296310156@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:18 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jan Beulich <jbeulich@novell.com>,
+ Sam Ravnborg <sam@ravnborg.org>
+Subject: [patch 28/62] vmlinux.lds: move __attribute__((__cold__)) functions back into final .text section
+Content-Disposition: inline; filename=vmlinux.lds-move-__attribute__-functions-back-into-final-.text-section.patch
+Content-Length: 1570
+Lines: 45
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Jan Beulich <jbeulich@novell.com>
+
+commit fb5e2b379732e1a6ea32392980bb42e0212db842 upstream
+
+Due to the addition of __attribute__((__cold__)) to a few symbols
+without adjusting the linker scripts, those symbols currently may end
+up outside the [_stext,_etext) range, as they get placed in
+.text.unlikely by (at least) gcc 4.3.0. This may confuse code not only
+outside of the kernel, symbol_put_addr()'s BUG() could also trigger.
+Hence we need to add .text.unlikely (and for future uses of
+__attribute__((__hot__)) also .text.hot) to the TEXT_TEXT() macro.
+
+Issue observed by Lukas Lipavsky.
+
+Signed-off-by: Jan Beulich <jbeulich@novell.com>
+Tested-by: Lukas Lipavsky <llipavsky@suse.cz>
+Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-generic/vmlinux.lds.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/include/asm-generic/vmlinux.lds.h
++++ b/include/asm-generic/vmlinux.lds.h
+@@ -204,6 +204,7 @@
+ * during second ld run in second ld pass when generating System.map */
+ #define TEXT_TEXT \
+ ALIGN_FUNCTION(); \
++ *(.text.hot) \
+ *(.text) \
+ *(.ref.text) \
+ *(.text.init.refok) \
+@@ -213,7 +214,8 @@
+ CPU_KEEP(init.text) \
+ CPU_KEEP(exit.text) \
+ MEM_KEEP(init.text) \
+- MEM_KEEP(exit.text)
++ MEM_KEEP(exit.text) \
++ *(.text.unlikely)
+
+
+ /* sched.text is aling to function alignment to secure we have same
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:46 2008
+Message-Id: <20080730233146.467770565@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:19 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Nickolay Vinogradov <nickolay@protei.ru>,
+ Russell King <rmk+kernel@arm.linux.org.uk>
+Subject: [patch 29/62] ARM: fix fls() for 64-bit arguments
+Content-Disposition: inline; filename=arm-fix-fls-for-64-bit-arguments.patch
+Content-Length: 1269
+Lines: 39
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Andrew Morton <akpm@linux-foundation.org>
+
+commit 0c65f459ce6c8bd873a61b3ae1e57858ab1debf3 upstream
+
+arm's fls() is implemented as a macro, causing it to misbehave when passed
+64-bit arguments. Fix.
+
+Cc: Nickolay Vinogradov <nickolay@protei.ru>
+Tested-by: Krzysztof Halasa <khc@pm.waw.pl>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-arm/bitops.h | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+--- a/include/asm-arm/bitops.h
++++ b/include/asm-arm/bitops.h
+@@ -277,9 +277,16 @@ static inline int constant_fls(int x)
+ * the clz instruction for much better code efficiency.
+ */
+
+-#define fls(x) \
++#define __fls(x) \
+ ( __builtin_constant_p(x) ? constant_fls(x) : \
+ ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
++
++/* Implement fls() in C so that 64-bit args are suitably truncated */
++static inline int fls(int x)
++{
++ return __fls(x);
++}
++
+ #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); })
+ #define __ffs(x) (ffs(x) - 1)
+ #define ffz(x) __ffs( ~(x) )
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:46 2008
+Message-Id: <20080730233146.624240102@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:20 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 30/62] tcp: Clear probes_out more aggressively in tcp_ack().
+Content-Disposition: inline; filename=tcp-clear-probes_out-more-aggressively-in-tcp_ack.patch
+Content-Length: 11329
+Lines: 228
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: David S. Miller <davem@davemloft.net>
+
+[ Upstream commit 4b53fb67e385b856a991d402096379dab462170a ]
+
+This is based upon an excellent bug report from Eric Dumazet.
+
+tcp_ack() should clear ->icsk_probes_out even if there are packets
+outstanding. Otherwise if we get a sequence of ACKs while we do have
+packets outstanding over and over again, we'll never clear the
+probes_out value and eventually think the connection is too sick and
+we'll reset it.
+
+This appears to be some "optimization" added to tcp_ack() in the 2.4.x
+timeframe. In 2.2.x, probes_out is pretty much always cleared by
+tcp_ack().
+
+Here is Eric's original report:
+
+----------------------------------------
+Apparently, we can in some situations reset TCP connections in a couple of seconds when some frames are lost.
+
+In order to reproduce the problem, please try the following program on linux-2.6.25.*
+
+Setup some iptables rules to allow two frames per second sent on loopback interface to tcp destination port 12000
+
+iptables -N SLOWLO
+iptables -A SLOWLO -m hashlimit --hashlimit 2 --hashlimit-burst 1 --hashlimit-mode dstip --hashlimit-name slow2 -j ACCEPT
+iptables -A SLOWLO -j DROP
+
+iptables -A OUTPUT -o lo -p tcp --dport 12000 -j SLOWLO
+
+Then run the attached program and see the output :
+
+# ./loop
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+ESTAB 0 40 127.0.0.1:54455 127.0.0.1:12000 timer:(persist,200ms,1)
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+ESTAB 0 40 127.0.0.1:54455 127.0.0.1:12000 timer:(persist,200ms,3)
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+ESTAB 0 40 127.0.0.1:54455 127.0.0.1:12000 timer:(persist,200ms,5)
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+ESTAB 0 40 127.0.0.1:54455 127.0.0.1:12000 timer:(persist,200ms,7)
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+ESTAB 0 40 127.0.0.1:54455 127.0.0.1:12000 timer:(persist,200ms,9)
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+ESTAB 0 40 127.0.0.1:54455 127.0.0.1:12000 timer:(persist,200ms,11)
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+ESTAB 0 40 127.0.0.1:54455 127.0.0.1:12000 timer:(persist,201ms,13)
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+ESTAB 0 40 127.0.0.1:54455 127.0.0.1:12000 timer:(persist,188ms,15)
+write(): Connection timed out
+wrote 890 bytes but was interrupted after 9 seconds
+ESTAB 0 0 127.0.0.1:12000 127.0.0.1:54455
+Exiting read() because no data available (4000 ms timeout).
+read 860 bytes
+
+While this tcp session makes progress (sending frames with 50 bytes of payload, every 500ms), linux tcp stack decides to reset it, when tcp_retries 2 is reached (default value : 15)
+
+tcpdump :
+
+15:30:28.856695 IP 127.0.0.1.56554 > 127.0.0.1.12000: S 33788768:33788768(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 7>
+15:30:28.856711 IP 127.0.0.1.12000 > 127.0.0.1.56554: S 33899253:33899253(0) ack 33788769 win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 7>
+15:30:29.356947 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 1:61(60) ack 1 win 257
+15:30:29.356966 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 61 win 257
+15:30:29.866415 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 61:111(50) ack 1 win 257
+15:30:29.866427 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 111 win 257
+15:30:30.366516 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 111:161(50) ack 1 win 257
+15:30:30.366527 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 161 win 257
+15:30:30.876196 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 161:211(50) ack 1 win 257
+15:30:30.876207 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 211 win 257
+15:30:31.376282 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 211:261(50) ack 1 win 257
+15:30:31.376290 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 261 win 257
+15:30:31.885619 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 261:311(50) ack 1 win 257
+15:30:31.885631 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 311 win 257
+15:30:32.385705 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 311:361(50) ack 1 win 257
+15:30:32.385715 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 361 win 257
+15:30:32.895249 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 361:411(50) ack 1 win 257
+15:30:32.895266 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 411 win 257
+15:30:33.395341 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 411:461(50) ack 1 win 257
+15:30:33.395351 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 461 win 257
+15:30:33.918085 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 461:511(50) ack 1 win 257
+15:30:33.918096 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 511 win 257
+15:30:34.418163 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 511:561(50) ack 1 win 257
+15:30:34.418172 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 561 win 257
+15:30:34.927685 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 561:611(50) ack 1 win 257
+15:30:34.927698 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 611 win 257
+15:30:35.427757 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 611:661(50) ack 1 win 257
+15:30:35.427766 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 661 win 257
+15:30:35.937359 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 661:711(50) ack 1 win 257
+15:30:35.937376 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 711 win 257
+15:30:36.437451 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 711:761(50) ack 1 win 257
+15:30:36.437464 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 761 win 257
+15:30:36.947022 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 761:811(50) ack 1 win 257
+15:30:36.947039 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 811 win 257
+15:30:37.447135 IP 127.0.0.1.56554 > 127.0.0.1.12000: P 811:861(50) ack 1 win 257
+15:30:37.447203 IP 127.0.0.1.12000 > 127.0.0.1.56554: . ack 861 win 257
+15:30:41.448171 IP 127.0.0.1.12000 > 127.0.0.1.56554: F 1:1(0) ack 861 win 257
+15:30:41.448189 IP 127.0.0.1.56554 > 127.0.0.1.12000: R 33789629:33789629(0) win 0
+
+Source of program :
+
+/*
+ * small producer/consumer program.
+ * setup a listener on 127.0.0.1:12000
+ * Forks a child
+ * child connect to 127.0.0.1, and sends 10 bytes on this tcp socket every 100 ms
+ * Father accepts connection, and read all data
+ */
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <time.h>
+#include <sys/poll.h>
+
+int port = 12000;
+char buffer[4096];
+int main(int argc, char *argv[])
+{
+ int lfd = socket(AF_INET, SOCK_STREAM, 0);
+ struct sockaddr_in socket_address;
+ time_t t0, t1;
+ int on = 1, sfd, res;
+ unsigned long total = 0;
+ socklen_t alen = sizeof(socket_address);
+ pid_t pid;
+
+ time(&t0);
+ socket_address.sin_family = AF_INET;
+ socket_address.sin_port = htons(port);
+ socket_address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ if (lfd == -1) {
+ perror("socket()");
+ return 1;
+ }
+ setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(int));
+ if (bind(lfd, (struct sockaddr *)&socket_address, sizeof(socket_address)) == -1) {
+ perror("bind");
+ close(lfd);
+ return 1;
+ }
+ if (listen(lfd, 1) == -1) {
+ perror("listen()");
+ close(lfd);
+ return 1;
+ }
+ pid = fork();
+ if (pid == 0) {
+ int i, cfd = socket(AF_INET, SOCK_STREAM, 0);
+ close(lfd);
+ if (connect(cfd, (struct sockaddr *)&socket_address, sizeof(socket_address)) == -1) {
+ perror("connect()");
+ return 1;
+ }
+ for (i = 0 ; ;) {
+ res = write(cfd, "blablabla\n", 10);
+ if (res > 0) total += res;
+ else if (res == -1) {
+ perror("write()");
+ break;
+ } else break;
+ usleep(100000);
+ if (++i == 10) {
+ system("ss -on dst 127.0.0.1:12000");
+ i = 0;
+ }
+ }
+ time(&t1);
+ fprintf(stderr, "wrote %lu bytes but was interrupted after %g seconds\n", total, difftime(t1, t0));
+ system("ss -on | grep 127.0.0.1:12000");
+ close(cfd);
+ return 0;
+ }
+ sfd = accept(lfd, (struct sockaddr *)&socket_address, &alen);
+ if (sfd == -1) {
+ perror("accept");
+ return 1;
+ }
+ close(lfd);
+ while (1) {
+ struct pollfd pfd[1];
+ pfd[0].fd = sfd;
+ pfd[0].events = POLLIN;
+ if (poll(pfd, 1, 4000) == 0) {
+ fprintf(stderr, "Exiting read() because no data available (4000 ms timeout).\n");
+ break;
+ }
+ res = read(sfd, buffer, sizeof(buffer));
+ if (res > 0) total += res;
+ else if (res == 0) break;
+ else perror("read()");
+ }
+ fprintf(stderr, "read %lu bytes\n", total);
+ close(sfd);
+ return 0;
+}
+----------------------------------------
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/tcp_input.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/net/ipv4/tcp_input.c
++++ b/net/ipv4/tcp_input.c
+@@ -3273,6 +3273,7 @@ static int tcp_ack(struct sock *sk, stru
+ * log. Something worked...
+ */
+ sk->sk_err_soft = 0;
++ icsk->icsk_probes_out = 0;
+ tp->rcv_tstamp = tcp_time_stamp;
+ prior_packets = tp->packets_out;
+ if (!prior_packets)
+@@ -3305,8 +3306,6 @@ static int tcp_ack(struct sock *sk, stru
+ return 1;
+
+ no_queue:
+- icsk->icsk_probes_out = 0;
+-
+ /* If this ack opens up a zero window, clear backoff. It was
+ * being used to time the probes, and is probably far higher than
+ * it needs to be for normal retransmission.
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:46 2008
+Message-Id: <20080730233146.800297534@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:21 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 31/62] sparc64: Fix lockdep issues in LDC protocol layer.
+Content-Disposition: inline; filename=sparc64-fix-lockdep-issues-in-ldc-protocol-layer.patch
+Content-Length: 4127
+Lines: 149
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: David S. Miller <davem@davemloft.net>
+
+[ Upstream commit b7c2a75725dee9b5643a0aae3a4cb47f52e00a49 ]
+
+We're calling request_irq() with a IRQs disabled.
+
+No straightforward fix exists because we want to
+enable these IRQs and setup state atomically before
+getting into the IRQ handler the first time.
+
+What happens now is that we mark the VIRQ to not be
+automatically enabled by request_irq(). Then we
+make explicit enable_irq() calls when we grab the
+LDC channel.
+
+This way we don't need to call request_irq() illegally
+under the LDC channel lock any more.
+
+Bump LDC version and release date.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/sparc64/kernel/irq.c | 10 +++++++++-
+ arch/sparc64/kernel/ldc.c | 38 +++++++++++++++++++-------------------
+ 2 files changed, 28 insertions(+), 20 deletions(-)
+
+--- a/arch/sparc64/kernel/irq.c
++++ b/arch/sparc64/kernel/irq.c
+@@ -621,8 +621,9 @@ unsigned int sun4v_build_irq(u32 devhand
+ unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
+ {
+ struct irq_handler_data *data;
+- struct ino_bucket *bucket;
+ unsigned long hv_err, cookie;
++ struct ino_bucket *bucket;
++ struct irq_desc *desc;
+ unsigned int virt_irq;
+
+ bucket = kzalloc(sizeof(struct ino_bucket), GFP_ATOMIC);
+@@ -643,6 +644,13 @@ unsigned int sun4v_build_virq(u32 devhan
+ if (unlikely(!data))
+ return 0;
+
++ /* In order to make the LDC channel startup sequence easier,
++ * especially wrt. locking, we do not let request_irq() enable
++ * the interrupt.
++ */
++ desc = irq_desc + virt_irq;
++ desc->status |= IRQ_NOAUTOEN;
++
+ set_irq_chip_data(virt_irq, data);
+
+ /* Catch accidental accesses to these things. IMAP/ICLR handling
+--- a/arch/sparc64/kernel/ldc.c
++++ b/arch/sparc64/kernel/ldc.c
+@@ -1,6 +1,6 @@
+ /* ldc.c: Logical Domain Channel link-layer protocol driver.
+ *
+- * Copyright (C) 2007 David S. Miller <davem@davemloft.net>
++ * Copyright (C) 2007, 2008 David S. Miller <davem@davemloft.net>
+ */
+
+ #include <linux/kernel.h>
+@@ -23,8 +23,8 @@
+
+ #define DRV_MODULE_NAME "ldc"
+ #define PFX DRV_MODULE_NAME ": "
+-#define DRV_MODULE_VERSION "1.0"
+-#define DRV_MODULE_RELDATE "June 25, 2007"
++#define DRV_MODULE_VERSION "1.1"
++#define DRV_MODULE_RELDATE "July 22, 2008"
+
+ static char version[] __devinitdata =
+ DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
+@@ -1235,13 +1235,9 @@ int ldc_bind(struct ldc_channel *lp, con
+ unsigned long hv_err, flags;
+ int err = -EINVAL;
+
+- spin_lock_irqsave(&lp->lock, flags);
+-
+- if (!name)
+- goto out_err;
+-
+- if (lp->state != LDC_STATE_INIT)
+- goto out_err;
++ if (!name ||
++ (lp->state != LDC_STATE_INIT))
++ return -EINVAL;
+
+ snprintf(lp->rx_irq_name, LDC_IRQ_NAME_MAX, "%s RX", name);
+ snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name);
+@@ -1250,25 +1246,32 @@ int ldc_bind(struct ldc_channel *lp, con
+ IRQF_SAMPLE_RANDOM | IRQF_SHARED,
+ lp->rx_irq_name, lp);
+ if (err)
+- goto out_err;
++ return err;
+
+ err = request_irq(lp->cfg.tx_irq, ldc_tx,
+ IRQF_SAMPLE_RANDOM | IRQF_SHARED,
+ lp->tx_irq_name, lp);
+- if (err)
+- goto out_free_rx_irq;
++ if (err) {
++ free_irq(lp->cfg.rx_irq, lp);
++ return err;
++ }
++
+
++ spin_lock_irqsave(&lp->lock, flags);
++
++ enable_irq(lp->cfg.rx_irq);
++ enable_irq(lp->cfg.tx_irq);
+
+ lp->flags |= LDC_FLAG_REGISTERED_IRQS;
+
+ err = -ENODEV;
+ hv_err = sun4v_ldc_tx_qconf(lp->id, 0, 0);
+ if (hv_err)
+- goto out_free_tx_irq;
++ goto out_free_irqs;
+
+ hv_err = sun4v_ldc_tx_qconf(lp->id, lp->tx_ra, lp->tx_num_entries);
+ if (hv_err)
+- goto out_free_tx_irq;
++ goto out_free_irqs;
+
+ hv_err = sun4v_ldc_rx_qconf(lp->id, 0, 0);
+ if (hv_err)
+@@ -1304,14 +1307,11 @@ out_unmap_rx:
+ out_unmap_tx:
+ sun4v_ldc_tx_qconf(lp->id, 0, 0);
+
+-out_free_tx_irq:
++out_free_irqs:
+ lp->flags &= ~LDC_FLAG_REGISTERED_IRQS;
+ free_irq(lp->cfg.tx_irq, lp);
+-
+-out_free_rx_irq:
+ free_irq(lp->cfg.rx_irq, lp);
+
+-out_err:
+ spin_unlock_irqrestore(&lp->lock, flags);
+
+ return err;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:47 2008
+Message-Id: <20080730233146.961378690@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:22 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 32/62] sparc64: Fix cpufreq notifier registry.
+Content-Disposition: inline; filename=sparc64-fix-cpufreq-notifier-registry.patch
+Content-Length: 1344
+Lines: 49
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: David S. Miller <davem@davemloft.net>
+
+[ Upstream commit 7ae93f51d7fa8b9130d47e0b7d17979a165c5bc3 ]
+
+Based upon a report by Daniel Smolik.
+
+We do it too early, which triggers a BUG in
+cpufreq_register_notifier().
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/sparc64/kernel/time.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+--- a/arch/sparc64/kernel/time.c
++++ b/arch/sparc64/kernel/time.c
+@@ -883,6 +883,16 @@ static struct notifier_block sparc64_cpu
+ .notifier_call = sparc64_cpufreq_notifier
+ };
+
++static int __init register_sparc64_cpufreq_notifier(void)
++{
++
++ cpufreq_register_notifier(&sparc64_cpufreq_notifier_block,
++ CPUFREQ_TRANSITION_NOTIFIER);
++ return 0;
++}
++
++core_initcall(register_sparc64_cpufreq_notifier);
++
+ #endif /* CONFIG_CPU_FREQ */
+
+ static int sparc64_next_event(unsigned long delta,
+@@ -1049,11 +1059,6 @@ void __init time_init(void)
+ sparc64_clockevent.mult, sparc64_clockevent.shift);
+
+ setup_sparc64_timer();
+-
+-#ifdef CONFIG_CPU_FREQ
+- cpufreq_register_notifier(&sparc64_cpufreq_notifier_block,
+- CPUFREQ_TRANSITION_NOTIFIER);
+-#endif
+ }
+
+ unsigned long long sched_clock(void)
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:47 2008
+Message-Id: <20080730233147.124927479@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:23 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 33/62] sparc64: Do not define BIO_VMERGE_BOUNDARY.
+Content-Disposition: inline; filename=sparc64-do-not-define-bio_vmerge_boundary.patch
+Content-Length: 794
+Lines: 26
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: David S. Miller <davem@davemloft.net>
+
+[ Upstream commit 74988bd85d1cb97987534fd7ffbc570e81145418 ]
+
+The IOMMU code and the block layer can split things
+up using different rules, so this can't work reliably.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-sparc64/io.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/include/asm-sparc64/io.h
++++ b/include/asm-sparc64/io.h
+@@ -16,7 +16,6 @@
+ /* BIO layer definitions. */
+ extern unsigned long kern_base, kern_size;
+ #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
+-#define BIO_VMERGE_BOUNDARY 8192
+
+ static inline u8 _inb(unsigned long addr)
+ {
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:47 2008
+Message-Id: <20080730233147.275237156@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:24 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Kay Sievers <kay.sievers@vrfy.org>,
+ David Brownell <dbrownell@users.sourceforge.net>,
+ Dan Williams <dan.j.williams@intel.com>
+Subject: [patch 34/62] iop-adma: fix platform driver hotplug/coldplug
+Content-Disposition: inline; filename=iop-adma-fix-platform-driver-hotplug-coldplug.patch
+Content-Length: 1047
+Lines: 31
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Kay Sievers <kay.sievers@vrfy.org>
+
+commit ebabe2762607147d28aa395ea6df2a0ee7f795a1
+
+Since 43cc71eed1250755986da4c0f9898f9a635cb3bf, the platform
+modalias is prefixed with "platform:". Add MODULE_ALIAS() to most
+of the hotpluggable platform drivers, to re-enable auto loading.
+
+Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/dma/iop-adma.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/dma/iop-adma.c
++++ b/drivers/dma/iop-adma.c
+@@ -1387,6 +1387,8 @@ static void iop_chan_start_null_xor(stru
+ spin_unlock_bh(&iop_chan->lock);
+ }
+
++MODULE_ALIAS("platform:iop-adma");
++
+ static struct platform_driver iop_adma_driver = {
+ .probe = iop_adma_probe,
+ .remove = iop_adma_remove,
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:47 2008
+Message-Id: <20080730233147.436131627@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:25 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Brice Goglin <brice@myri.com>
+Subject: [patch 35/62] myri10ge: do not forget to setup the single slice pointers
+Content-Disposition: inline; filename=myri10ge-do-not-forget-to-setup-the-single-slice-pointers.patch
+Content-Length: 1296
+Lines: 37
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Brice Goglin <brice@myri.com>
+
+part of commit 0dcffac1a329be69bab0ac604bf7283737108e68 upstream
+(the upstream multislice patch contains the same fix within
+ myri10ge_alloc_slices() which does this for every slice)
+
+Even if we don't have multiple slices in myri10ge in 2.6.26,
+we already use some multislice-aware routines that need the
+slice state pointers to mgp and dev to be valid.
+
+This patch fixes a regression where configuring the interface up
+would oops in myri10ge_allocate_rings() when using ss->mgp
+(and later when using ss->dev).
+
+Oops reported and patch tested by Lukas Hejtmanek at
+http://lkml.org/lkml/2008/7/23/101
+
+Signed-off-by: Brice Goglin <brice@myri.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/myri10ge/myri10ge.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/net/myri10ge/myri10ge.c
++++ b/drivers/net/myri10ge/myri10ge.c
+@@ -3126,6 +3126,8 @@ static int myri10ge_probe(struct pci_dev
+
+ mgp = netdev_priv(netdev);
+ mgp->dev = netdev;
++ mgp->ss.mgp = mgp;
++ mgp->ss.dev = mgp->dev;
+ netif_napi_add(netdev, &mgp->ss.napi, myri10ge_poll, myri10ge_napi_weight);
+ mgp->pdev = pdev;
+ mgp->csum_flag = MXGEFW_FLAGS_CKSUM;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:47 2008
+Message-Id: <20080730233147.616233289@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:26 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Brice Goglin <brice@myri.com>
+Subject: [patch 36/62] myri10ge: do not use mgp->max_intr_slots before loading the firmware
+Content-Disposition: inline; filename=myri10ge-do-not-use-mgp-max_intr_slots-before-loading-the-firmware.patch
+Content-Length: 3175
+Lines: 98
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Brice Goglin <brice@myri.com>
+
+part of commit 0dcffac1a329be69bab0ac604bf7283737108e68 upstream
+(the upstream multislice patch contains this fix within a large
+ rework of the code since there is one rx_done ring per slice. The
+ old allocating is replaced by a call to myri10ge_probe_slices())
+
+
+Allocating the rx_done ring requires mgp->max_intr_slots to
+be valid, which requires that we already loaded the firmware
+we are going to use with this ring.
+So move the allocating after myri10ge_load_firmware()
+(but keep it before myri10ge_reset() which already needs the
+ rx_done ring).
+
+If fixedsa regression where loading the driver would not
+appear to do anything. Regression introduced in 2.6.26-rc3 by
+commit 014377a1df693ff30a9e8b69f0bbb0a38e601f75
+
+Reported and patch tested by Lukas Hejtmanek at
+http://lkml.org/lkml/2008/7/22/305
+Reproduced and patch tested also by me.
+
+Signed-off-by: Brice Goglin <brice@myri.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/myri10ge/myri10ge.c | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+--- a/drivers/net/myri10ge/myri10ge.c
++++ b/drivers/net/myri10ge/myri10ge.c
+@@ -3215,26 +3215,26 @@ static int myri10ge_probe(struct pci_dev
+ for (i = 0; i < ETH_ALEN; i++)
+ netdev->dev_addr[i] = mgp->mac_addr[i];
+
+- /* allocate rx done ring */
+- bytes = mgp->max_intr_slots * sizeof(*mgp->ss.rx_done.entry);
+- mgp->ss.rx_done.entry = dma_alloc_coherent(&pdev->dev, bytes,
+- &mgp->ss.rx_done.bus, GFP_KERNEL);
+- if (mgp->ss.rx_done.entry == NULL)
+- goto abort_with_ioremap;
+- memset(mgp->ss.rx_done.entry, 0, bytes);
+-
+ myri10ge_select_firmware(mgp);
+
+ status = myri10ge_load_firmware(mgp);
+ if (status != 0) {
+ dev_err(&pdev->dev, "failed to load firmware\n");
+- goto abort_with_rx_done;
++ goto abort_with_ioremap;
+ }
+
++ /* allocate rx done ring */
++ bytes = mgp->max_intr_slots * sizeof(*mgp->ss.rx_done.entry);
++ mgp->ss.rx_done.entry = dma_alloc_coherent(&pdev->dev, bytes,
++ &mgp->ss.rx_done.bus, GFP_KERNEL);
++ if (mgp->ss.rx_done.entry == NULL)
++ goto abort_with_firmware;
++ memset(mgp->ss.rx_done.entry, 0, bytes);
++
+ status = myri10ge_reset(mgp);
+ if (status != 0) {
+ dev_err(&pdev->dev, "failed reset\n");
+- goto abort_with_firmware;
++ goto abort_with_rx_done;
+ }
+
+ pci_set_drvdata(pdev, mgp);
+@@ -3260,7 +3260,7 @@ static int myri10ge_probe(struct pci_dev
+ * is set to correct value if MSI is enabled */
+ status = myri10ge_request_irq(mgp);
+ if (status != 0)
+- goto abort_with_firmware;
++ goto abort_with_rx_done;
+ netdev->irq = pdev->irq;
+ myri10ge_free_irq(mgp);
+
+@@ -3289,14 +3289,14 @@ static int myri10ge_probe(struct pci_dev
+ abort_with_state:
+ pci_restore_state(pdev);
+
+-abort_with_firmware:
+- myri10ge_dummy_rdma(mgp, 0);
+-
+ abort_with_rx_done:
+ bytes = mgp->max_intr_slots * sizeof(*mgp->ss.rx_done.entry);
+ dma_free_coherent(&pdev->dev, bytes,
+ mgp->ss.rx_done.entry, mgp->ss.rx_done.bus);
+
++abort_with_firmware:
++ myri10ge_dummy_rdma(mgp, 0);
++
+ abort_with_ioremap:
+ iounmap(mgp->sram);
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:47 2008
+Message-Id: <20080730233147.797161940@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:27 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Takashi Iwai <tiwai@suse.de>,
+ Pierre Ossman <drzeus@drzeus.cx>,
+ Jaroslav Kysela <perex@perex.cz>
+Subject: [patch 37/62] ALSA: trident - pause s/pdif output
+Content-Disposition: inline; filename=alsa-trident-pause-s-pdif-output.patch
+Content-Length: 1355
+Lines: 35
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Pierre Ossman <drzeus@drzeus.cx>
+
+Commit 981bcead3f2279a1ec6fb5f2c57aff79ed61a700 upstream.
+
+Stop the S/PDIF DMA engine and output when the device is told to pause.
+It will keep on looping the current buffer contents if this isn't done.
+
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+Tested-by: Rene Herman <rene.herman@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/trident/trident_main.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/sound/pci/trident/trident_main.c
++++ b/sound/pci/trident/trident_main.c
+@@ -1590,7 +1590,10 @@ static int snd_trident_trigger(struct sn
+ if (spdif_flag) {
+ if (trident->device != TRIDENT_DEVICE_ID_SI7018) {
+ outl(trident->spdif_pcm_bits, TRID_REG(trident, NX_SPCSTATUS));
+- outb(trident->spdif_pcm_ctrl, TRID_REG(trident, NX_SPCTRL_SPCSO + 3));
++ val = trident->spdif_pcm_ctrl;
++ if (!go)
++ val &= ~(0x28);
++ outb(val, TRID_REG(trident, NX_SPCTRL_SPCSO + 3));
+ } else {
+ outl(trident->spdif_pcm_bits, TRID_REG(trident, SI_SPDIF_CS));
+ val = inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)) | SPDIF_EN;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:48 2008
+Message-Id: <20080730233147.973431341@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:28 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Hans Verkuil <hverkuil@xs4all.nl>,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 38/62] V4L: cx18: Upgrade to newer firmware & update documentation
+Content-Disposition: inline; filename=v4l-cx18-upgrade-to-newer-firmware-update-documentation.patch
+Content-Length: 1879
+Lines: 53
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Hans Verkuil <hverkuil@xs4all.nl>
+
+(cherry picked from commit 1a3932e0ed9ca46db2b76ce067e4ebaf04d91ea1)
+
+V4L: cx18: Upgrade to newer firmware & update cx18 documentation
+
+Conexant graciously gave us permission to redistribute the
+firmware. Update the documentation where the firmware can be
+downloaded.
+
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/video4linux/cx18.txt | 12 +++---------
+ drivers/media/video/cx18/cx18-firmware.c | 2 +-
+ 2 files changed, 4 insertions(+), 10 deletions(-)
+
+--- a/Documentation/video4linux/cx18.txt
++++ b/Documentation/video4linux/cx18.txt
+@@ -23,14 +23,8 @@ encoder chip:
+
+ Firmware:
+
+-The firmware needs to be extracted from the Windows Hauppauge HVR-1600
+-driver, available here:
++You can obtain the firmware files here:
+
+-http://hauppauge.lightpath.net/software/install_cd/hauppauge_cd_3.4d1.zip
++http://dl.ivtvdriver.org/ivtv/firmware/cx18-firmware.tar.gz
+
+-Unzip, then copy the following files to the firmware directory
+-and rename them as follows:
+-
+-Drivers/Driver18/hcw18apu.rom -> v4l-cx23418-apu.fw
+-Drivers/Driver18/hcw18enc.rom -> v4l-cx23418-cpu.fw
+-Drivers/Driver18/hcw18mlC.rom -> v4l-cx23418-dig.fw
++Untar and copy the .fw files to your firmware directory.
+--- a/drivers/media/video/cx18/cx18-firmware.c
++++ b/drivers/media/video/cx18/cx18-firmware.c
+@@ -90,7 +90,7 @@
+ #define CX18_DSP0_INTERRUPT_MASK 0xd0004C
+
+ /* Encoder/decoder firmware sizes */
+-#define CX18_FW_CPU_SIZE (174716)
++#define CX18_FW_CPU_SIZE (158332)
+ #define CX18_FW_APU_SIZE (141200)
+
+ #define APU_ROM_SYNC1 0x6D676553 /* "mgeS" */
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:48 2008
+Message-Id: <20080730233148.136170740@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:29 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 39/62] DVB: dib0700: add support for Hauppauge Nova-TD Stick 52009
+Content-Disposition: inline; filename=dvb-dib0700-add-support-for-hauppauge-nova-td-stick-52009.patch
+Content-Length: 2161
+Lines: 57
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Michael Krufky <mkrufky@linuxtv.org>
+
+(cherry picked from commit d01eb2dc7d5265ec3bee9ec1b8ab79155e1310d6)
+
+DVB: dib0700: add support for Hauppauge Nova-TD Stick 52009
+
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/dvb/dvb-usb/dib0700_devices.c | 7 ++++++-
+ drivers/media/dvb/dvb-usb/dvb-usb-ids.h | 1 +
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+--- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
++++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
+@@ -1117,6 +1117,7 @@ struct usb_device_id dib0700_usb_id_tabl
+ { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_HT_EXPRESS) },
+ { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_XXS) },
+ { USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_STK7700P_2) },
++ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_TD_STICK_52009) },
+ { 0 } /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table);
+@@ -1372,7 +1373,7 @@ struct dvb_usb_device_properties dib0700
+ }
+ },
+
+- .num_device_descs = 2,
++ .num_device_descs = 3,
+ .devices = {
+ { "DiBcom STK7070PD reference design",
+ { &dib0700_usb_id_table[17], NULL },
+@@ -1381,6 +1382,10 @@ struct dvb_usb_device_properties dib0700
+ { "Pinnacle PCTV Dual DVB-T Diversity Stick",
+ { &dib0700_usb_id_table[18], NULL },
+ { NULL },
++ },
++ { "Hauppauge Nova-TD Stick (52009)",
++ { &dib0700_usb_id_table[35], NULL },
++ { NULL },
+ }
+ }
+ }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
+--- a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
++++ b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+@@ -132,6 +132,7 @@
+ #define USB_PID_HAUPPAUGE_NOVA_T_STICK_3 0x7070
+ #define USB_PID_HAUPPAUGE_MYTV_T 0x7080
+ #define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580
++#define USB_PID_HAUPPAUGE_NOVA_TD_STICK_52009 0x5200
+ #define USB_PID_AVERMEDIA_EXPRESS 0xb568
+ #define USB_PID_AVERMEDIA_VOLAR 0xa807
+ #define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:48 2008
+Message-Id: <20080730233148.311010698@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:30 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Laurent Pinchart <laurent.pinchart@skynet.be>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 40/62] V4L: uvcvideo: Fix a buffer overflow in format descriptor parsing
+Content-Disposition: inline; filename=v4l-uvcvideo-fix-a-buffer-overflow-in-format-descriptor-parsing.patch
+Content-Length: 1143
+Lines: 31
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Laurent Pinchart <laurent.pinchart@skynet.be>
+
+(cherry picked from commit 233548a2fd934a0220db8b1521c0bc88c82e5e53)
+
+V4L: uvcvideo: Fix a buffer overflow in format descriptor parsing
+
+Thanks to Oliver Neukum for catching and reporting this bug.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/uvc/uvc_driver.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/media/video/uvc/uvc_driver.c
++++ b/drivers/media/video/uvc/uvc_driver.c
+@@ -298,7 +298,8 @@ static int uvc_parse_format(struct uvc_d
+ switch (buffer[2]) {
+ case VS_FORMAT_UNCOMPRESSED:
+ case VS_FORMAT_FRAME_BASED:
+- if (buflen < 27) {
++ n = buffer[2] == VS_FORMAT_UNCOMPRESSED ? 27 : 28;
++ if (buflen < n) {
+ uvc_trace(UVC_TRACE_DESCR, "device %d videostreaming"
+ "interface %d FORMAT error\n",
+ dev->udev->devnum,
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:48 2008
+Message-Id: <20080730233148.487824231@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:31 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Laurent Pinchart <laurent.pinchart@skynet.be>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 41/62] V4L: uvcvideo: Use GFP_NOIO when allocating memory during resume
+Content-Disposition: inline; filename=v4l-uvcvideo-use-gfp_noio-when-allocating-memory-during-resume.patch
+Content-Length: 4676
+Lines: 138
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Laurent Pinchart <laurent.pinchart@skynet.be>
+
+(cherry picked from commit 291358785cde5536d98a4f3cae77efd8ca626486)
+
+V4L: uvcvideo: Use GFP_NOIO when allocating memory during resume
+
+The swap device might still be asleep, so memory allocated in the resume
+handler must use GFP_NOIO. Thanks to Oliver Neukum for catching and reporting
+this bug.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/uvc/uvc_status.c | 2 +-
+ drivers/media/video/uvc/uvc_video.c | 24 ++++++++++++------------
+ 2 files changed, 13 insertions(+), 13 deletions(-)
+
+--- a/drivers/media/video/uvc/uvc_status.c
++++ b/drivers/media/video/uvc/uvc_status.c
+@@ -203,5 +203,5 @@ int uvc_status_resume(struct uvc_device
+ if (dev->int_urb == NULL)
+ return 0;
+
+- return usb_submit_urb(dev->int_urb, GFP_KERNEL);
++ return usb_submit_urb(dev->int_urb, GFP_NOIO);
+ }
+--- a/drivers/media/video/uvc/uvc_video.c
++++ b/drivers/media/video/uvc/uvc_video.c
+@@ -586,7 +586,7 @@ static void uvc_uninit_video(struct uvc_
+ * is given by the endpoint.
+ */
+ static int uvc_init_video_isoc(struct uvc_video_device *video,
+- struct usb_host_endpoint *ep)
++ struct usb_host_endpoint *ep, gfp_t gfp_flags)
+ {
+ struct urb *urb;
+ unsigned int npackets, i, j;
+@@ -611,14 +611,14 @@ static int uvc_init_video_isoc(struct uv
+ size = npackets * psize;
+
+ for (i = 0; i < UVC_URBS; ++i) {
+- urb = usb_alloc_urb(npackets, GFP_KERNEL);
++ urb = usb_alloc_urb(npackets, gfp_flags);
+ if (urb == NULL) {
+ uvc_uninit_video(video);
+ return -ENOMEM;
+ }
+
+ video->urb_buffer[i] = usb_buffer_alloc(video->dev->udev,
+- size, GFP_KERNEL, &urb->transfer_dma);
++ size, gfp_flags, &urb->transfer_dma);
+ if (video->urb_buffer[i] == NULL) {
+ usb_free_urb(urb);
+ uvc_uninit_video(video);
+@@ -652,7 +652,7 @@ static int uvc_init_video_isoc(struct uv
+ * given by the endpoint.
+ */
+ static int uvc_init_video_bulk(struct uvc_video_device *video,
+- struct usb_host_endpoint *ep)
++ struct usb_host_endpoint *ep, gfp_t gfp_flags)
+ {
+ struct urb *urb;
+ unsigned int pipe, i;
+@@ -674,14 +674,14 @@ static int uvc_init_video_bulk(struct uv
+ pipe = usb_rcvbulkpipe(video->dev->udev, ep->desc.bEndpointAddress);
+
+ for (i = 0; i < UVC_URBS; ++i) {
+- urb = usb_alloc_urb(0, GFP_KERNEL);
++ urb = usb_alloc_urb(0, gfp_flags);
+ if (urb == NULL) {
+ uvc_uninit_video(video);
+ return -ENOMEM;
+ }
+
+ video->urb_buffer[i] = usb_buffer_alloc(video->dev->udev,
+- size, GFP_KERNEL, &urb->transfer_dma);
++ size, gfp_flags, &urb->transfer_dma);
+ if (video->urb_buffer[i] == NULL) {
+ usb_free_urb(urb);
+ uvc_uninit_video(video);
+@@ -702,7 +702,7 @@ static int uvc_init_video_bulk(struct uv
+ /*
+ * Initialize isochronous/bulk URBs and allocate transfer buffers.
+ */
+-static int uvc_init_video(struct uvc_video_device *video)
++static int uvc_init_video(struct uvc_video_device *video, gfp_t gfp_flags)
+ {
+ struct usb_interface *intf = video->streaming->intf;
+ struct usb_host_interface *alts;
+@@ -747,7 +747,7 @@ static int uvc_init_video(struct uvc_vid
+ if ((ret = usb_set_interface(video->dev->udev, intfnum, i)) < 0)
+ return ret;
+
+- ret = uvc_init_video_isoc(video, ep);
++ ret = uvc_init_video_isoc(video, ep, gfp_flags);
+ } else {
+ /* Bulk endpoint, proceed to URB initialization. */
+ ep = uvc_find_endpoint(&intf->altsetting[0],
+@@ -755,7 +755,7 @@ static int uvc_init_video(struct uvc_vid
+ if (ep == NULL)
+ return -EIO;
+
+- ret = uvc_init_video_bulk(video, ep);
++ ret = uvc_init_video_bulk(video, ep, gfp_flags);
+ }
+
+ if (ret < 0)
+@@ -763,7 +763,7 @@ static int uvc_init_video(struct uvc_vid
+
+ /* Submit the URBs. */
+ for (i = 0; i < UVC_URBS; ++i) {
+- if ((ret = usb_submit_urb(video->urb[i], GFP_KERNEL)) < 0) {
++ if ((ret = usb_submit_urb(video->urb[i], gfp_flags)) < 0) {
+ uvc_printk(KERN_ERR, "Failed to submit URB %u "
+ "(%d).\n", i, ret);
+ uvc_uninit_video(video);
+@@ -818,7 +818,7 @@ int uvc_video_resume(struct uvc_video_de
+ if (!uvc_queue_streaming(&video->queue))
+ return 0;
+
+- if ((ret = uvc_init_video(video)) < 0)
++ if ((ret = uvc_init_video(video, GFP_NOIO)) < 0)
+ uvc_queue_enable(&video->queue, 0);
+
+ return ret;
+@@ -930,5 +930,5 @@ int uvc_video_enable(struct uvc_video_de
+ if ((ret = uvc_queue_enable(&video->queue, 1)) < 0)
+ return ret;
+
+- return uvc_init_video(video);
++ return uvc_init_video(video, GFP_KERNEL);
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:48 2008
+Message-Id: <20080730233148.653588943@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:32 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Laurent Pinchart <laurent.pinchart@skynet.be>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 42/62] V4L: uvcvideo: Dont free URB buffers on suspend
+Content-Disposition: inline; filename=v4l-uvcvideo-don-t-free-urb-buffers-on-suspend.patch
+Content-Length: 5837
+Lines: 208
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Laurent Pinchart <laurent.pinchart@skynet.be>
+
+(cherry picked from commit e01117c81676dc9897f567e32cdc13a26e85280b)
+
+V4L: uvcvideo: Don't free URB buffers on suspend.
+
+All submitted URBs must be killed at suspend time, but URB buffers don't
+have to be freed. Avoiding a free on suspend/reallocate on resume lowers
+the pressure on system memory.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/uvc/uvc_video.c | 96 ++++++++++++++++++++++++------------
+ drivers/media/video/uvc/uvcvideo.h | 2
+ 2 files changed, 66 insertions(+), 32 deletions(-)
+
+--- a/drivers/media/video/uvc/uvc_video.c
++++ b/drivers/media/video/uvc/uvc_video.c
+@@ -554,9 +554,56 @@ static void uvc_video_complete(struct ur
+ }
+
+ /*
++ * Free transfer buffers.
++ */
++static void uvc_free_urb_buffers(struct uvc_video_device *video)
++{
++ unsigned int i;
++
++ for (i = 0; i < UVC_URBS; ++i) {
++ if (video->urb_buffer[i]) {
++ usb_buffer_free(video->dev->udev, video->urb_size,
++ video->urb_buffer[i], video->urb_dma[i]);
++ video->urb_buffer[i] = NULL;
++ }
++ }
++
++ video->urb_size = 0;
++}
++
++/*
++ * Allocate transfer buffers. This function can be called with buffers
++ * already allocated when resuming from suspend, in which case it will
++ * return without touching the buffers.
++ *
++ * Return 0 on success or -ENOMEM when out of memory.
++ */
++static int uvc_alloc_urb_buffers(struct uvc_video_device *video,
++ unsigned int size)
++{
++ unsigned int i;
++
++ /* Buffers are already allocated, bail out. */
++ if (video->urb_size)
++ return 0;
++
++ for (i = 0; i < UVC_URBS; ++i) {
++ video->urb_buffer[i] = usb_buffer_alloc(video->dev->udev,
++ size, GFP_KERNEL, &video->urb_dma[i]);
++ if (video->urb_buffer[i] == NULL) {
++ uvc_free_urb_buffers(video);
++ return -ENOMEM;
++ }
++ }
++
++ video->urb_size = size;
++ return 0;
++}
++
++/*
+ * Uninitialize isochronous/bulk URBs and free transfer buffers.
+ */
+-static void uvc_uninit_video(struct uvc_video_device *video)
++static void uvc_uninit_video(struct uvc_video_device *video, int free_buffers)
+ {
+ struct urb *urb;
+ unsigned int i;
+@@ -566,19 +613,12 @@ static void uvc_uninit_video(struct uvc_
+ continue;
+
+ usb_kill_urb(urb);
+- /* urb->transfer_buffer_length is not touched by USB core, so
+- * we can use it here as the buffer length.
+- */
+- if (video->urb_buffer[i]) {
+- usb_buffer_free(video->dev->udev,
+- urb->transfer_buffer_length,
+- video->urb_buffer[i], urb->transfer_dma);
+- video->urb_buffer[i] = NULL;
+- }
+-
+ usb_free_urb(urb);
+ video->urb[i] = NULL;
+ }
++
++ if (free_buffers)
++ uvc_free_urb_buffers(video);
+ }
+
+ /*
+@@ -610,18 +650,13 @@ static int uvc_init_video_isoc(struct uv
+
+ size = npackets * psize;
+
++ if (uvc_alloc_urb_buffers(video, size) < 0)
++ return -ENOMEM;
++
+ for (i = 0; i < UVC_URBS; ++i) {
+ urb = usb_alloc_urb(npackets, gfp_flags);
+ if (urb == NULL) {
+- uvc_uninit_video(video);
+- return -ENOMEM;
+- }
+-
+- video->urb_buffer[i] = usb_buffer_alloc(video->dev->udev,
+- size, gfp_flags, &urb->transfer_dma);
+- if (video->urb_buffer[i] == NULL) {
+- usb_free_urb(urb);
+- uvc_uninit_video(video);
++ uvc_uninit_video(video, 1);
+ return -ENOMEM;
+ }
+
+@@ -632,6 +667,7 @@ static int uvc_init_video_isoc(struct uv
+ urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
+ urb->interval = ep->desc.bInterval;
+ urb->transfer_buffer = video->urb_buffer[i];
++ urb->transfer_dma = video->urb_dma[i];
+ urb->complete = uvc_video_complete;
+ urb->number_of_packets = npackets;
+ urb->transfer_buffer_length = size;
+@@ -671,20 +707,15 @@ static int uvc_init_video_bulk(struct uv
+ if (size > psize * UVC_MAX_ISO_PACKETS)
+ size = psize * UVC_MAX_ISO_PACKETS;
+
++ if (uvc_alloc_urb_buffers(video, size) < 0)
++ return -ENOMEM;
++
+ pipe = usb_rcvbulkpipe(video->dev->udev, ep->desc.bEndpointAddress);
+
+ for (i = 0; i < UVC_URBS; ++i) {
+ urb = usb_alloc_urb(0, gfp_flags);
+ if (urb == NULL) {
+- uvc_uninit_video(video);
+- return -ENOMEM;
+- }
+-
+- video->urb_buffer[i] = usb_buffer_alloc(video->dev->udev,
+- size, gfp_flags, &urb->transfer_dma);
+- if (video->urb_buffer[i] == NULL) {
+- usb_free_urb(urb);
+- uvc_uninit_video(video);
++ uvc_uninit_video(video, 1);
+ return -ENOMEM;
+ }
+
+@@ -692,6 +723,7 @@ static int uvc_init_video_bulk(struct uv
+ video->urb_buffer[i], size, uvc_video_complete,
+ video);
+ urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
++ urb->transfer_dma = video->urb_dma[i];
+
+ video->urb[i] = urb;
+ }
+@@ -766,7 +798,7 @@ static int uvc_init_video(struct uvc_vid
+ if ((ret = usb_submit_urb(video->urb[i], gfp_flags)) < 0) {
+ uvc_printk(KERN_ERR, "Failed to submit URB %u "
+ "(%d).\n", i, ret);
+- uvc_uninit_video(video);
++ uvc_uninit_video(video, 1);
+ return ret;
+ }
+ }
+@@ -791,7 +823,7 @@ int uvc_video_suspend(struct uvc_video_d
+ return 0;
+
+ video->frozen = 1;
+- uvc_uninit_video(video);
++ uvc_uninit_video(video, 0);
+ usb_set_interface(video->dev->udev, video->streaming->intfnum, 0);
+ return 0;
+ }
+@@ -920,7 +952,7 @@ int uvc_video_enable(struct uvc_video_de
+ int ret;
+
+ if (!enable) {
+- uvc_uninit_video(video);
++ uvc_uninit_video(video, 1);
+ usb_set_interface(video->dev->udev,
+ video->streaming->intfnum, 0);
+ uvc_queue_enable(&video->queue, 0);
+--- a/drivers/media/video/uvc/uvcvideo.h
++++ b/drivers/media/video/uvc/uvcvideo.h
+@@ -602,6 +602,8 @@ struct uvc_video_device {
+
+ struct urb *urb[UVC_URBS];
+ char *urb_buffer[UVC_URBS];
++ dma_addr_t urb_dma[UVC_URBS];
++ unsigned int urb_size;
+
+ __u8 last_fid;
+ };
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:49 2008
+Message-Id: <20080730233148.829950045@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:33 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Laurent Pinchart <laurent.pinchart@skynet.be>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 43/62] V4L: uvcvideo: Make input device support optional
+Content-Disposition: inline; filename=v4l-uvcvideo-make-input-device-support-optional.patch
+Content-Length: 3369
+Lines: 101
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Laurent Pinchart <laurent.pinchart@skynet.be>
+
+(cherry picked from commit 6833c917b4de1757febdbf946d709ece6dc7a86f)
+
+V4L: uvcvideo: Make input device support optional
+
+UVC devices can report button events. The uvcvideo driver depends on
+CONFIG_INPUT to report events to the input layer. This patch removes the hard
+dependency by introducing a new CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV option.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/Kconfig | 8 +-------
+ drivers/media/video/uvc/Kconfig | 17 +++++++++++++++++
+ drivers/media/video/uvc/uvc_status.c | 17 +++++++++++++++--
+ 3 files changed, 33 insertions(+), 9 deletions(-)
+
+--- a/drivers/media/video/Kconfig
++++ b/drivers/media/video/Kconfig
+@@ -793,13 +793,7 @@ menuconfig V4L_USB_DRIVERS
+
+ if V4L_USB_DRIVERS && USB
+
+-config USB_VIDEO_CLASS
+- tristate "USB Video Class (UVC)"
+- ---help---
+- Support for the USB Video Class (UVC). Currently only video
+- input devices, such as webcams, are supported.
+-
+- For more information see: <http://linux-uvc.berlios.de/>
++source "drivers/media/video/uvc/Kconfig"
+
+ source "drivers/media/video/pvrusb2/Kconfig"
+
+--- /dev/null
++++ b/drivers/media/video/uvc/Kconfig
+@@ -0,0 +1,17 @@
++config USB_VIDEO_CLASS
++ tristate "USB Video Class (UVC)"
++ ---help---
++ Support for the USB Video Class (UVC). Currently only video
++ input devices, such as webcams, are supported.
++
++ For more information see: <http://linux-uvc.berlios.de/>
++
++config USB_VIDEO_CLASS_INPUT_EVDEV
++ bool "UVC input events device support"
++ default y
++ depends on USB_VIDEO_CLASS && INPUT
++ ---help---
++ This option makes USB Video Class devices register an input device
++ to report button events.
++
++ If you are in doubt, say Y.
+--- a/drivers/media/video/uvc/uvc_status.c
++++ b/drivers/media/video/uvc/uvc_status.c
+@@ -22,6 +22,7 @@
+ /* --------------------------------------------------------------------------
+ * Input device
+ */
++#ifdef CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV
+ static int uvc_input_init(struct uvc_device *dev)
+ {
+ struct usb_device *udev = dev->udev;
+@@ -67,6 +68,19 @@ static void uvc_input_cleanup(struct uvc
+ input_unregister_device(dev->input);
+ }
+
++static void uvc_input_report_key(struct uvc_device *dev, unsigned int code,
++ int value)
++{
++ if (dev->input)
++ input_report_key(dev->input, code, value);
++}
++
++#else
++#define uvc_input_init(dev)
++#define uvc_input_cleanup(dev)
++#define uvc_input_report_key(dev, code, value)
++#endif /* CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV */
++
+ /* --------------------------------------------------------------------------
+ * Status interrupt endpoint
+ */
+@@ -83,8 +97,7 @@ static void uvc_event_streaming(struct u
+ return;
+ uvc_trace(UVC_TRACE_STATUS, "Button (intf %u) %s len %d\n",
+ data[1], data[3] ? "pressed" : "released", len);
+- if (dev->input)
+- input_report_key(dev->input, BTN_0, data[3]);
++ uvc_input_report_key(dev, BTN_0, data[3]);
+ } else {
+ uvc_trace(UVC_TRACE_STATUS, "Stream %u error event %02x %02x "
+ "len %d.\n", data[1], data[2], data[3], len);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:49 2008
+Message-Id: <20080730233149.030978039@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:34 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Tim Gardner <tim.gardner@canonical.com>,
+ Laurent Pinchart <laurent.pinchart@skynet.be>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 44/62] V4L: uvcvideo: Add support for Medion Akoya Mini E1210 integrated webcam
+Content-Disposition: inline; filename=v4l-uvcvideo-add-support-for-medion-akoya-mini-e1210-integrated-webcam.patch
+Content-Length: 1364
+Lines: 37
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Laurent Pinchart <laurent.pinchart@skynet.be>
+
+(cherry picked from commit bdf2fe4a0b9d23e69c77eaec76212216c9a957ef)
+
+V4L: uvcvideo: Add support for Medion Akoya Mini E1210 integrated webcam
+
+Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
+Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/uvc/uvc_driver.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/media/video/uvc/uvc_driver.c
++++ b/drivers/media/video/uvc/uvc_driver.c
+@@ -1892,6 +1892,15 @@ static struct usb_device_id uvc_ids[] =
+ .bInterfaceSubClass = 1,
+ .bInterfaceProtocol = 0,
+ .driver_info = UVC_QUIRK_PROBE_MINMAX },
++ /* Medion Akoya Mini E1210 */
++ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
++ | USB_DEVICE_ID_MATCH_INT_INFO,
++ .idVendor = 0x5986,
++ .idProduct = 0x0141,
++ .bInterfaceClass = USB_CLASS_VIDEO,
++ .bInterfaceSubClass = 1,
++ .bInterfaceProtocol = 0,
++ .driver_info = UVC_QUIRK_PROBE_MINMAX },
+ /* Acer OrbiCam - Unknown vendor */
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
+ | USB_DEVICE_ID_MATCH_INT_INFO,
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:49 2008
+Message-Id: <20080730233149.192333114@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:35 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Simon Arlott <simon@fire.lp0.eu>,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Hermann Pitton <hermann-pitton@arcor.de>,
+ Brian Marete <bgmarete@gmail.com>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 45/62] V4L: saa7134: Copy tuner data earlier to avoid overwriting manual tuner type
+Content-Disposition: inline; filename=v4l-saa7134-copy-tuner-data-earlier-to-avoid-overwriting-manual-tuner-type.patch
+Content-Length: 2722
+Lines: 66
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Simon Arlott <simon@fire.lp0.eu>
+
+V4L: saa7134: Copy tuner data earlier to avoid overwriting manual tuner type
+
+(cherry picked from commit d53687d1d22c3204394658a31654de2f1efb0e8f)
+
+Copy tuner data earlier in init to avoid overwriting manual tuner type
+
+When saa7134_board_init2 runs, it immediately overwrites the
+current value (set earlier from module parameter) of tuner_type
+with the static values, and then does autodetection. This patch
+moves the tuner_addr copy to earlier in saa7134_initdev and
+removes the tuner_type copy from saa7134_board_init2.
+
+Autodetection could still potentially change to the wrong tuner
+type, but it is now possible to override the default type for
+the card again.
+
+My card's tuner is configured with autodetection from eeprom,
+so I don't need to manually set the tuner. I've checked that
+the autodetection still works for my card.
+
+Signed-off-by: Simon Arlott <simon@fire.lp0.eu>
+Reviewed-by: Hermann Pitton <hermann-pitton@arcor.de>
+Cc: Brian Marete <bgmarete@gmail.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/saa7134/saa7134-cards.c | 3 ---
+ drivers/media/video/saa7134/saa7134-core.c | 5 +++--
+ 2 files changed, 3 insertions(+), 5 deletions(-)
+
+--- a/drivers/media/video/saa7134/saa7134-cards.c
++++ b/drivers/media/video/saa7134/saa7134-cards.c
+@@ -5703,9 +5703,6 @@ int saa7134_board_init2(struct saa7134_d
+ unsigned char buf;
+ int board;
+
+- dev->tuner_type = saa7134_boards[dev->board].tuner_type;
+- dev->tuner_addr = saa7134_boards[dev->board].tuner_addr;
+-
+ switch (dev->board) {
+ case SAA7134_BOARD_BMK_MPEX_NOTUNER:
+ case SAA7134_BOARD_BMK_MPEX_TUNER:
+--- a/drivers/media/video/saa7134/saa7134-core.c
++++ b/drivers/media/video/saa7134/saa7134-core.c
+@@ -946,11 +946,12 @@ static int __devinit saa7134_initdev(str
+ dev->board = SAA7134_BOARD_UNKNOWN;
+ }
+ dev->autodetected = card[dev->nr] != dev->board;
+- dev->tuner_type = saa7134_boards[dev->board].tuner_type;
++ dev->tuner_type = saa7134_boards[dev->board].tuner_type;
++ dev->tuner_addr = saa7134_boards[dev->board].tuner_addr;
+ dev->tda9887_conf = saa7134_boards[dev->board].tda9887_conf;
+ if (UNSET != tuner[dev->nr])
+ dev->tuner_type = tuner[dev->nr];
+- printk(KERN_INFO "%s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
++ printk(KERN_INFO "%s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
+ dev->name,pci_dev->subsystem_vendor,
+ pci_dev->subsystem_device,saa7134_boards[dev->board].name,
+ dev->board, dev->autodetected ?
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:49 2008
+Message-Id: <20080730233149.362563758@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:36 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Steven Toth <stoth@hauppauge.com>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 46/62] V4L: cx23885: Bugfix for concurrent use of /dev/video0 and /dev/video1
+Content-Disposition: inline; filename=v4l-cx23885-bugfix-for-concurrent-use-of-dev-video0-and-dev-video1.patch
+Content-Length: 1180
+Lines: 35
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Steven Toth <stoth@hauppauge.com>
+
+(cherry picked from commit 28901ab621bb56cd2aa9670dc7ce016ba80ec45c)
+
+V4L: cx23885: Bugfix for concurrent use of /dev/video0 and /dev/video1
+
+With the HVR1800, trying to use video0 and video1 simultaneously
+caused buffer corruption in the PCIe bridge. This fix reallocates
+video1 buffer locations to avoid the issue.
+
+Signed-off-by: Steven Toth <stoth@hauppauge.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/cx23885/cx23885-core.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/video/cx23885/cx23885-core.c
++++ b/drivers/media/video/cx23885/cx23885-core.c
+@@ -104,8 +104,8 @@ static struct sram_channel cx23887_sram_
+ [SRAM_CH03] = {
+ .name = "TS1 B",
+ .cmds_start = 0x100A0,
+- .ctrl_start = 0x10780,
+- .cdt = 0x10400,
++ .ctrl_start = 0x10670,
++ .cdt = 0x10810,
+ .fifo_start = 0x5000,
+ .fifo_size = 0x1000,
+ .ptr1_reg = DMA3_PTR1,
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:49 2008
+Message-Id: <20080730233149.535041895@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:37 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Steven Toth <stoth@hauppauge.com>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 47/62] DVB: cx23885: Ensure PAD_CTRL is always reset to a sensible default
+Content-Disposition: inline; filename=dvb-cx23885-ensure-pad_ctrl-is-always-reset-to-a-sensible-default.patch
+Content-Length: 1071
+Lines: 31
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Steven Toth <stoth@hauppauge.com>
+
+(cherry picked from commit ecda5966c90746a044ff68e78b1062adcddd9664)
+
+DVB: cx23885: Ensure PAD_CTRL is always reset to a sensible default
+
+PAD_CTRL controls TS1 and TS2 input and output states, if the
+register became corrupt the driver was never able to recover.
+
+Signed-off-by: Steven Toth <stoth@hauppauge.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/cx23885/cx23885-core.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/media/video/cx23885/cx23885-core.c
++++ b/drivers/media/video/cx23885/cx23885-core.c
+@@ -460,6 +460,7 @@ static void cx23885_reset(struct cx23885
+ cx_write(AUDIO_INT_INT_STAT, 0xffffffff);
+ cx_write(AUDIO_EXT_INT_STAT, 0xffffffff);
+ cx_write(CLK_DELAY, cx_read(CLK_DELAY) & 0x80000000);
++ cx_write(PAD_CTRL, 0x00500300);
+
+ mdelay(100);
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:49 2008
+Message-Id: <20080730233149.695437979@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:38 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Steven Toth <stoth@hauppauge.com>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 48/62] DVB: cx23885: DVB Transport cards using DVB port VIDB/TS1 did not stream
+Content-Disposition: inline; filename=dvb-cx23885-dvb-transport-cards-using-dvb-port-vidb-ts1-did-not-stream.patch
+Content-Length: 1945
+Lines: 58
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Steven Toth <stoth@hauppauge.com>
+
+(cherry picked from commit 52ce27bfc4d302a3e28267a5820a8b031ceccee9)
+
+DVB: cx23885: DVB Transport cards using DVB port VIDB/TS1 did not stream
+
+Certain DVB cards that have demodulators on TS1/VIDB were not
+streaming packets.
+
+This ensure the pin directions on PAD_CTRL are set correctly,
+solving the issue.
+
+Signed-off-by: Steven Toth <stoth@hauppauge.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/cx23885/cx23885-core.c | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/video/cx23885/cx23885-core.c
++++ b/drivers/media/video/cx23885/cx23885-core.c
+@@ -1084,7 +1084,21 @@ static int cx23885_start_dma(struct cx23
+ cx_write(port->reg_gpcnt_ctl, 3);
+ q->count = 1;
+
+- if (cx23885_boards[dev->board].portb & CX23885_MPEG_ENCODER) {
++ /* Set VIDB pins to input */
++ if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB) {
++ reg = cx_read(PAD_CTRL);
++ reg &= ~0x3; /* Clear TS1_OE & TS1_SOP_OE */
++ cx_write(PAD_CTRL, reg);
++ }
++
++ /* Set VIDC pins to input */
++ if (cx23885_boards[dev->board].portc == CX23885_MPEG_DVB) {
++ reg = cx_read(PAD_CTRL);
++ reg &= ~0x4; /* Clear TS2_SOP_OE */
++ cx_write(PAD_CTRL, reg);
++ }
++
++ if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER) {
+
+ reg = cx_read(PAD_CTRL);
+ reg = reg & ~0x1; /* Clear TS1_OE */
+@@ -1134,7 +1148,7 @@ static int cx23885_stop_dma(struct cx238
+ cx_clear(port->reg_ts_int_msk, port->ts_int_msk_val);
+ cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
+
+- if (cx23885_boards[dev->board].portb & CX23885_MPEG_ENCODER) {
++ if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER) {
+
+ reg = cx_read(PAD_CTRL);
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:50 2008
+Message-Id: <20080730233149.869882496@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:39 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Steven Toth <stoth@hauppauge.com>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 49/62] DVB: cx23885: Reallocated the sram to avoid concurrent VIDB/C issues
+Content-Disposition: inline; filename=dvb-cx23885-reallocated-the-sram-to-avoid-concurrent-vidb-c-issues.patch
+Content-Length: 2103
+Lines: 66
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Steven Toth <stoth@hauppauge.com>
+
+(cherry picked from commit d8d12b4367e2e759f65c5f9dcb94d21ec237bbc5)
+
+DVB: cx23885: Reallocated the sram to avoid concurrent VIDB/C issues
+
+This may be cx23885 chip specific and may not work on the cx23887.
+Analog and mpeg encoder streaming are still to be tested.
+
+Signed-off-by: Steven Toth <stoth@hauppauge.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/cx23885/cx23885-core.c | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+--- a/drivers/media/video/cx23885/cx23885-core.c
++++ b/drivers/media/video/cx23885/cx23885-core.c
+@@ -80,8 +80,8 @@ static struct sram_channel cx23887_sram_
+ [SRAM_CH01] = {
+ .name = "VID A",
+ .cmds_start = 0x10000,
+- .ctrl_start = 0x105b0,
+- .cdt = 0x107b0,
++ .ctrl_start = 0x10380,
++ .cdt = 0x104c0,
+ .fifo_start = 0x40,
+ .fifo_size = 0x2800,
+ .ptr1_reg = DMA1_PTR1,
+@@ -104,8 +104,8 @@ static struct sram_channel cx23887_sram_
+ [SRAM_CH03] = {
+ .name = "TS1 B",
+ .cmds_start = 0x100A0,
+- .ctrl_start = 0x10670,
+- .cdt = 0x10810,
++ .ctrl_start = 0x10400,
++ .cdt = 0x10580,
+ .fifo_start = 0x5000,
+ .fifo_size = 0x1000,
+ .ptr1_reg = DMA3_PTR1,
+@@ -140,8 +140,8 @@ static struct sram_channel cx23887_sram_
+ [SRAM_CH06] = {
+ .name = "TS2 C",
+ .cmds_start = 0x10140,
+- .ctrl_start = 0x10680,
+- .cdt = 0x108d0,
++ .ctrl_start = 0x10440,
++ .cdt = 0x105e0,
+ .fifo_start = 0x6000,
+ .fifo_size = 0x1000,
+ .ptr1_reg = DMA5_PTR1,
+@@ -1043,6 +1043,9 @@ static int cx23885_start_dma(struct cx23
+ dprintk(1, "%s() w: %d, h: %d, f: %d\n", __func__,
+ buf->vb.width, buf->vb.height, buf->vb.field);
+
++ /* Stop the fifo and risc engine for this port */
++ cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
++
+ /* setup fifo + format */
+ cx23885_sram_channel_setup(dev,
+ &dev->sram_channels[ port->sram_chno ],
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:50 2008
+Message-Id: <20080730233150.035435450@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:40 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Steven Toth <stoth@hauppauge.com>,
+ Mauro Carvalho Chehab <mchehab@infradead.org>
+Subject: [patch 50/62] DVB: cx23885: SRAM changes for the 885 and 887 silicon parts
+Content-Disposition: inline; filename=dvb-cx23885-sram-changes-for-the-885-and-887-silicon-parts.patch
+Content-Length: 4480
+Lines: 174
+
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Steven Toth <stoth@hauppauge.com>
+
+(cherry picked from commit 7e994302ed3fc6d209ce247ad5b6d9c2499bf7c2)
+
+DVB: cx23885: SRAM changes for the 885 and 887 silicon parts
+
+In a previous patch I merged both memory maps into a single struct,
+believing that they could be combined. We've since found problems
+with streaming multiple channels on the 885. I'm restoring the
+multiple memory map structs - in line with the windows driver.
+
+Signed-off-by: Steven Toth <stoth@hauppauge.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/cx23885/cx23885-core.c | 116 ++++++++++++++++++++++++++++-
+ 1 file changed, 114 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/video/cx23885/cx23885-core.c
++++ b/drivers/media/video/cx23885/cx23885-core.c
+@@ -76,7 +76,7 @@ LIST_HEAD(cx23885_devlist);
+ * 0x00010ea0 0x00010xxx Free
+ */
+
+-static struct sram_channel cx23887_sram_channels[] = {
++static struct sram_channel cx23885_sram_channels[] = {
+ [SRAM_CH01] = {
+ .name = "VID A",
+ .cmds_start = 0x10000,
+@@ -187,6 +187,117 @@ static struct sram_channel cx23887_sram_
+ },
+ };
+
++static struct sram_channel cx23887_sram_channels[] = {
++ [SRAM_CH01] = {
++ .name = "VID A",
++ .cmds_start = 0x10000,
++ .ctrl_start = 0x105b0,
++ .cdt = 0x107b0,
++ .fifo_start = 0x40,
++ .fifo_size = 0x2800,
++ .ptr1_reg = DMA1_PTR1,
++ .ptr2_reg = DMA1_PTR2,
++ .cnt1_reg = DMA1_CNT1,
++ .cnt2_reg = DMA1_CNT2,
++ },
++ [SRAM_CH02] = {
++ .name = "ch2",
++ .cmds_start = 0x0,
++ .ctrl_start = 0x0,
++ .cdt = 0x0,
++ .fifo_start = 0x0,
++ .fifo_size = 0x0,
++ .ptr1_reg = DMA2_PTR1,
++ .ptr2_reg = DMA2_PTR2,
++ .cnt1_reg = DMA2_CNT1,
++ .cnt2_reg = DMA2_CNT2,
++ },
++ [SRAM_CH03] = {
++ .name = "TS1 B",
++ .cmds_start = 0x100A0,
++ .ctrl_start = 0x10630,
++ .cdt = 0x10870,
++ .fifo_start = 0x5000,
++ .fifo_size = 0x1000,
++ .ptr1_reg = DMA3_PTR1,
++ .ptr2_reg = DMA3_PTR2,
++ .cnt1_reg = DMA3_CNT1,
++ .cnt2_reg = DMA3_CNT2,
++ },
++ [SRAM_CH04] = {
++ .name = "ch4",
++ .cmds_start = 0x0,
++ .ctrl_start = 0x0,
++ .cdt = 0x0,
++ .fifo_start = 0x0,
++ .fifo_size = 0x0,
++ .ptr1_reg = DMA4_PTR1,
++ .ptr2_reg = DMA4_PTR2,
++ .cnt1_reg = DMA4_CNT1,
++ .cnt2_reg = DMA4_CNT2,
++ },
++ [SRAM_CH05] = {
++ .name = "ch5",
++ .cmds_start = 0x0,
++ .ctrl_start = 0x0,
++ .cdt = 0x0,
++ .fifo_start = 0x0,
++ .fifo_size = 0x0,
++ .ptr1_reg = DMA5_PTR1,
++ .ptr2_reg = DMA5_PTR2,
++ .cnt1_reg = DMA5_CNT1,
++ .cnt2_reg = DMA5_CNT2,
++ },
++ [SRAM_CH06] = {
++ .name = "TS2 C",
++ .cmds_start = 0x10140,
++ .ctrl_start = 0x10670,
++ .cdt = 0x108d0,
++ .fifo_start = 0x6000,
++ .fifo_size = 0x1000,
++ .ptr1_reg = DMA5_PTR1,
++ .ptr2_reg = DMA5_PTR2,
++ .cnt1_reg = DMA5_CNT1,
++ .cnt2_reg = DMA5_CNT2,
++ },
++ [SRAM_CH07] = {
++ .name = "ch7",
++ .cmds_start = 0x0,
++ .ctrl_start = 0x0,
++ .cdt = 0x0,
++ .fifo_start = 0x0,
++ .fifo_size = 0x0,
++ .ptr1_reg = DMA6_PTR1,
++ .ptr2_reg = DMA6_PTR2,
++ .cnt1_reg = DMA6_CNT1,
++ .cnt2_reg = DMA6_CNT2,
++ },
++ [SRAM_CH08] = {
++ .name = "ch8",
++ .cmds_start = 0x0,
++ .ctrl_start = 0x0,
++ .cdt = 0x0,
++ .fifo_start = 0x0,
++ .fifo_size = 0x0,
++ .ptr1_reg = DMA7_PTR1,
++ .ptr2_reg = DMA7_PTR2,
++ .cnt1_reg = DMA7_CNT1,
++ .cnt2_reg = DMA7_CNT2,
++ },
++ [SRAM_CH09] = {
++ .name = "ch9",
++ .cmds_start = 0x0,
++ .ctrl_start = 0x0,
++ .cdt = 0x0,
++ .fifo_start = 0x0,
++ .fifo_size = 0x0,
++ .ptr1_reg = DMA8_PTR1,
++ .ptr2_reg = DMA8_PTR2,
++ .cnt1_reg = DMA8_CNT1,
++ .cnt2_reg = DMA8_CNT2,
++ },
++};
++
+ static int cx23885_risc_decode(u32 risc)
+ {
+ static char *instr[16] = {
+@@ -626,7 +737,6 @@ static int cx23885_dev_setup(struct cx23
+ atomic_inc(&dev->refcount);
+
+ dev->nr = cx23885_devcount++;
+- dev->sram_channels = cx23887_sram_channels;
+ sprintf(dev->name, "cx23885[%d]", dev->nr);
+
+ mutex_lock(&devlist);
+@@ -638,11 +748,13 @@ static int cx23885_dev_setup(struct cx23
+ dev->bridge = CX23885_BRIDGE_887;
+ /* Apply a sensible clock frequency for the PCIe bridge */
+ dev->clk_freq = 25000000;
++ dev->sram_channels = cx23887_sram_channels;
+ } else
+ if(dev->pci->device == 0x8852) {
+ dev->bridge = CX23885_BRIDGE_885;
+ /* Apply a sensible clock frequency for the PCIe bridge */
+ dev->clk_freq = 28000000;
++ dev->sram_channels = cx23885_sram_channels;
+ } else
+ BUG();
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:50 2008
+Message-Id: <20080730233150.222899568@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:41 -0700
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Oliver Pinter <oliver.pntr@gmail.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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux-mm@kvack.org,
+ Jack Steiner <steiner@sgi.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 51/62] x86: fix kernel_physical_mapping_init() for large x86 systems
+Content-Disposition: inline; filename=x86-fix-kernel_physical_mapping_init-for-large-x86-systems.patch
+Content-Length: 1016
+Lines: 32
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Ingo Molnar <mingo@elte.hu>
+
+based on e22146e610bb7aed63282148740ab1d1b91e1d90 upstream
+
+Fix bug in kernel_physical_mapping_init() that causes kernel
+page table to be built incorrectly for systems with greater
+than 512GB of memory.
+
+Signed-off-by: Jack Steiner <steiner@sgi.com>
+Cc: linux-mm@kvack.org
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Cc: Oliver Pinter <oliver.pntr@gmail.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/mm/init_64.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/mm/init_64.c
++++ b/arch/x86/mm/init_64.c
+@@ -579,7 +579,7 @@ unsigned long __init_refok init_memory_m
+ else
+ pud = alloc_low_page(&pud_phys);
+
+- next = start + PGDIR_SIZE;
++ next = (start + PGDIR_SIZE) & PGDIR_MASK;
+ if (next > end)
+ next = end;
+ last_map_addr = phys_pud_init(pud, __pa(start), __pa(next));
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:50 2008
+Message-Id: <20080730233150.386263976@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:42 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eric Sandeen <sandeen@redhat.com>,
+ Michael Halcrow <mhalcrow@us.ibm.com>,
+ Rik van Riel <riel@redhat.com>
+Subject: [patch 52/62] eCryptfs: use page_alloc not kmalloc to get a page of memory
+Content-Disposition: inline; filename=ecryptfs-use-page_alloc-not-kmalloc-to-get-a-page-of-memory.patch
+Content-Length: 3623
+Lines: 114
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Eric Sandeen <sandeen@redhat.com>
+
+commit 7fcba054373d5dfc43d26e243a5c9b92069972ee upstream
+Date: Mon, 28 Jul 2008 15:46:39 -0700
+Subject: [patch 52/62] eCryptfs: use page_alloc not kmalloc to get a page of memory
+
+With SLUB debugging turned on in 2.6.26, I was getting memory corruption
+when testing eCryptfs. The root cause turned out to be that eCryptfs was
+doing kmalloc(PAGE_CACHE_SIZE); virt_to_page() and treating that as a nice
+page-aligned chunk of memory. But at least with SLUB debugging on, this
+is not always true, and the page we get from virt_to_page does not
+necessarily match the PAGE_CACHE_SIZE worth of memory we got from kmalloc.
+
+My simple testcase was 2 loops doing "rm -f fileX; cp /tmp/fileX ." for 2
+different multi-megabyte files. With this change I no longer see the
+corruption.
+
+Signed-off-by: Eric Sandeen <sandeen@redhat.com>
+Acked-by: Michael Halcrow <mhalcrow@us.ibm.com>
+Acked-by: Rik van Riel <riel@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ecryptfs/crypto.c | 30 ++++++++++++++++++------------
+ 1 file changed, 18 insertions(+), 12 deletions(-)
+
+--- a/fs/ecryptfs/crypto.c
++++ b/fs/ecryptfs/crypto.c
+@@ -474,8 +474,8 @@ int ecryptfs_encrypt_page(struct page *p
+ {
+ struct inode *ecryptfs_inode;
+ struct ecryptfs_crypt_stat *crypt_stat;
+- char *enc_extent_virt = NULL;
+- struct page *enc_extent_page;
++ char *enc_extent_virt;
++ struct page *enc_extent_page = NULL;
+ loff_t extent_offset;
+ int rc = 0;
+
+@@ -491,14 +491,14 @@ int ecryptfs_encrypt_page(struct page *p
+ page->index);
+ goto out;
+ }
+- enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER);
+- if (!enc_extent_virt) {
++ enc_extent_page = alloc_page(GFP_USER);
++ if (!enc_extent_page) {
+ rc = -ENOMEM;
+ ecryptfs_printk(KERN_ERR, "Error allocating memory for "
+ "encrypted extent\n");
+ goto out;
+ }
+- enc_extent_page = virt_to_page(enc_extent_virt);
++ enc_extent_virt = kmap(enc_extent_page);
+ for (extent_offset = 0;
+ extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
+ extent_offset++) {
+@@ -526,7 +526,10 @@ int ecryptfs_encrypt_page(struct page *p
+ }
+ }
+ out:
+- kfree(enc_extent_virt);
++ if (enc_extent_page) {
++ kunmap(enc_extent_page);
++ __free_page(enc_extent_page);
++ }
+ return rc;
+ }
+
+@@ -608,8 +611,8 @@ int ecryptfs_decrypt_page(struct page *p
+ {
+ struct inode *ecryptfs_inode;
+ struct ecryptfs_crypt_stat *crypt_stat;
+- char *enc_extent_virt = NULL;
+- struct page *enc_extent_page;
++ char *enc_extent_virt;
++ struct page *enc_extent_page = NULL;
+ unsigned long extent_offset;
+ int rc = 0;
+
+@@ -626,14 +629,14 @@ int ecryptfs_decrypt_page(struct page *p
+ page->index);
+ goto out;
+ }
+- enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER);
+- if (!enc_extent_virt) {
++ enc_extent_page = alloc_page(GFP_USER);
++ if (!enc_extent_page) {
+ rc = -ENOMEM;
+ ecryptfs_printk(KERN_ERR, "Error allocating memory for "
+ "encrypted extent\n");
+ goto out;
+ }
+- enc_extent_page = virt_to_page(enc_extent_virt);
++ enc_extent_virt = kmap(enc_extent_page);
+ for (extent_offset = 0;
+ extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
+ extent_offset++) {
+@@ -661,7 +664,10 @@ int ecryptfs_decrypt_page(struct page *p
+ }
+ }
+ out:
+- kfree(enc_extent_virt);
++ if (enc_extent_page) {
++ kunmap(enc_extent_page);
++ __free_page(enc_extent_page);
++ }
+ return rc;
+ }
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:50 2008
+Message-Id: <20080730233150.551934055@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:43 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jeff Dike <jdike@linux.intel.com>
+Subject: [patch 53/62] UML - Fix boot crash
+Content-Disposition: inline; filename=uml-fix-boot-crash.patch
+Content-Length: 1335
+Lines: 46
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Jeff Dike <jdike@addtoit.com>
+
+commit 7c1fed03b9fa32d4323d5caa6a9c7dcdd7eba767 upstream
+
+My copying of linux/init.h didn't go far enough. The definition of
+__used singled out gcc minor version 3, but didn't care what the major
+version was. This broke when unit-at-a-time was added and gcc started
+throwing out initcalls.
+
+This results in an early boot crash when ptrace tries to initialize a
+process with an empty, uninitialized register set.
+
+Signed-off-by: Jeff Dike <jdike@linux.intel.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/um/include/init.h | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/arch/um/include/init.h
++++ b/arch/um/include/init.h
+@@ -45,6 +45,8 @@ typedef void (*exitcall_t)(void);
+ # define __section(S) __attribute__ ((__section__(#S)))
+ #endif
+
++#if __GNUC__ == 3
++
+ #if __GNUC_MINOR__ >= 3
+ # define __used __attribute__((__used__))
+ #else
+@@ -52,6 +54,12 @@ typedef void (*exitcall_t)(void);
+ #endif
+
+ #else
++#if __GNUC__ == 4
++# define __used __attribute__((__used__))
++#endif
++#endif
++
++#else
+ #include <linux/compiler.h>
+ #endif
+ /* These are for everybody (although not all archs will actually
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:50 2008
+Message-Id: <20080730233150.770974045@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:44 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jesse Brandeburg <jesse.brandeburg@intel.com>,
+ Jeff Kirsher <jeffrey.t.kirsher@intel.com>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 54/62] ixgbe: remove device ID for unsupported device
+Content-Disposition: inline; filename=ixgbe-remove-device-id-for-unsupported-device.patch
+Content-Length: 1204
+Lines: 32
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Jesse Brandeburg <jesse.brandeburg@intel.com>
+
+commit bb5d10ac8cc315d53306963001fe650d88a1cbb2 upstream
+
+The ixgbe driver was untested with device ID 8086:10c8 but still advertises
+support. Currently if this device is present in the system when the driver
+is loaded, the system will panic.
+Remove this device ID until full support can be tested with available
+hardware. This patch is necessary for 2.6.24, 2.6.25 and 2.6.26
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/ixgbe/ixgbe_main.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/drivers/net/ixgbe/ixgbe_main.c
++++ b/drivers/net/ixgbe/ixgbe_main.c
+@@ -70,8 +70,6 @@ static struct pci_device_id ixgbe_pci_tb
+ board_82598 },
+ {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AF_SINGLE_PORT),
+ board_82598 },
+- {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AT_DUAL_PORT),
+- board_82598 },
+ {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598EB_CX4),
+ board_82598 },
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:51 2008
+Message-Id: <20080730233150.919772566@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:45 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Luotao Fu <l.fu@pengutronix.de>,
+ David Brownell <dbrownell@users.sourceforge.net>
+Subject: [patch 55/62] mpc52xx_psc_spi: fix block transfer
+Content-Disposition: inline; filename=mpc52xx_psc_spi-fix-block-transfer.patch
+Content-Length: 2124
+Lines: 66
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Luotao Fu <l.fu@pengutronix.de>
+
+commit 9a7867e1b34c3575e7e76a05c0c54c6edbdae2a4 upstream
+
+The block transfer routine in the mpc52xx psc spi driver misinterpret
+the datasheet. According to the processor datasheet the chipselect is
+held as long as the EOF is not written.
+
+Theoretically blocks of any sizes can be transferred in this way. The
+old routine however writes an EOF after every word, which has the size
+of size_of_word. This makes the transfer slow.
+
+Also fixed some duplicate code.
+
+Signed-off-by: Luotao Fu <l.fu@pengutronix.de>
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/spi/mpc52xx_psc_spi.c | 22 +++++++---------------
+ 1 file changed, 7 insertions(+), 15 deletions(-)
+
+--- a/drivers/spi/mpc52xx_psc_spi.c
++++ b/drivers/spi/mpc52xx_psc_spi.c
+@@ -148,7 +148,6 @@ static int mpc52xx_psc_spi_transfer_rxtx
+ unsigned rfalarm;
+ unsigned send_at_once = MPC52xx_PSC_BUFSIZE;
+ unsigned recv_at_once;
+- unsigned bpw = mps->bits_per_word / 8;
+
+ if (!t->tx_buf && !t->rx_buf && t->len)
+ return -EINVAL;
+@@ -164,22 +163,15 @@ static int mpc52xx_psc_spi_transfer_rxtx
+ }
+
+ dev_dbg(&spi->dev, "send %d bytes...\n", send_at_once);
+- if (tx_buf) {
+- for (; send_at_once; sb++, send_at_once--) {
+- /* set EOF flag */
+- if (mps->bits_per_word
+- && (sb + 1) % bpw == 0)
+- out_8(&psc->ircr2, 0x01);
++ for (; send_at_once; sb++, send_at_once--) {
++ /* set EOF flag before the last word is sent */
++ if (send_at_once == 1)
++ out_8(&psc->ircr2, 0x01);
++
++ if (tx_buf)
+ out_8(&psc->mpc52xx_psc_buffer_8, tx_buf[sb]);
+- }
+- } else {
+- for (; send_at_once; sb++, send_at_once--) {
+- /* set EOF flag */
+- if (mps->bits_per_word
+- && ((sb + 1) % bpw) == 0)
+- out_8(&psc->ircr2, 0x01);
++ else
+ out_8(&psc->mpc52xx_psc_buffer_8, 0);
+- }
+ }
+
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:51 2008
+Message-Id: <20080730233151.070389125@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:46 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Hugh Dickins <hugh@veritas.com>
+Subject: [patch 56/62] tmpfs: fix kernel BUG in shmem_delete_inode
+Content-Disposition: inline; filename=tmpfs-fix-kernel-bug-in-shmem_delete_inode.patch
+Content-Length: 2095
+Lines: 53
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Hugh Dickins <hugh@veritas.com>
+
+commit 14fcc23fdc78e9d32372553ccf21758a9bd56fa1 upstream
+
+SuSE's insserve initscript ordering program hits kernel BUG at mm/shmem.c:814
+on 2.6.26. It's using posix_fadvise on directories, and the shmem_readpage
+method added in 2.6.23 is letting POSIX_FADV_WILLNEED allocate useless pages
+to a tmpfs directory, incrementing i_blocks count but never decrementing it.
+
+Fix this by assigning shmem_aops (pointing to readpage and writepage and
+set_page_dirty) only when it's needed, on a regular file or a long symlink.
+
+Many thanks to Kel for outstanding bugreport and steps to reproduce it.
+
+Reported-by: Kel Modderman <kel@otaku42.de>
+Tested-by: Kel Modderman <kel@otaku42.de>
+Signed-off-by: Hugh Dickins <hugh@veritas.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/shmem.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/mm/shmem.c
++++ b/mm/shmem.c
+@@ -1503,7 +1503,6 @@ shmem_get_inode(struct super_block *sb,
+ inode->i_uid = current->fsuid;
+ inode->i_gid = current->fsgid;
+ inode->i_blocks = 0;
+- inode->i_mapping->a_ops = &shmem_aops;
+ inode->i_mapping->backing_dev_info = &shmem_backing_dev_info;
+ inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+ inode->i_generation = get_seconds();
+@@ -1518,6 +1517,7 @@ shmem_get_inode(struct super_block *sb,
+ init_special_inode(inode, mode, dev);
+ break;
+ case S_IFREG:
++ inode->i_mapping->a_ops = &shmem_aops;
+ inode->i_op = &shmem_inode_operations;
+ inode->i_fop = &shmem_file_operations;
+ mpol_shared_policy_init(&info->policy,
+@@ -1907,6 +1907,7 @@ static int shmem_symlink(struct inode *d
+ return error;
+ }
+ unlock_page(page);
++ inode->i_mapping->a_ops = &shmem_aops;
+ inode->i_op = &shmem_symlink_inode_operations;
+ kaddr = kmap_atomic(page, KM_USER0);
+ memcpy(kaddr, symname, len);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:51 2008
+Message-Id: <20080730233151.253299313@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:47 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
+ "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
+Subject: [patch 57/62] markers: fix markers read barrier for multiple probes
+Content-Disposition: inline; filename=markers-fix-markers-read-barrier-for-multiple-probes.patch
+Content-Length: 2616
+Lines: 76
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+
+commit 5def9a3a22e09c99717f41ab7f07ec9e1a1f3ec8 upstream
+
+Paul pointed out two incorrect read barriers in the marker handler code in
+the path where multiple probes are connected. Those are ordering reads of
+"ptype" (single or multi probe marker), "multi" array pointer, and "multi"
+array data access.
+
+It should be ordered like this :
+
+read ptype
+smp_rmb()
+read multi array pointer
+smp_read_barrier_depends()
+access data referenced by multi array pointer
+
+The code with a single probe connected (optimized case, does not have to
+allocate an array) has correct memory ordering.
+
+It applies to kernel 2.6.26.x, 2.6.25.x and linux-next.
+
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/marker.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+--- a/kernel/marker.c
++++ b/kernel/marker.c
+@@ -127,6 +127,11 @@ void marker_probe_cb(const struct marker
+ struct marker_probe_closure *multi;
+ int i;
+ /*
++ * Read mdata->ptype before mdata->multi.
++ */
++ smp_rmb();
++ multi = mdata->multi;
++ /*
+ * multi points to an array, therefore accessing the array
+ * depends on reading multi. However, even in this case,
+ * we must insure that the pointer is read _before_ the array
+@@ -134,7 +139,6 @@ void marker_probe_cb(const struct marker
+ * in the fast path, so put the explicit barrier here.
+ */
+ smp_read_barrier_depends();
+- multi = mdata->multi;
+ for (i = 0; multi[i].func; i++) {
+ va_start(args, fmt);
+ multi[i].func(multi[i].probe_private, call_private, fmt,
+@@ -177,6 +181,11 @@ void marker_probe_cb_noarg(const struct
+ struct marker_probe_closure *multi;
+ int i;
+ /*
++ * Read mdata->ptype before mdata->multi.
++ */
++ smp_rmb();
++ multi = mdata->multi;
++ /*
+ * multi points to an array, therefore accessing the array
+ * depends on reading multi. However, even in this case,
+ * we must insure that the pointer is read _before_ the array
+@@ -184,7 +193,6 @@ void marker_probe_cb_noarg(const struct
+ * in the fast path, so put the explicit barrier here.
+ */
+ smp_read_barrier_depends();
+- multi = mdata->multi;
+ for (i = 0; multi[i].func; i++)
+ multi[i].func(multi[i].probe_private, call_private, fmt,
+ &args);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:51 2008
+Message-Id: <20080730233151.416621467@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:48 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alex Nixon <Alex.Nixon@citrix.com>,
+ Andi Kleen <andi@firstfloor.org>,
+ Jeremy Fitzhardinge <jeremy@goop.org>,
+ Peter Zijlstra <peterz@infradead.org>,
+ Ingo Molnar <mingo@elte.hu>,
+ Ian Campbell <Ian.Campbell@eu.citrix.com>,
+ Alexander Viro <viro@zeniv.linux.org.uk>,
+ Hugh Dickins <hugh@veritas.com>,
+ Jens Axboe <jens.axboe@oracle.com>
+Subject: [patch 58/62] VFS: increase pseudo-filesystem block size to PAGE_SIZE
+Content-Disposition: inline; filename=vfs-increase-pseudo-filesystem-block-size-to-page_size.patch
+Content-Length: 1611
+Lines: 49
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Alex Nixon <alex.nixon@citrix.com>
+
+commit 3971e1a917548977cff71418a7c3575ffbc9571f upstream
+
+This commit:
+
+ commit ba52de123d454b57369f291348266d86f4b35070
+ Author: Theodore Ts'o <tytso@mit.edu>
+ Date: Wed Sep 27 01:50:49 2006 -0700
+
+ [PATCH] inode-diet: Eliminate i_blksize from the inode structure
+
+caused the block size used by pseudo-filesystems to decrease from
+PAGE_SIZE to 1024 leading to a doubling of the number of context switches
+during a kernbench run.
+
+Signed-off-by: Alex Nixon <Alex.Nixon@citrix.com>
+Cc: Andi Kleen <andi@firstfloor.org>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Ingo Molnar <mingo@elte.hu>
+Cc: Ian Campbell <Ian.Campbell@eu.citrix.com>
+Cc: "Theodore Ts'o" <tytso@mit.edu>
+Cc: Alexander Viro <viro@zeniv.linux.org.uk>
+Cc: Hugh Dickins <hugh@veritas.com>
+Cc: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/libfs.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/libfs.c
++++ b/fs/libfs.c
+@@ -216,8 +216,8 @@ int get_sb_pseudo(struct file_system_typ
+
+ s->s_flags = MS_NOUSER;
+ s->s_maxbytes = ~0ULL;
+- s->s_blocksize = 1024;
+- s->s_blocksize_bits = 10;
++ s->s_blocksize = PAGE_SIZE;
++ s->s_blocksize_bits = PAGE_SHIFT;
+ s->s_magic = magic;
+ s->s_op = ops ? ops : &simple_super_operations;
+ s->s_time_gran = 1;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:51 2008
+Message-Id: <20080730233151.604171281@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:49 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Thomas Renninger <trenn@suse.de>,
+ Andi Kleen <andi@firstfloor.org>,
+ Len Brown <lenb@kernel.org>,
+ Dave Jones <davej@codemonkey.org.uk>,
+ Ingo Molnar <mingo@elte.hu>,
+ Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
+Subject: [patch 59/62] cpufreq acpi: only call _PPC after cpufreq ACPI init funcs got called already
+Content-Disposition: inline; filename=cpufreq-acpi-only-call-_ppc-after-cpufreq-acpi-init-funcs-got-called-already.patch
+Content-Length: 3693
+Lines: 107
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Thomas Renninger <trenn@suse.de>
+
+commit a1531acd43310a7e4571d52e8846640667f4c74b upstream
+
+Ingo Molnar provided a fix to not call _PPC at processor driver
+initialization time in "[PATCH] ACPI: fix cpufreq regression" (git
+commit e4233dec749a3519069d9390561b5636a75c7579)
+
+But it can still happen that _PPC is called at processor driver
+initialization time.
+
+This patch should make sure that this is not possible anymore.
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+Cc: Andi Kleen <andi@firstfloor.org>
+Cc: Len Brown <lenb@kernel.org>
+Cc: Dave Jones <davej@codemonkey.org.uk>
+Cc: Ingo Molnar <mingo@elte.hu>
+Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c | 6 ++++++
+ drivers/acpi/processor_perflib.c | 15 +++++++++++++--
+ drivers/cpufreq/cpufreq.c | 3 +++
+ include/linux/cpufreq.h | 1 +
+ 4 files changed, 23 insertions(+), 2 deletions(-)
+
+--- a/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c
++++ b/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c
+@@ -96,6 +96,12 @@ static int pmi_notifier(struct notifier_
+ struct cpufreq_frequency_table *cbe_freqs;
+ u8 node;
+
++ /* Should this really be called for CPUFREQ_ADJUST, CPUFREQ_INCOMPATIBLE
++ * and CPUFREQ_NOTIFY policy events?)
++ */
++ if (event == CPUFREQ_START)
++ return 0;
++
+ cbe_freqs = cpufreq_frequency_get_table(policy->cpu);
+ node = cbe_cpu_to_node(policy->cpu);
+
+--- a/drivers/acpi/processor_perflib.c
++++ b/drivers/acpi/processor_perflib.c
+@@ -64,7 +64,13 @@ static DEFINE_MUTEX(performance_mutex);
+ * policy is adjusted accordingly.
+ */
+
+-static unsigned int ignore_ppc = 0;
++/* ignore_ppc:
++ * -1 -> cpufreq low level drivers not initialized -> _PSS, etc. not called yet
++ * ignore _PPC
++ * 0 -> cpufreq low level drivers initialized -> consider _PPC values
++ * 1 -> ignore _PPC totally -> forced by user through boot param
++ */
++static unsigned int ignore_ppc = -1;
+ module_param(ignore_ppc, uint, 0644);
+ MODULE_PARM_DESC(ignore_ppc, "If the frequency of your machine gets wrongly" \
+ "limited by BIOS, this should help");
+@@ -72,7 +78,7 @@ MODULE_PARM_DESC(ignore_ppc, "If the fre
+ #define PPC_REGISTERED 1
+ #define PPC_IN_USE 2
+
+-static int acpi_processor_ppc_status = 0;
++static int acpi_processor_ppc_status;
+
+ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
+ unsigned long event, void *data)
+@@ -81,6 +87,11 @@ static int acpi_processor_ppc_notifier(s
+ struct acpi_processor *pr;
+ unsigned int ppc = 0;
+
++ if (event == CPUFREQ_START && ignore_ppc <= 0) {
++ ignore_ppc = 0;
++ return 0;
++ }
++
+ if (ignore_ppc)
+ return 0;
+
+--- a/drivers/cpufreq/cpufreq.c
++++ b/drivers/cpufreq/cpufreq.c
+@@ -825,6 +825,9 @@ static int cpufreq_add_dev(struct sys_de
+ policy->user_policy.min = policy->cpuinfo.min_freq;
+ policy->user_policy.max = policy->cpuinfo.max_freq;
+
++ blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
++ CPUFREQ_START, policy);
++
+ #ifdef CONFIG_SMP
+
+ #ifdef CONFIG_HOTPLUG_CPU
+--- a/include/linux/cpufreq.h
++++ b/include/linux/cpufreq.h
+@@ -109,6 +109,7 @@ struct cpufreq_policy {
+ #define CPUFREQ_ADJUST (0)
+ #define CPUFREQ_INCOMPATIBLE (1)
+ #define CPUFREQ_NOTIFY (2)
++#define CPUFREQ_START (3)
+
+ #define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
+ #define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:51 2008
+Message-Id: <20080730233151.757380139@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:50 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Julia Lawall <julia@diku.dk>,
+ Michael Buesch <mb@bu3sch.de>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 60/62] b43legacy: Release mutex in error handling code
+Content-Disposition: inline; filename=b43legacy-release-mutex-in-error-handling-code.patch
+Content-Length: 1225
+Lines: 54
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Julia Lawall <julia@diku.dk>
+
+commit 4104863fb4a724723d1d5f3cba9d3c5084087e45 upstream
+
+The mutex is released on a successful return, so it would seem that it
+should be released on an error return as well.
+
+The semantic patch finds this problem is as follows:
+(http://www.emn.fr/x-info/coccinelle/)
+
+// <smpl>
+@@
+expression l;
+@@
+
+mutex_lock(l);
+.. when != mutex_unlock(l)
+ when any
+ when strict
+(
+if (...) { ... when != mutex_unlock(l)
++ mutex_unlock(l);
+ return ...;
+}
+|
+mutex_unlock(l);
+)
+// </smpl>
+
+Signed-off-by: Julia Lawall <julia@diku.dk>
+Signed-off-by: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/b43legacy/main.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/b43legacy/main.c
++++ b/drivers/net/wireless/b43legacy/main.c
+@@ -3862,10 +3862,10 @@ static int b43legacy_resume(struct ssb_d
+ goto out;
+ }
+ }
+- mutex_unlock(&wl->mutex);
+
+ b43legacydbg(wl, "Device resumed.\n");
+ out:
++ mutex_unlock(&wl->mutex);
+ return err;
+ }
+
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:52 2008
+Message-Id: <20080730233151.930190300@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:51 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Pavel Roskin <proski@gnu.org>,
+ Nick Kossifidis <mickflemm@gmail.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 61/62] ath5k: dont enable MSI, we cannot handle it yet
+Content-Disposition: inline; filename=ath5k-don-t-enable-msi-we-cannot-handle-it-yet.patch
+Content-Length: 1445
+Lines: 47
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Pavel Roskin <proski@gnu.org>
+
+commit 256b152b005e319f985f50f2a910a75ba0def74f upstream
+
+MSI is a nice thing, but we cannot enable it without changing the
+interrupt handler. If we do it, we break MSI capable hardware,
+specifically AR5006 chipset.
+
+Signed-off-by: Pavel Roskin <proski@gnu.org>
+Acked-by: Nick Kossifidis <mickflemm@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath5k/base.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+--- a/drivers/net/wireless/ath5k/base.c
++++ b/drivers/net/wireless/ath5k/base.c
+@@ -487,9 +487,6 @@ ath5k_pci_probe(struct pci_dev *pdev,
+ /* Set private data */
+ pci_set_drvdata(pdev, hw);
+
+- /* Enable msi for devices that support it */
+- pci_enable_msi(pdev);
+-
+ /* Setup interrupt handler */
+ ret = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
+ if (ret) {
+@@ -567,7 +564,6 @@ err_ah:
+ err_irq:
+ free_irq(pdev->irq, sc);
+ err_free:
+- pci_disable_msi(pdev);
+ ieee80211_free_hw(hw);
+ err_map:
+ pci_iounmap(pdev, mem);
+@@ -589,7 +585,6 @@ ath5k_pci_remove(struct pci_dev *pdev)
+ ath5k_detach(pdev, hw);
+ ath5k_hw_detach(sc->ah);
+ free_irq(pdev->irq, sc);
+- pci_disable_msi(pdev);
+ pci_iounmap(pdev, sc->iobase);
+ pci_release_region(pdev, 0);
+ pci_disable_device(pdev);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:52 2008
+Message-Id: <20080730233152.095493572@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:52 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Nick Piggin <npiggin@suse.de>
+Subject: [patch 62/62] Fix off-by-one error in iov_iter_advance()
+Content-Disposition: inline; filename=fix-off-by-one-error-in-iov_iter_advance.patch
+Content-Length: 1464
+Lines: 38
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+commit 94ad374a0751f40d25e22e036c37f7263569d24c upstream
+
+The iov_iter_advance() function would look at the iov->iov_len entry
+even though it might have iterated over the whole array, and iov was
+pointing past the end. This would cause DEBUG_PAGEALLOC to trigger a
+kernel page fault if the allocation was at the end of a page, and the
+next page was unallocated.
+
+The quick fix is to just change the order of the tests: check that there
+is any iovec data left before we check the iov entry itself.
+
+Thanks to Alexey Dobriyan for finding this case, and testing the fix.
+
+Reported-and-tested-by: Alexey Dobriyan <adobriyan@gmail.com>
+Cc: Nick Piggin <npiggin@suse.de>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/filemap.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mm/filemap.c
++++ b/mm/filemap.c
+@@ -1778,7 +1778,7 @@ void iov_iter_advance(struct iov_iter *i
+ * The !iov->iov_len check ensures we skip over unlikely
+ * zero-length segments (without overruning the iovec).
+ */
+- while (bytes || unlikely(!iov->iov_len && i->count)) {
++ while (bytes || unlikely(i->count && !iov->iov_len)) {
+ int copy;
+
+ copy = min(bytes, iov->iov_len - base);
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:41 2008
+Message-Id: <20080730233141.735738352@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:51 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Karl Beldan <karl.beldan@gmail.com>,
+ Eric Miao <eric.miao@marvell.com>,
+ Pierre Ossman <drzeus@drzeus.cx>
+Subject: [patch 01/62] pxamci: trivial fix of DMA alignment register bit clearing
+Content-Disposition: inline; filename=pxamci-trivial-fix-of-dma-alignment-register-bit-clearing.patch
+Content-Length: 794
+Lines: 30
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Karl Beldan <karl.beldan@gmail.com>
+
+commit 4fe16897c59882420d66f2d503106653d026ed6c upstream
+
+Signed-off-by: Karl Beldan <karl.beldan@gmail.com>
+Acked-by: Eric Miao <eric.miao@marvell.com>
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/mmc/host/pxamci.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/mmc/host/pxamci.c
++++ b/drivers/mmc/host/pxamci.c
+@@ -177,7 +177,7 @@ static void pxamci_setup_data(struct pxa
+ if (dalgn)
+ DALGN |= (1 << host->dma);
+ else
+- DALGN &= (1 << host->dma);
++ DALGN &= ~(1 << host->dma);
+ DDADR(host->dma) = host->sg_dma;
+ DCSR(host->dma) = DCSR_RUN;
+ }
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:45 2008
+Message-Id: <20080730233145.484625500@mini.kroah.org>
+References: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:31:13 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alexey Dobriyan <adobriyan@gmail.com>,
+ "Vegard Nossum" <vegard.nossum@gmail.com>
+Subject: [patch 23/62] proc: fix /proc/*/pagemap
+Content-Disposition: inline; filename=proc-fix-proc-pagemap-some-more.patch
+Content-Length: 1060
+Lines: 35
+
+2.6.26 -stable review patch. If anyone has any objections, please let
+us know.
+
+------------------
+From: Alexey Dobriyan <adobriyan@gmail.com>
+
+commit ee1e6ab6056a8b9c19377257002da98b83819531 upstream
+
+struct pagemap_walk was placed on stack, some hooks are initialized, the
+rest (->pgd_entry, ->pud_entry, ->pte_entry) are valid but junk.
+
+Reported-by: Eric Sesterhenn <snakebyte@gmx.de>
+Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
+Cc: "Vegard Nossum" <vegard.nossum@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/proc/task_mmu.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/proc/task_mmu.c
++++ b/fs/proc/task_mmu.c
+@@ -636,7 +636,7 @@ static ssize_t pagemap_read(struct file
+ struct pagemapread pm;
+ int pagecount;
+ int ret = -ESRCH;
+- struct mm_walk pagemap_walk;
++ struct mm_walk pagemap_walk = {};
+ unsigned long src;
+ unsigned long svpfn;
+ unsigned long start_vaddr;
+
+--
+
+From gregkh@mini.kroah.org Wed Jul 30 16:31:41 2008
+Message-Id: <20080730233050.332789722@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Wed, 30 Jul 2008 16:30:50 -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>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk
+Subject: [patch 00/62] 2.6.26-stable review
+Status: RO
+Content-Length: 5164
+Lines: 99
+
+This is the start of the stable review cycle for the 2.6.26.1 release.
+There are 62 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 August 1, 12: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.26.1-rc1.gz
+and the diffstat can be found below.
+
+
+thanks,
+
+the -stable release team
+
+
+ Documentation/networking/udplite.txt | 2 +-
+ Documentation/video4linux/cx18.txt | 12 +--
+ Makefile | 5 +-
+ arch/ia64/kvm/kvm-ia64.c | 3 +
+ arch/powerpc/kvm/powerpc.c | 4 +
+ arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c | 6 +
+ arch/s390/kvm/kvm-s390.c | 4 +
+ arch/sparc64/kernel/irq.c | 10 ++-
+ arch/sparc64/kernel/ldc.c | 38 ++++----
+ arch/sparc64/kernel/time.c | 15 ++-
+ arch/um/include/init.h | 8 ++
+ arch/x86/Kconfig.cpu | 2 +-
+ arch/x86/kernel/acpi/sleep.c | 17 +++-
+ arch/x86/kernel/i387.c | 4 +-
+ arch/x86/kernel/ptrace.c | 4 +-
+ arch/x86/kernel/reboot.c | 8 ++
+ arch/x86/kvm/mmu.c | 10 ++-
+ arch/x86/kvm/svm.c | 34 ++++--
+ arch/x86/kvm/vmx.c | 7 +-
+ arch/x86/kvm/x86.c | 5 +
+ arch/x86/kvm/x86_emulate.c | 2 +-
+ arch/x86/mm/init_64.c | 2 +-
+ drivers/acpi/processor_perflib.c | 15 +++-
+ drivers/cpufreq/cpufreq.c | 3 +
+ drivers/dma/iop-adma.c | 2 +
+ drivers/ide/ide-cd.c | 27 ++++-
+ drivers/media/dvb/dvb-usb/dib0700_devices.c | 7 +-
+ drivers/media/dvb/dvb-usb/dvb-usb-ids.h | 1 +
+ drivers/media/video/Kconfig | 8 +--
+ drivers/media/video/cx18/cx18-firmware.c | 2 +-
+ drivers/media/video/cx23885/cx23885-core.c | 142 +++++++++++++++++++++++-
+ drivers/media/video/saa7134/saa7134-cards.c | 3 -
+ drivers/media/video/saa7134/saa7134-core.c | 5 +-
+ drivers/media/video/uvc/Kconfig | 17 +++
+ drivers/media/video/uvc/uvc_driver.c | 12 ++-
+ drivers/media/video/uvc/uvc_status.c | 19 +++-
+ drivers/media/video/uvc/uvc_video.c | 116 +++++++++++++-------
+ drivers/media/video/uvc/uvcvideo.h | 2 +
+ drivers/mmc/host/pxamci.c | 2 +-
+ drivers/net/hamradio/hdlcdrv.c | 1 +
+ drivers/net/ixgbe/ixgbe_main.c | 2 -
+ drivers/net/myri10ge/myri10ge.c | 30 +++---
+ drivers/net/wireless/ath5k/base.c | 5 -
+ drivers/net/wireless/b43legacy/main.c | 2 +-
+ drivers/rtc/rtc-at91rm9200.c | 16 +--
+ drivers/spi/mpc52xx_psc_spi.c | 22 ++---
+ drivers/usb/serial/usb-serial.c | 5 +-
+ fs/dquot.c | 16 +++-
+ fs/ecryptfs/crypto.c | 30 +++--
+ fs/isofs/rock.c | 22 ++++-
+ fs/libfs.c | 4 +-
+ fs/proc/task_mmu.c | 2 +-
+ include/asm-arm/bitops.h | 9 ++-
+ include/asm-generic/vmlinux.lds.h | 4 +-
+ include/asm-sparc64/io.h | 1 -
+ include/asm-x86/signal.h | 4 +-
+ include/linux/cpufreq.h | 1 +
+ include/linux/ipv6.h | 2 +
+ include/linux/kvm_host.h | 1 +
+ kernel/cpuset.c | 4 +-
+ kernel/marker.c | 12 ++-
+ kernel/rcupreempt.c | 2 +-
+ kernel/sys_ni.c | 1 +
+ mm/filemap.c | 2 +-
+ mm/shmem.c | 3 +-
+ net/ipv4/tcp_input.c | 3 +-
+ net/ipv4/udp.c | 4 +
+ net/ipv6/ip6_fib.c | 4 +-
+ scripts/Makefile.modpost | 1 +
+ scripts/mod/modpost.c | 3 +-
+ sound/pci/trident/trident_main.c | 5 +-
+ virt/kvm/kvm_main.c | 3 +
+ 72 files changed, 589 insertions(+), 222 deletions(-)
+ create mode 100644 drivers/media/video/uvc/Kconfig
+
+